1. MyBatis 执行流程概述
上篇文章讲到 MyBatis入门 MyBatis 的基本入门案例我们实现了通过 MyBatis 去获取数据库的数据,那么他的基本流程如下:
- 第一步:是从配置文件中根据配置的信息构建 SqlSessionFactory 对象,由于配置文件中关联了映射文件 UserMapper.xml ,所以在 SqlSessionFactory 中也存在映射文件的内容
- 第二步:是从 SqlSessionFactory 中获取 SqlSession 会话对象,其实 SqlSession 会话对象底层封装的就是 conn 连接对象
- 第三步:是通过 SqlSession 会话对象调用查询方法 selectList 然后根据参数找到映射文件中的 sql 语句并将数据封装到 pojo 的User对象中
名词解释:
SqlSessionFactory : SqlSessionFactory 是 MyBatis 框架中的一个重要接口,用于创建SqlSession 对象,它是与数据库交互的主要入口点。
通过SqlSessionFactory,可以获取一个线程安全的SqlSession对象,用于执行数据库操作。SqlSessionFactory的创建是相对较重的操作,一般在应用程序的启动阶段进行创建,并在整个应用程序的生命周期内保持单例。它使用了一组配置信息,包括数据源、事务管理器、映射器(Mapper)等。
一般来说,创建SqlSessionFactory需要以下几个步骤:
- 加载MyBatis的配置文件,即包含了数据库连接信息、映射器配置等。 - 构建Configuration对象,作为SqlSessionFactory的配置信息。 - 使用SqlSessionFactoryBuilder根据配置信息创建SqlSessionFactory实例。
SqlSession: SqlSession是MyBatis框架中的一个核心接口,用于执行与数据库的交互操作。它提供了一系列的方法,包括查询、插入、更新、删除等,用于操作数据库并返回相应的结果。
SqlSession的一般使用流程如下:
- 通过SqlSessionFactory获取SqlSession对象。 - 使用SqlSession执行具体的数据库操作,如查询、插入、更新、删除等。 - 提交事务(如果使用了事务管理器)或手动调用SqlSession的commit()方法,将操作提交到数据库。 - 关闭SqlSession,释放相应的资源。
SqlSession提供了一系列的方法,例如查询、新增、更新、删除等,用于与数据库进行交互。
每个线程应该拥有自己的SqlSession实例,并在使用完后及时关闭,以确保数据库连接的正确释放。一般推荐使用 try-with-resources 或 try-finally 等方式来确保 SqlSession 的正确关闭。
2. MyBatis 配置文件详解
在我们上个案例中的完整配置如下:
spring: datasource: username: root password: root url: jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver # mybatis 配置 mybatis: # 配置实体类所在的包 type-aliases-package: com.snow.po # 配置 xml 文件所在的包 mapper-locations: classpath:com/snow/mapper/*.xml configuration: # 开启驼峰命名 map-underscore-to-camel-case: true logging: level: com.snow.mapper: debug
MyBatis 配置信息详解:
- username: 数据库用户名,这里设置为"root"。
- password: 数据库密码,这里设置为"root"。
- url: 数据库连接地址,这里使用MySQL数据库,连接地址为"jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"。其中,192.168.0.108是数据库服务器的IP地址,3306是MySQL数据库的默认端口号,"study_mybatis"是要连接的数据库名称,后面的部分是一些可选的连接参数,例如设置时区和字符编码等。
- driver-class-name: 数据库驱动类全限定名,这里使用的是MySQL的JDBC驱动类"com.mysql.cj.jdbc.Driver"。
- type-aliases-package: 配置实体类所在的包。这里设置为"com.snow.po",表示MyBatis会扫描该包下的实体类,并将其注册为别名,方便在映射文件中使用类名代替全限定名。
- mapper-locations: 配置XML映射文件所在的包或路径。这里设置为"classpath:com/snow/mapper/*.xml",表示MyBatis会在指定的包下按通配符的方式搜索映射文件,并加载到MyBatis中供使用。该配置可以指定一个或多个映射文件,多个映射文件之间使用逗号或分号分隔。
- configuration: MyBatis的全局配置项。
- map-underscore-to-camel-case: 配置是否开启驼峰命名规则。这里设置为"true",表示开启驼峰命名规则,即将下划线分隔的数据库字段名转换为驼峰命名的Java属性名。例如,数据库字段名为"first_name",则对应的Java属性名为"firstName"。默认情况下,MyBatis是关闭这个功能的,需要手动开启。
3. Mappers 映射器
mappers(映射器):UserMapper.xml====>UserMapper.java接口 关联.
mappers 是 MyBatis 配置文件中用于指定映射器(Mapper)接口的配置项。
Mapper接口是定义了与数据库交互的方法的接口,它与映射文件相对应,可以通过映射文件中定义的SQL语句来执行数据库操作。配置mappers使得MyBatis能够将Mapper接口与对应的映射文件进行关联。
以下是一个示例的mappers配置项的写法:
mappers: - package: com.snow.mapper - mapper: com.snow.mapper.UserMapper
可以有两种方式进行配置:
- 使用package配置项指定一个包名,表示将该包下的所有Mapper接口进行自动扫描,并将其与对应的映射文件进行关联。
- 使用mapper配置项指定一个具体的Mapper接口的全限定名,表示将该Mapper接口与对应的映射文件进行关联。
可以根据实际情况配置 mappers,使得 MyBatis 能够正确加载和使用您定义的Mapper接口。