如何实现MyBatis自动加载类、配置和映射XML文件的全自动配置?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1502个文字,预计阅读时间需要7分钟。
java自动加载类,自动加载mybatis配置,自动扫描mapper.xml文件+package+com.amiu.mybatisTest.autoMybatis;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;
package com.amiu.mybatisTest.autoMybatis;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import com.amiu.PackageUtil;
import com.amiu.mybatisTest.mapper.DBTable;
import com.amiu.mybatisTest.mapper.DaoInterface;
import com.amiu.mybatisTest.mapper.Mapper;
public class MybatisInitialization {
/**
* propertiesReader应变为1个类,专门处理properties
* sqlSession应变为一个类,处理事务,和close()
* */
//默认扫描整个项目,用junit@Test会出错,不会扫描整个项目
//详见packagePath2FilePath()中的url.path()
private String baseScanPackage = "";
private SqlSessionFactory sqlSessionFactory;
//注解,标记我们的mapper类的注解
private Class
scanAnnotation;
//public MybatisInitialization(){}
public MybatisInitialization(Class
annotationClazz){
this.scanAnnotation = annotationClazz;
}
public void setBaseScanPackage(String baseScanPackage) {
this.baseScanPackage = baseScanPackage;
}
public SqlSessionFactory getSqlSessionFactory() {
if(sqlSessionFactory == null){
try {
sqlSessionFactory = load();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sqlSessionFactory;
}
public void setAnnotationClazz(Class
annotationClazz) {
this.scanAnnotation = annotationClazz;
}
SqlSessionFactory load() throws Exception{
Properties props = propertiesReader("com.amiu.mybatisTest","dbConfig.properties");
String driver = props.getProperty("driver");
String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password");
// 获取DataSource,DataSource接口有多个实现类,我们用的是mybatis给我们提供的PooledDataSource
PooledDataSource pooledDataSource = new PooledDataSource(driver, url,
username, password);
// 若需要配置pooledDatasource,则可以用他的set方法,如
pooledDataSource.setLoginTimeout(6000);
DataSource dataSource = pooledDataSource;
// 配置事务管理,这里我们使用JDBC的事务
TransactionFactory trcFactory = new JdbcTransactionFactory();
// 配置Environment对象,"development"是我们给起的名字
Environment env = new Environment("development", trcFactory, dataSource);
// 创建Configuration对象
Configuration config = new Configuration(env);
//
package com.amiu;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.amiu.mybatisTest.autoMybatis.MybatisInitialization;
import com.amiu.mybatisTest.autoMybatis.SqlSessionHelper;
import com.amiu.mybatisTest.mapper.DBTable;
import com.amiu.mybatisTest.mapper.DaoInterface;
public class PackageUtil {
/**
* 获取某包下(包括该包的所有子包)所有类
*
* @param packageName
* 包名
* @return 类的完整名称
*/
public static List
package com.amiu.mybatisTest.mapper; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标记我们的mapper * @author amiu */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Mapper { } 我们的@Mapper就添加在Dao的接口上,这个和DaoInterface.xml做映射
package com.amiu.mybatisTest.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.MapKey;
import com.amiu.TestBean;
@Mapper
public interface DaoInterface {
public TestBean findById(long id);
public List
本文共计1502个文字,预计阅读时间需要7分钟。
java自动加载类,自动加载mybatis配置,自动扫描mapper.xml文件+package+com.amiu.mybatisTest.autoMybatis;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;
package com.amiu.mybatisTest.autoMybatis;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import com.amiu.PackageUtil;
import com.amiu.mybatisTest.mapper.DBTable;
import com.amiu.mybatisTest.mapper.DaoInterface;
import com.amiu.mybatisTest.mapper.Mapper;
public class MybatisInitialization {
/**
* propertiesReader应变为1个类,专门处理properties
* sqlSession应变为一个类,处理事务,和close()
* */
//默认扫描整个项目,用junit@Test会出错,不会扫描整个项目
//详见packagePath2FilePath()中的url.path()
private String baseScanPackage = "";
private SqlSessionFactory sqlSessionFactory;
//注解,标记我们的mapper类的注解
private Class
scanAnnotation;
//public MybatisInitialization(){}
public MybatisInitialization(Class
annotationClazz){
this.scanAnnotation = annotationClazz;
}
public void setBaseScanPackage(String baseScanPackage) {
this.baseScanPackage = baseScanPackage;
}
public SqlSessionFactory getSqlSessionFactory() {
if(sqlSessionFactory == null){
try {
sqlSessionFactory = load();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sqlSessionFactory;
}
public void setAnnotationClazz(Class
annotationClazz) {
this.scanAnnotation = annotationClazz;
}
SqlSessionFactory load() throws Exception{
Properties props = propertiesReader("com.amiu.mybatisTest","dbConfig.properties");
String driver = props.getProperty("driver");
String url = props.getProperty("url");
String username = props.getProperty("username");
String password = props.getProperty("password");
// 获取DataSource,DataSource接口有多个实现类,我们用的是mybatis给我们提供的PooledDataSource
PooledDataSource pooledDataSource = new PooledDataSource(driver, url,
username, password);
// 若需要配置pooledDatasource,则可以用他的set方法,如
pooledDataSource.setLoginTimeout(6000);
DataSource dataSource = pooledDataSource;
// 配置事务管理,这里我们使用JDBC的事务
TransactionFactory trcFactory = new JdbcTransactionFactory();
// 配置Environment对象,"development"是我们给起的名字
Environment env = new Environment("development", trcFactory, dataSource);
// 创建Configuration对象
Configuration config = new Configuration(env);
//
package com.amiu;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.amiu.mybatisTest.autoMybatis.MybatisInitialization;
import com.amiu.mybatisTest.autoMybatis.SqlSessionHelper;
import com.amiu.mybatisTest.mapper.DBTable;
import com.amiu.mybatisTest.mapper.DaoInterface;
public class PackageUtil {
/**
* 获取某包下(包括该包的所有子包)所有类
*
* @param packageName
* 包名
* @return 类的完整名称
*/
public static List
package com.amiu.mybatisTest.mapper; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 标记我们的mapper * @author amiu */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Mapper { } 我们的@Mapper就添加在Dao的接口上,这个和DaoInterface.xml做映射
package com.amiu.mybatisTest.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.MapKey;
import com.amiu.TestBean;
@Mapper
public interface DaoInterface {
public TestBean findById(long id);
public List

