当前位置: 首页 > news >正文

Mybatis-01

Mybatis

-Mybatis是什么?

MyBatis 是一款优秀的持久层框架,它支持 SQL、存储过程以及高级映射。

-Mybatis的三种使用方式

① sqlSession执行对应语句(不推荐)

② 利用注解 (只适用于较短的sql语句)

③ 接口代理(常用)

-如何使用Mybatis?(以接口代理的方式)

1.需要在pom.xml文件中导入mybatis的相关依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
2.需要在resources目录下创建mybatis-config.xml文件

要给每一个类在中写好每个类的别名,在mapper中写好映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 链接数据库只需要一个属性来配置文件,就会自动解析 --><properties resource="jdbc.properties" /><!--  设置别名,然后就可以使用别名来代替前面的路径 --><typeAliases><typeAlias type="com.tledu.mydemo.entity.User" alias="User"/><typeAlias type="com.tledu.mydemo.entity.Address" alias="Address"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 映射文件 --><mappers><!--        <mapper resource="mapper/Address.xml"/>-->
<!--        <mapper resource="mapper/User.xml"/>--></mappers>
</configuration>
3.拥有数据库表和jdbc.properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/表名?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=abc123
4.创建数据库操作的xml文件

xml文件应该放在resources目录下,并创建一个mapper文件夹专门存放

-如何设置日志打印?

​ 由于mybatis对sql进行了封装,这个时候我们在项目运行过程中,如果出现问题了就需要进行日志的打印,在这里可以通过log4j这个工具打印对应sql日志,帮助我们进行错误的排查。

1.引入日志的依赖
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
2.设置mybatis通过log4j打印日志

必须放在mybatis-config.xml文件中和之间

<settings><setting name="logImpl" value="LOG4J"/>
</settings>
3.在resources目录下添加log4.properties配置文件
### Log4j配置 ###
#定义log4j的输出级别和输出目的地(目的地可以自定义名称,和后面的对应)
#[ level ] , appenderName1 , appenderName2
log4j.rootLogger=DEBUG,console,file
#-----------------------------------#
#1 定义日志输出目的地为控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
####可以灵活地指定日志输出格式,下面一行是指定具体的格式 ###
#%c: 输出日志信息所属的类目,通常就是所在类的全名
#%m: 输出代码中指定的消息,产生的日志具体信息
#%n: 输出一个回车换行符,Windows平台为"/r/n"Unix平台为"/n"输出日志信息换行
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#-----------------------------------#
#2 文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.file = org.apache.log4j.RollingFileAppender
#日志文件输出目录
log4j.appender.file.File=log/info.log
#定义文件最大大小
log4j.appender.file.MaxFileSize=10mb
###输出日志信息###
#最低级别
log4j.appender.file.Threshold=ERROR
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#-----------------------------------#
#3 druid
log4j.logger.druid.sql=INFO
log4j.logger.druid.sql.DataSource=info
log4j.logger.druid.sql.Connection=info
log4j.logger.druid.sql.Statement=info
log4j.logger.druid.sql.ResultSet=info
#4 mybatis 显示SQL语句部分
log4j.logger.org.mybatis=DEBUG
#log4j.logger.cn.tibet.cas.dao=DEBUG
#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
4.完成

-单元测试用例展示

package com.tledu.mydemo;import com.tledu.mydemo.entity.Address;
import com.tledu.mydemo.mapper.IAddressMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;
import java.io.InputStream;/*** ClassName: AddressTest* Pacakage: com.tledu.mydemo* Description:** @Author: 刘松泽* @Create 2024/3/25 17:49* @Version 1.0*/
public class AddressTest {SqlSession session=null;//测试向表中添加数据@Testpublic void addAddressOne(){Address address = new Address();address.setId(6);address.setAddr("保定");address.setPhone("1399297788");address.setPostcode("224899");//调用session.getMapper(IAddressMapper.class).addAddress(address);}//测试向表中获取数据@Testpublic void getAddress() throws IOException {Address address = session.getMapper(IAddressMapper.class).getAddressById(1);System.out.println(address);}//测试删除表中的数据@Testpublic void deleteAddressOne(){session.getMapper(IAddressMapper.class).deleteAddress(1);}//测试更新表中的数据@Testpublic void updateAddressOne(){Address address = new Address();address.setId(3);address.setAddr("大连");address.setPhone("15677819087");address.setPostcode("769982");session.getMapper(IAddressMapper.class).updateAddress(address);}@BeforeEachpublic void before() throws IOException {String resource = "mybatis-config.xml";// 读取总配置文件InputStream inputStream = Resources.getResourceAsStream(resource);// 获取session工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 获取sessionsession = sqlSessionFactory.openSession();}@AfterEachpublic void after(){// 提交session.commit();}
}

相关文章:

  • 51单片机学习笔记10 IIC通讯和EEPROM
  • 2024/3/23 蓝桥杯
  • 洁盟、苏泊尔、希亦超声波清洗机哪家好?全方位实测对比谁更强
  • 网络七层模型:理解网络通信的架构(〇)
  • Spring 面试——restcontroller/requestmapping
  • git新建一个项目如何合并其他项目
  • 异步引入组件
  • 机器学习 - 神经网络分类
  • 【牛客】SQL146 0级用户高难度试卷的平均用时和平均得分
  • HashMap---数据结构
  • 开发npm上传发布
  • 华为OD技术面算法题整理
  • 家庭网络防御系统搭建-生产要素准备
  • 前端基础 Vue -组件化基础
  • 开始喜欢上了runnergo,JMeter out了?
  • [LeetCode] Wiggle Sort
  • CentOS 7 防火墙操作
  • Docker 笔记(2):Dockerfile
  • Fabric架构演变之路
  • Git初体验
  • Git学习与使用心得(1)—— 初始化
  • python_bomb----数据类型总结
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • XForms - 更强大的Form
  • 复习Javascript专题(四):js中的深浅拷贝
  • 精彩代码 vue.js
  • 聊聊hikari连接池的leakDetectionThreshold
  • 三栏布局总结
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通过git安装npm私有模块
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  •  一套莫尔斯电报听写、翻译系统
  • 正则表达式小结
  • ​2020 年大前端技术趋势解读
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​马来语翻译中文去哪比较好?
  • #Linux(权限管理)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (33)STM32——485实验笔记
  • (4) PIVOT 和 UPIVOT 的使用
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (独孤九剑)--文件系统
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十)c52学习之旅-定时器实验
  • (学习日记)2024.01.09
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转) ns2/nam与nam实现相关的文件
  • ***原理与防范
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net IOC框架入门之一 Unity
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET开发人员必知的八个网站
  • .sh