1. 自定义MyBatis框架流程分析
2. 自定义框架原理介绍
3. 准备工作:
1) 创建maven工程
Groupid:com.itheima
ArtifactId:custom-mybatis
Packing:jar
2) 添加pom依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
4. 自定义MyBatis框架的实现步骤
需要定义的类的分析:
- 加载类加载目录下的资源文件
Resources.java
- 映射文件解析后信息类
Mapper.java
- 保存配置文件的配置信息
Configuration.java
- 配置文件解析的工具类
XMLConfigBuilder.java
- SQL语句的执行对象
Executor.java
- 获取数据源的工具类
JdbcUtil.java
SqlSession
接口及实现类SqlSessionFactory
接口及实现类SqlSessionFactory
的构建者类SqlSessionFactoryBuilder.java
- 动态代理的处理类
MapperProxyFactory.java
两大步:
1-4 : 是我们前面提到的 解析xml,封装对象;
5-10: 是得到sqlsession,获取代理对象,执行sql的核心代码;
包结构参考:
1)定义加载资源类Resources.java
/**
* 加载资源的工具类
*/
public class Resources {
/**
* 加载类加载目录下的资源
* @param path
* @return
*/
public static InputStream getResourceAsStream(String path){
return Resources.class.getClassLoader().getResourceAsStream(path);
}
}
2)定义mybatis映射配置信息类 Mapper.java
/**
* 映射的配置信息类
*/
@Data
public class Mapper {
private String queryString;// SQL语句
private String resultType;// 实体类全限定名
}
3)定义mybatis核心配置信息类 Configuration.java
/**
* mybatis配置的实体类
* 用来保存mybatis.xml解析过程中的节点属性
*/
@Data
public class Configuration {
private String driver; //jdbc驱动类
private String url; //jdbc连接字符串
private String username; //数据库连接用户名
private String password; //数据库连接密码
private Map<String, Mapper> mappers = new HashMap<String, Mapper>();//映射文件
public void setMappers(Map<String, Mapper> mappers) {
this.mappers.putAll(mappers);//此处需要使用追加的方式
}
}
4)配置文件解析的工具类XMLConfigBuilder
/**
* 用于解析配置文件:
* sqlmapconfig.xml
* xxxMapper.xml
*/
public class XMLConfigBuilder {
//定义封装连接信息的配置对象(mybatis的配置对象)
private static Configuration cfg = new Configuration();
/**
* 解析主配置文件,把里面的内容填充到DefaultSqlSession所需要的地方
* 使用的技术:dom4j+xpath
*/
public static Configuration loadConfiguration(InputStream config){
try{
//1.获取SAXReader对象
SAXReader reader = new SAXReader();
//2.根据字节输入流获取Document对象
Document document = reader.read(config);
//3.获取根节点
Element root = document.getRootElement();
//4. 解析数据源