⾃⼰重写MyBatis框架(基础篇)。
⾃⼰重写 MyBatis 框架(基础篇)
MyBatis 框架⼊门请参阅
在以上⼯程的基础上,理解 MyBatis 框架的流程,我们可以⾃⼰尝试写⼀个“MyBatis 框架”,以便更深⼊了解 MyBatis。
新建 Maven 项⽬。
延⽤以上⼯程的 Maven 依赖。但这⾥请注意,我们的⽬的是⾃⼰重写 “MyBatis”,所以就不需要引⼊ MaBatis 的依赖,所以这⾥我注释掉了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xsi="/2001/XMLSchema-instance"
schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId&k</groupId>
<artifactId>mybatis_my</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--
<dependency>
<groupId&batis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
-
->
<!-- mvnrepository/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mvnrepository/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
</dependencies>
</project>
来看此时的项⽬结构。
需要我们⾃⼰重写的类:
class Resources {}
class SqlSessionFactoryBuilder { build() {} } class SqlSessionFactory { openSession() } class SqlSession { getMapper() }
我们来⾃⼰写读取配置⽂件的类。
k.mybatis.io;
import java.io.InputStream;
/**
* 使⽤类加载器读取配置⽂件的类。
*
* @author geek
*/
public class Resources {
/**
* 根据传⼊的参数,获取⼀个字节输⼊流。
*
* @param filePath
* @return
*/
public static InputStream getResourceAsStream(String filePath){
return ClassLoader().getResourceAsStream(filePath); }
}
然后根据 test 类中所缺失的类逐⼀创建。
最终项⽬结构。
k.mybatis.cfg.Configuration;
k.mybatis.sqlSession.defaults.DefaultSqlSessionFactory; k.mybatis.utils.XMLConfigBuilder;
import java.io.InputStream;
/**
* ⽤于创建⼀个 SqlSessionFactoryBuilder 对象。
*
* @author geek
*/
public class SqlSessionFactoryBuilder {
/**
* 根据参数的字节输⼊流来构建⼀个 SqlSessionFactory ⼯⼚。
*
* @param config
* @return
*/
public ISqlSessionFactory build(InputStream config){
Configuration cfg = XMLConfigBuilder.loadConfiguration(config);
return new DefaultSqlSessionFactory(cfg);
}
}
k.mybatis.sqlSession;
/**
* ⽤于打开⼀个新的 ISqlSession 对象。
*
* @author geek
*/
public interface ISqlSessionFactory {
/**
* ⽤于打开⼀新的 ISqlSession 对象。
*
* @return
*/
ISqlSession openSession();
}
/**
* ⾃定义 MyBatis 中和数据库交互的核⼼类。
* 创建 dao 接⼝的代理对象。
*
* @author geek
*/
public interface ISqlSession {
/**
* 根据参数创建⼀个代理对象。
*
* @param daoInterfaceClass dao 的接⼝字节码。
* @param <T>
* @return
*/
<T> T getMapper(Class<T> daoInterfaceClass);
// 泛形——> 先声明,再使⽤。<T>。
/**
* 释放资源。
*/
void close();
}
下⼀步,我们要解析 xml ⽂件,获取其中的 MySQL 连接数据以及 sql 语句。就需要 dom4j 来解析 xml。在 l 中添加依赖。
<!-- mvnrepository/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
Class ConfigBuilder 中需要使⽤ XPath 就需要依赖。
<!-- mvnrepository/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>resultset 遍历
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
需要读取配置⽂件,就需要实体类,⽤于封装。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。