学习视频资料来源:https://www.bilibili.com/video/BV1R14y1W7yS
文章目录
- 1. 架构设计
- 2. 核心组件及调用关系
- 3. 源码环境搭建
- 3.1 测试类
- 3.2 实体类
- 3.3 核心配置文件
- 3.4 映射配置文件
- 3.5 遇到的问题
1. 架构设计
Mybatis整体架构分为4层:
- 接口层:提供增删改查的接口,通过调用这些接口可以完成与数据库的交互。调用的方式有两种:基于statementId和基于mapper接口。
- 数据处理:是Mybatis框架的核心层,负责解析SQL,根据调用请求完成一次数据库交互。
- 框架支撑层:负责通用基础服务支撑。SQL语句配置方式:基于xml配置和基于注解配置。对于一些简单的SQL,使用注解的方式比较方便。但对于一些复杂的SQL,比如SQL的动态拼接等,使用注解的方式是非常繁琐的,所以推荐使用xml配置更加方便和维护。
- 引导层:mybatis启动需要的配置信息。包括:基于xml配置方式和基于Java API方式。
2. 核心组件及调用关系
从上往下各组件介绍:
- SqlSession:Mybatis对外暴力的核心API,一些增删改查接口,如selectOne、selectList、insert、delete、update。
- Excutor: 负责数据库操作及两级缓存的维护。SqlSession并不直接调用JDBC,而是委派给Excutor去执行的。
- StatementHandler:语句执行器。负责封装JDBC操作:参数设置,结果集合封装。
- ParameterHandler:参数处理器。实际上把参数处理的过程,委托给TypeHandler
- TypeHandler:类型转换类似,将参数从Java类型转换为jdbc类型,将结果集从jdbc类型转换为java类型。
- ResultSet:结果集
- ResultHandler:结果集处理器。实际上把参数处理的过程,委托给TypeHandler。
3. 源码环境搭建
这个就比较简单了。到mybatis官网https://mybatis.p2hp.com/,找到仓库地址https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.7,下载源码。我这里用的版本和视频中的一样3.5.7。
打开项目新建核心配置文件、映射配置文件、实体类、测试类。目录如下:
3.1 测试类
public class MybatisTest {@Testpublic void test1() throws IOException {System.setProperty("javax.xml.accessExternalDTD", "all");InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream,"development");SqlSession sqlSession = build.openSession();User user = new User();user.setId(1);user.setUsername("xiaoming");Object o = sqlSession.selectOne("com.mqlyes.dao.UserDao.findByCondition", user);System.out.println(o);}
}
3.2 实体类
public class User {private Integer id;private String username;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +'}';}
}
3.3 核心配置文件
注意替换数据库地址和密码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://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://192.168.x.x:3306/test?useSSL=false&serverTimezone=UTC"/><property name="username" value="xxxx"/><property name="password" value="xxxx"/></dataSource></environment></environments><!-- Mapper 配置 --><mappers><mapper resources="mapper/UserMapper.xml"/></mappers>
</configuration>
3.4 映射配置文件
<?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="com.mqlyes.dao.UserDao"><!-- 唯一标识: namespace.id--><!-- 查询所有用户 --><select id="findAll" resultType="com.mqlyes.pojo.User">select * from user</select><!-- 按条件查询用户 --><!-- --><select id="findByCondition" resultType="com.mqlyes.pojo.User" parameterType="com.mqlyes.pojo.User">select * from user where id = #{id} and username = #{username}</select>
</mapper>
3.5 遇到的问题
错误1:如果下面的报错,就在测试类中添加代码
System.setProperty("javax.xml.accessExternalDTD", "all");
这个错误我在网上试了一个方案,不生效。用代码指定的方式可以。
错误2. 如果报配置文件找不到,就检查build后自己的target目录下,是否包含配置文件。可以试试把pom文件中resource和testResource相关的注释掉,用默认的方式。我这里注释掉就可以了。这个错误是由于没把配置文件编译进target导致的。
等到后边我把自己的源码传上去~