2022年6月23
一. mybatis 的入门-
外部文件的引入(路径在resource下)db.properties
mysql.driver=com.mysql.cj.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=UTC&useSSL=fals e mysql.username=root mysql.password=password
-
mybatis-config.xml ——路径(resource)
-
UserMapper.xml ——(resource/mapper)
select * from users where uid = #{id} -
User.java
package com.hcxy.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data //生成getter,setter等函数 @AllArgsConstructor //生成全参数构造函数 @NoArgsConstructor //生成无参构造函数 public class Users { private int uid; private String uname; private int uage; } -
Text.java
public class UserTest { public static void main(String[] args) throws IOException { //获取配置文件 String path = "mybatis-config.xml"; Reader resourceAsReader = Resources.getResourceAsReader(path); // 创建工厂对象SqlSessionFactory SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader); //创建SqlSession对象,有各种对数据库的操作 SqlSession session = build.openSession(); // 唯一标识:namespace statementID Users users = session.selectOne("com.hcxy.pojo.Users.findById",1); // log.debug(users); System.out.println("users = " + users); session.close(); } }
MyBatis框架在操作数据库时,大体经过了8个步骤。下面结合MyBatis工作原理图对每一步流程进行
详细讲解,具体如下。
- MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了
MyBatis的运行环境等信息。 - 加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语
句,需要在mybatis-config.xml中加载才能执行。 - 构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建
SqlSession。 4. 创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句
的所有方法。 - 创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作
数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存
地维护。 - 封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装
到MappedStatement对象中。 - 操作数据库:根据动态生成的SQL操作数据库。
- 输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。
-
setting
-
typeAliases
全限定类设置别名的方式: 方式一:在
元素下,使用多个 元素为每一个全限定类逐个配置别名。 方式二(推荐):通过自动扫描包的形式自定义别名 ,默认实体的类型就是别名也就是在对Sql映射的时候直接可以写实体类的名称,但是namespace 属性还是写实体类的包名路径比较好 除了可以使用
元素为实体类自定义别名外,MyBatis框架还为许多常见的Java类型(如数值、字符串、日期和集合等)提供了相应的默认别名。
例如别名byte映射类型byte、long映射类型long等,别名可以在MyBatis中直接使用,但由于别名不区 分大小写,所以在使用时要注意重复定义的覆盖问题 -
environments
MyBatis可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配
置,从而将SQL映射到不同运行环境的数据库中。不同的运行环境可以通过元素配 置,但不管增加几套运行环境,都必须要明确选择出当前要用的唯一的一个运行环境。
-
配置使用数据库环境,通过mabatis-config.xml 中修改 default
-
修改创建工厂对象SqlSessionFactory
//获取配置文件 String path = "mybatis-config.xml"; Reader resourceAsReader = Resources.getResourceAsReader(path); // 创建工厂对象SqlSessionFactory SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader,"text"); // 这里指定,xml中的指定则无效
-
mappers
在MyBatis的核心配置文件中,元素用于引入MyBatis映射文件。映射文件包含了POJO对象和数据表之间的映射信息,MyBatis通过核心配置文件中的 元素找到映射文件并解析其中的映射信息。通过 元素引入映射文件的方法有4种。
mybatis接口式开发接口式开发:
1.方法的名称需要保证和映射文件中的sqL语句的statmentId一致, 这里的两个方法名称findByID(), findTotal()与 UsersMapper.xml 中的 id 名称一致
2.namespace的值必须是接口的全路径
- com.hcxy.mapper
public interface UserMapper { public Users findByID(int id); public Integer findTotal(); } //快速生成测试类:Ctrl + shift + T - UserMapperTest.java
public class UserMapperTest { UserMapper userMapper = null; SqlSession session = null; // 初始化操作 @Before public void setUp() throws Exception{ String path = "mybatis-config.xml"; Reader resourceAsReader = Resources.getResourceAsReader(path); // 创建工厂对象SqlSessionFactory SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsReader); //创建SqlSession对象,有各种对数据库的操作 session = build.openSession(); // 通过动态接口动态代理对象来实现 // 执行是要找那一条SQL语句来执行,sql 的唯一标识 是通过namespace + statementID 来识别的 userMapper = session.getMapper(UserMapper.class); } @Test public void findByID() { Users users = userMapper.findByID(1); System.out.println("users = " + users); session.close(); } @Test public void findTotal() { Integer integer = userMapper.findTotal(); System.out.println("integer = " + integer); session.close(); } } - UserMapper.xml
- mybatis-config.xml
两种的区别,与入门的- 接口开发中,mybatis-config.xml,是这种去找实体类路径
- 在UserMapper.xml 中,namespace 的属性也不同
这个是写接口的路径,,resultType 直接写 实体类的名称,不区分大小写。
- 接口开发中,mybatis-config.xml,是这种去找实体类路径
- 公司最常用的是接口的方式:java 文件下的com.hcxy.mapper 与 resource 文件下要与 java 路径一样,却java 与xml的类名也要一致,采用包的形式映射。eg: UserMapper.java , UserMapper.xml
- 写接口
- 在映射文件xml中写SQL语句,主语 id 与 接口的实现方法一致; 使用别名方便;
- 写实现接口



