MyBatis概述与MyBatis入门程序
- 一、MyBatis概述
- 二、入门程序
- 1.准备开发环境
- (1)准备数据库
- (2)创建一个maven项目
- 2.编写代码
- (1)打包方式和引入依赖
- (2)新建mybatis-config.xml配置⽂件
- (3)新建XXXMapper.xml配置⽂件
- (4)编写测试代码
- (5)引入日志
- (6)MyBatis第⼀个⽐较完整的代码写法
- (7)MyBatis⼯具类SqlSessionUtil的封装
- 三、MyBatis事务管理深度剖析
- 四、总结
- 框架其实就是对通⽤代码的封装,提前写好了⼀堆接⼝和类,我们可以在做项⽬的时候直接引⼊这些
接⼝和类(引⼊框架),基于这些现有的接⼝和类进⾏开发,可以⼤⼤提⾼开发效率。
一、MyBatis概述
- MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。
- MyBatis在三层架构中负责持久层的,属于持久层框架。
- MyBatis属于半⾃动化ORM框架,需要自己编写SQL语句。
- Hibernate属于全⾃动化的ORM框架,不需要自己编写SQL语句。
- ORM:对象关系映射
- O(Object):Java虚拟机中的Java对象
- R(Relational):关系型数据库
- M(Mapping):将Java虚拟机中的Java对象映射到数据库表中⼀⾏记录,或是将数据库表中的⼀⾏记录映射成Java虚拟机中的⼀个Java对象。
二、入门程序
1.准备开发环境
(1)准备数据库
# schema.sql 文件
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article`
(`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`user_id` int NOT NULL COMMENT '作者 ID',`title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章标题',`summary` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文章概要',`read_count` int(11) UNSIGNED ZEROFILL NOT NULL COMMENT '阅读读数',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NOT NULL COMMENT '最后修改时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDBAUTO_INCREMENT = 1CHARACTER SET = utf8mb4COLLATE = UTF8MB4_0900_AI_CIROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `article_detail`;
CREATE TABLE `article_detail`
(`id` int NOT NULL AUTO_INCREMENT COMMENT '注解',`article_id` int NOT NULL COMMENT '文章 ID',`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章内容',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDBAUTO_INCREMENT = 1CHARACTER SET = utf8mb4COLLATE = utf8mb4_0900_ai_ciROW_FORMAT = Dynamic;
# data.sql 文件
-- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article`
VALUES (1, 2021, 'MyBatis概述', 'MyBatis是半自动的ORM框架', 654897, '2024-01-26 03:11:12','2024-02-25 12:11:19');
INSERT INTO `article`
VALUES (2, 2324, 'Spring容器', 'IOC、AOP', 345, '2025-01-19 15:15:57', '2025-02-16 4:19:30');-- ----------------------------
-- Records of article_detail
-- ----------------------------
INSERT INTO `article_detail`
VALUES (1, 1, 'MyBatis是非常优秀的持久层框架');
(2)创建一个maven项目
- 可以参考我的博客 ====> IDEA 构建开发环境中的构建一个普通的Maven模块
2.编写代码
(1)打包方式和引入依赖
- Maven中央仓库可以寻找自己需要的依赖。
<!--pom.xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gdb</groupId><artifactId>mybatis-code</artifactId><version>1.0-SNAPSHOT</version><!--打包方式--><packaging>jar</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--mybatis核⼼依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><!--mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies>
</project>
(2)新建mybatis-config.xml配置⽂件
-
在resources根⽬录下新建mybatis-config.xml配置⽂件(可以参考mybatis⼿册拷⻉)。
<?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><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/使用的数据库名"/><property name="username" value="root"/><property name="password" value="自己的数据库密码!"/></dataSource></environment></environments><mappers><!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥--><mapper resource=""/></mappers> </configuration>
(3)新建XXXMapper.xml配置⽂件
- 在resources根⽬录下新建XXXMapper.xml配置⽂件(可以参考mybatis⼿册拷⻉)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="article"><insert id="insertArticle">insert into article values(null, 9874, 'JavaWeb', 'Filter', 645133, '2026-05-16 12:15:27', '2026-08-16 4:15:30');</insert>
</mapper>
- 将CarMapper.xml⽂件路径配置到mybatis-config.xml 中
<mappers><!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥--><mapper resource="articleMapper.xml"/></mappers>
(4)编写测试代码
public class TestMyBatis {public static void main(String[] args) throws Exception{//获取 SqlSessionBuilder 对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//获取 SqlSessionFactory 对象,Resources.getResourceAsReader()默认从类的根路径下加载文件。//Resources是MyBatis提供的工具类,源码是 ClassLoder.getSystemClassLoader().getResourceAsStream("类路径下的文件路径");SqlSessionFactory sqlSessionFactory = builder.build(Resources.getResourceAsReader("mybatis-config.xml"));//获取 SqlSession 对象SqlSession sqlSession = sqlSessionFactory.openSession();//执行 SQL 语句int count = sqlSession.insert("insertArticle");System.out.println("插入的记录条数:====> " + count);//MyBatis默认关闭的自动提交机制的sqlSession.commit();//释放资源sqlSession.close();}
}
(5)引入日志
- 关于mybatis集成日志组件。让我们调试起来更加的方便。
- mybatis常见的集成的日志组件有那些呢?
- SLF4J(沙拉风):沙拉风是一个日志标准,其中有一个框架叫做logback,它实现了沙拉风规范。
- LOG4J
- LOG4J2
- STDOUT_LOGGING
- …
- 注意:log4j log4j2 logback 都是同一个作者开发的。
- 中STDOUT_LOGGING是标准日志,mybatis已经实现了这种标准日志。mybatis框架本身已经实现了这种标准。只要开启即可。在mybatis-config.xml文件中使用settings标签进行配置开启。这个标签在编写的时候要注意,它应该出现在environments标签之前。注意顺序。
<settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
- mybatis常见的集成的日志组件有那些呢?
(6)MyBatis第⼀个⽐较完整的代码写法
public class TestMyBatis {public static void main(String[] args) {SqlSession sqlSession = null;try {// 1.创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 2.创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));// 3.创建SqlSession对象sqlSession = sqlSessionFactory.openSession();// 4.执⾏SQLint count = sqlSession.insert("insertArticle");System.out.println("插入了⼏条记录:" + count);// 5.提交sqlSession.commit();} catch (Exception e) {// 回滚if (sqlSession != null) {sqlSession.rollback();}e.printStackTrace();} finally {// 6.关闭if (sqlSession != null) {sqlSession.close();}}}
}
(7)MyBatis⼯具类SqlSessionUtil的封装
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;/*** 类加载时初始化sqlSessionFactory对象*/static {try {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));} catch (Exception e) {e.printStackTrace();}}/*** 每调⽤⼀次openSession()可获取⼀个新的会话,该会话⽀持⾃动提交。*/public static SqlSession openSession() {return sqlSessionFactory.openSession(true);}
}
public class TestMyBatis {public static void main(String[] args) {SqlSession sqlSession = null;try {sqlSession = MybatisUtils.openSession();// 4.执⾏SQLint count = sqlSession.insert("insertArticle");System.out.println("插入了⼏条记录:" + count);// 5.提交sqlSession.commit();} catch (Exception e) {// 回滚if (sqlSession != null) {sqlSession.rollback();}e.printStackTrace();} finally {// 6.关闭if (sqlSession != null) {sqlSession.close();}}}
}
三、MyBatis事务管理深度剖析
- 在MyBatis-config.xml文件中,可以通过以下的配置进行MyBatis的事务管理。
<transactionManager type="JDBC"/>
- type属性的值有两个(不区分大小写):
- JDBC(jdbc):JDBC事务管理器。由MyBatis框架自己管理事务,自己采用原生的JDBC代码去管理事务。默认是开启事务的,需要自己手动的提交。可以通过以下的方式关闭事务:
SqlSession sqlSession = sqlSessionFactory.openSession(true); //关闭事务(自动提交)
- MANAGED(manged) :MANFGED事务管理器。mybatis不再负责事务的管理了。事务交给其他容器来负责。例如:spring.
- 对于我们当前单纯只有mybatis的情况下,如果设置为MANAGED那么事务这块就没人管了。没有人管理的事务压根就没有开启。
- JDBC(jdbc):JDBC事务管理器。由MyBatis框架自己管理事务,自己采用原生的JDBC代码去管理事务。默认是开启事务的,需要自己手动的提交。可以通过以下的方式关闭事务:
四、总结
- Maven中央仓库
- MyBatis中文手册
- Resources 目录:放在整个目录当中的,一般都是资源文件,配置文件。直接放到Resources 目录下的资源,等同于放到类的根路径下。
- 以后凡是遇到resource这个单词,大部分情况下,这种加载资源的方式就是从类的根路径下开始加载(开始查找)
- MyBatis中的主要对象:
- 在Mybatis当中,负责执行SQL语句的那个对象 ===> SqlSession
- SqlSession是专门用来执行SQL语句的,是一个Java程序和数据库之间的一次会话。
- 想要获取SqlSession对象,需要先获取SqlSessionFactory对象,通过SqlSessionFactory工厂来生产SqlSession对象。
- 获取SqlSessionFactory对象,需要首先获取SqlSessionFactoryBuilder对象。通过SqlSessionFactoryBuilder对象的build方法,来获取一个SqlSessionFactory对象。
SqlSessionFactoryBuilder --> SqlSessionFactory --> SqlSession
- 在Mybatis当中,负责执行SQL语句的那个对象 ===> SqlSession
- mybatis中的两个主要的配置文件:
- 其中一个是:mybatis-config.xml,这是核心配置文件,主要配置连接数据库的信息等。(一个)
- 另一个是:XxxxMapper.xml,这个是专门来编写SQL语句的配置文件。(一个表一个)