Java教程:MyBatis进阶之自定义MyBatis框架

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框架的实现步骤

需要定义的类的分析:

  1. 加载类加载目录下的资源文件 Resources.java
  2. 映射文件解析后信息类 Mapper.java
  3. 保存配置文件的配置信息 Configuration.java
  4. 配置文件解析的工具类XMLConfigBuilder.java
  5. SQL语句的执行对象Executor.java
  6. 获取数据源的工具类JdbcUtil.java
  7. SqlSession接口及实现类
  8. SqlSessionFactory接口及实现类
  9. SqlSessionFactory的构建者类SqlSessionFactoryBuilder.java
  10. 动态代理的处理类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. 解析数据源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值