二、MyBatis 入门程序
2.1 环境
-
软件
- intelliJ IDEA:2023.2.1
- Navicat for MySQL:16.0.14
- MySQL 数据库:8.0.33
-
组件
- MySQL 驱动:8.0.33
- MyBatis:3.5.13
- JDK:Java 17
- JUnit
- Logback
2.2 入门程序开发步骤
-
准备数据库表
-
IDEA --> new project,配置 JDK
-
新建一个 Maven 模块
-
① 引入 mybatis 依赖和 mysql 依赖
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency> </dependencies>
-
② 在 src/main/resources 中编写 mybatis 核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> // 事务管理 <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/formybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!-- 指定 XxxMapper.xml 的路径 --> <mapper resource="XxxMapper.xml"/> </mappers> </configuration>
-
③ 在 src/main/resources 中编写 SQL 语句的配置文件,XxxMapper.xml(一张表对应一个),以 insert 语句为例
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"> <insert id="xxx"> <!-- insert 语句 --> </insert> </mapper>
-
④ 编写 MyBatis 程序
-
SqlSessionFactoryBuilder --> SqlSessionFactory --> SqlSession
// 获取 SqlSessionFactoryBuilder 对象 SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); // 获取 SqlSessionFactory 对象 // 一个数据库对应一个 SqlSessionFactory 对象,通常一个该对象对应一个数据库 InputStream is = Resources.getResourceAsStream("mybatis 核心配置文件的路径"); // 默认从类的根路径下开始查找 SqlSessionFactory ssf = ssfb.build(is); // 获取 SqlSession 对象 SqlSession sqlSession = ssf.openSession(); // 执行 SQL 语句 sqlSession.insert("SQL 语句的配置文件中对应的 id"); // 返回值:影响数据库表中的记录条数 // 手动提交 sqlSession.commit();
-
-
2.3 完整的 Mybatis 程序
public class FirstMybatis {
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
// 开启会话(底层开启事务机制)
sqlSession = sqlSessionFactory.openSession();
// 执行 SQL 语句,处理相关业务
int count = sqlSession.insert("insertStu");
System.out.println(count);
// 没有发生异常时提交事务
sqlSession.commit();
} catch (IOException e) {
if (sqlSession != null) {
sqlSession.rollback();
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
2.4 引入日志框架 logback
引入日志框架可以看清楚 mybatis 执行的具体 sql
-
在配置文件 <configuration> 中添加 <settings>,参考 Maven 手册
- STDOUT_LOGGING 是标准日志,mybatis 已经实现了这种标准日志
- 在使用其他日志时,需要引入相应的依赖
<configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING"></setting> </settings> </configuration>
-
① 核心配置文件中添加 <settings>
<settings> <setting name="logImpl" value="SLF4J"/> </settings>
-
② 引入 logback 依赖,这个日志框架实现了 slf4j 规范
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> <scope>test</scope> <!-- 注意这里的范围 --> </dependency>
-
③ 引入 logback 配置文件
- 该文件必须放在类的根路径下,即 src/main/resources 目录下
- 配置文件名必须为 logback-test 或 logback
<?xml version="1.0" encoding="UTF-8"?> <!-- 配置文件修改时重新加载,默认true --> <configuration scan="false"> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 日志输出格式 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- mybatis log configure --> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日志输出级别,TRACE < DEBUG < INFO < WARN < ERROR --> <root level="DEBUG"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> </configuration>
2.5 封装 mybatis 工具类
public class SqlSessionUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private SqlSessionUtil() {
}
/**
* 获取会话对象
* @return 会话对象
*/
public static SqlSession openSession() {
return sqlSessionFactory.openSession();
}
}