简介
- 我们知道创建Maven项目后,在项目中的pom.xml配置文件中引入MyBatis依赖之后,我们就可以使用MyBatis相关的类和接口和相应的功能。
- 但为了对MyBatis的体系结构和功能有更加深刻的理解和全面的认识,本文Maven项目中的pom.xml配置文件将不再引入MyBatis依赖,转而通过自定义编写MyBatis相关的类和接口来实现同样的功能。
- MyBatis相关类和接口的介绍流程按照 测试类 中的操作步骤为顺序,先用到的类和接口先出现。
思维导图
环境搭建
Maven项目依赖
- 在pom.xml 文件中,并不引入MyBatis框架的依赖:
- mysql-connector-java(数据库连接)
- junit (单元测试)
- log4j(日志文件)
- dom4j(解析xml文件)
- jaxen(dom4j的依赖)
1 |
|
创建数据库
1 | #创建数据库 |
目录结构
- src/main
- java
- cn/water/dao
- UserAnnoDao.java(持久层接口)
- UserDao.java(持久层接口)
- cn/water/domain
- User.java(实体类)
- cn/water/mybatis
- cfg
- Configuration.java(实体类)
- Mapper.java(实体类)
- defaults
- DeaultSqlSession.java(产品实现类)
- DeaultSqlSessionFactory.java(工厂实现类)
- io
- Resources.java(AsStream类)
- proxy
- MapperProxy.java(代理增强类)
- session
- SqlSession.java(产品接口)
- SqlSessionFactory.java(工厂接口)
- SqlSessionFactoryBuilder.java(工厂构建者)
- Utils
- DataSourceUtil.java(数据库连接对象工具类)
- Executor.java(数据库操作工具类)
- XMLConfigBuilder.java(封装信息工具类)
- cfg
- cn/water/dao
- resources
- cn/water/dao
- UserDao.xml(持久层接口的映射配置文件)
- SqlMapConfig.xml(MyBatis主配置文件)
- cn/water/dao
- java
- src/tese
- java
- cn/water/test
- MybatisTest.java(测试文件)
- cn/water/test
- java
- pom.xml
数据库表
1 | #创建数据库 |
MyBatis主配置文件
- 提取 MyBatis主配置文件中映射信息的方式是读取 mapper标签的属性,所以 mappers 标签中最好只设置一种 mapper标签,resource 或是 class。
SqlMapConfig.xml
1 |
|
映射配置文件
UserDao.java
1 |
|
实体类
- 封装数据库表的信息
User.java
1 | package cn.water.domain; |
持久层接口
- xml
UserDao.java
1 | package cn.water.dao; |
- 注解
UserAnnoDao.java
1 | package cn.water.dao; |
Mapper实体类
- 成员变量
- 结果集全类名
- SQL语句
Mapper.java
1 | package cn.water.mybatis.cfg; |
Configuration实体类
- 封装了 数据库连接信息+映射信息 的实体类
- 成员变量
- 数据库连接信息
- drive
- URL
- username
- password
- 映射信息
- Mappers
- String
- 持久层全类名
- 方法名
- Mapper
- 结果集全类名
- SQL语句
- String
- Mappers
- 数据库连接信息
Configuration.java
1 | package cn.water.mybatis.cfg; |
**MyBatisTest测试类
MybatisTest.java
1 | package cn.water.test; |
Resources
- 输入 “SqlMapConfig.xml”,返回 InputStream
Resources.java
1 | package cn.water.mybatis.io; |
SqlSessionFactoryBuilder工厂构建者
- 返回 DefaultSqlSessionFactory工厂实现类
SqlSessionFactoryBuilder.java
1 | package cn.water.mybatis.session; |
XMLConfigBuilder工具类
- 工具类直接使用即可!
- 用于解析MyBatis主配置文件、xml映射配置文件、存在注释的持久层接口,并将数据封装至 Configuration实体类中。
XMLConfigBuilder.java
1 | package cn.water.mybatis.Utils; |
SqlSessionFactory工厂接口
- 生产 DefaultSqlSession对象,为了降低耦合度。
SqlSessionFactory.java
1 | package cn.water.mybatis.session; |
DefaultSqlSessionFactory工厂实现类
DefaultSqlSessionFactory.java
1 | package cn.water.mybatis.defaults; |
SqlSession产品接口
- 生产 持久层接口的代理对象
SqlSession.java
1 | package cn.water.mybatis.session; |
DefaultSqlSession产品实现类
DefaultSqlSession.java
1 | package cn.water.mybatis.defaults; |
DataSourceUtils工具类
- 创建 Connection对象
DataSourceUtils.java
1 | package cn.water.mybatis.Utils; |
MapperProxy代理增强类
- 用于对代理类方法进行代码增强
MapperProxy.java
1 | package cn.water.mybatis.proxy; |
Executor工具类
- 执行SQL语句,并且封装结果集
Executor.java
1 | package cn.water.mybatis.Utils; |
执行结果
- 执行不同的测试类记得更换 MyBatis配置文件中的 mapper标签 和 测试类中代理对象的接口字节码。
xml
1 | 使用的是XML |
注解
1 | 使用的是注解 |