Mybatis如何实现自动加载类、配置和映射XML文件的功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1668个文字,预计阅读时间需要7分钟。
自动加载类,自动加载MyBatis配置,自动扫描mapper.xml文件及包
javapackage com.amiu.mybatisTest.autoMybatis;
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;
public class AutoLoadMyBatisConfig { public static void main(String[] args) { // 获取当前项目路径 URL url=AutoLoadMyBatisConfig.class.getClassLoader().getResource(); if (url !=null) { String filePath=url.getPath(); // 扫描mapper.xml文件 List mapperFiles=scanMapperXml(filePath); // 加载MyBatis配置 loadMyBatisConfig(mapperFiles); } }
// 扫描mapper.xml文件 private static List scanMapperXml(String baseDir) { List files=new ArrayList(); File file=new File(baseDir); File[] fileList=file.listFiles(); if (fileList !=null) { for (File f : fileList) { if (f.isDirectory()) { files.addAll(scanMapperXml(f.getPath())); } else if (f.getName().endsWith(.xml)) { files.add(f); } } } return files; }
// 加载MyBatis配置 private static void loadMyBatisConfig(List mapperFiles) { try { for (File mapperFile : mapperFiles) { // 加载配置 FileInputStream inputStream=new FileInputStream(mapperFile); // 此处可以添加加载配置的代码 inputStream.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
自动加载类,自动加载mybatis配置,自动扫描mapper.xml文件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
本文共计1668个文字,预计阅读时间需要7分钟。
自动加载类,自动加载MyBatis配置,自动扫描mapper.xml文件及包
javapackage com.amiu.mybatisTest.autoMybatis;
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;
public class AutoLoadMyBatisConfig { public static void main(String[] args) { // 获取当前项目路径 URL url=AutoLoadMyBatisConfig.class.getClassLoader().getResource(); if (url !=null) { String filePath=url.getPath(); // 扫描mapper.xml文件 List mapperFiles=scanMapperXml(filePath); // 加载MyBatis配置 loadMyBatisConfig(mapperFiles); } }
// 扫描mapper.xml文件 private static List scanMapperXml(String baseDir) { List files=new ArrayList(); File file=new File(baseDir); File[] fileList=file.listFiles(); if (fileList !=null) { for (File f : fileList) { if (f.isDirectory()) { files.addAll(scanMapperXml(f.getPath())); } else if (f.getName().endsWith(.xml)) { files.add(f); } } } return files; }
// 加载MyBatis配置 private static void loadMyBatisConfig(List mapperFiles) { try { for (File mapperFile : mapperFiles) { // 加载配置 FileInputStream inputStream=new FileInputStream(mapperFile); // 此处可以添加加载配置的代码 inputStream.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
自动加载类,自动加载mybatis配置,自动扫描mapper.xml文件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

