在这里我们自定义mybatis框架,pom文件中移除mybatis的相关依赖,由于是基于xml格式的,我们需要引入解析xml的相关依赖。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</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>
</dependencies>
由入门案列可知:
第一步:自定义读取配置文件的Resources类
public class Resources {
/**
* 根据传入的参数,获取一个字节输入流
* @param filePath
* @return
*/
public static InputStream getResourceAsStream(String filePath){
return Resources.class.getClassLoader().getResourceAsStream(filePath);
}
}
第二步:自定义SqlSessionFactoryBuild类
public class SqlSessionFactoryBuilder {
/**
* 根据参数的字节输入流来构建一个SqlSessionFactory工厂
* @param config
* @return
*/
public SqlSessionFactory build(InputStream config){
Configuration cfg = XMLConfigBuilder.loadConfiguration(config);
return new DefaultSqlSessionFactory(cfg);
}
}
第三步:自定义SqlSessionFactory接口和SqlSessionFactory的实现类
public interface SqlSessionFactory {
/**
* 用于打开一个新的SqlSession对象
* @return
*/
SqlSession openSession();
}
SqlSessionFactory 的实现类
public class SqlSeesionFactoryImpl implements SqlSessionFactory {
private Configuration cfg;
public SqlSeesionFactoryImpl(Configuration cfg){
this.cfg = cfg;
}
/**
* 用于创建一个新的操作数据库对象
* @return
*/
@Override
public SqlSession openSession() {
return new SqlSessionImpl(cfg);
}
}
第四步:自定义SqlSeesion和实现类
public interface SqlSession<T> {
<T> T getMapper(Class<T> userDaoClass);
void close();
}
public class SqlSessionImpl<T> implements SqlSession<T> {
private Configuration cfg;
private Connection connection;
public SqlSessionImpl(Configuration cfg){
this.cfg = cfg;
connection = DataSourceUtil.getConnection(cfg);
}
/**
* 用于创建代理对象
* @param dao的接口字节码
* @param <T>
* @return
*/
@Override
public <T> T getMapper(Class<T> daoInterfaceClass) {
return (T) Proxy.newProxyInstance(daoInterfaceClass.getClassLoader(),
new Class[]{daoInterface