This commit is contained in:
钱涛 2024-11-21 15:48:52 +08:00
parent d64422b7db
commit d12037f3ce
1 changed files with 196 additions and 0 deletions

View File

@ -0,0 +1,196 @@
package weaver.conn.mybatis;
import com.google.common.collect.Maps;
import org.apache.commons.io.FileUtils;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.mapping.BoundSql;
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 weaver.conn.RecordSet;
import weaver.conn.mybatis.bean.HrmAlbumSubcompanyVO;
import weaver.conn.mybatis.mapper.WorkflowBaseMapper;
import weaver.general.BaseBean;
import weaver.general.GCONST;
import weaver.hrm.attendance.domain.WorkflowBase;
import java.io.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class MyBatisFactory {
private static BaseBean log = new BaseBean();
public static void test() {
log.writeLog("----------------------------------enter test------------------------------");
// 全面使用MyBatis
SqlSession session = sqlSessionFactory.openSession();
try {
WorkflowBaseMapper mapper = session.getMapper(WorkflowBaseMapper.class);
// 注解式
WorkflowBase workflowBase = mapper.selectWorkflowBase(1);
// xml式
List<HrmAlbumSubcompanyVO> voList = mapper.selectHrmAlbumSubcompanyVO();
log.writeLog(workflowBase.getWorkflowname());
log.writeLog(voList.size());
} finally{
session.close();
}
// 使用MyBatis的Sql解析器
Map params = Maps.newHashMap();
// RecordSet rs = new RecordSet();
// params.put("id", 1);//这里放置参数这个sql不需要参数就先注掉了
String sql = MyBatisFactory.getSql(WorkflowBaseMapper.class, "selectHrmAlbumSubcompanyVO", params);
// rs.executeQuery(sql);
log.writeLog(sql);
// 单独使用#{}
int id = 1;
String sqlTemp = MyBatisFactory.getSql(WorkflowBaseMapper.class, "selectBlog");
RecordSet rs = new RecordSet();
rs.executeQuery(sqlTemp, id);// 多个参数时需要根据顺序传入
// #{}与${}混合使用传参
params.clear();
params.put("orderColumn", "name");
String sql1 = MyBatisFactory.getSql(WorkflowBaseMapper.class, "selectBlog", params);
log.writeLog(sql1);
RecordSet rs1 = new RecordSet();
rs1.executeQuery(sql1, id);
// 使用直接传参
String sql2 = MyBatisFactory.getSql(WorkflowBaseMapper.class, "selectBlog2", "name");
log.writeLog(sql2);
// 使用多个参数
String sql3 = MyBatisFactory.getSql(WorkflowBaseMapper.class, "selectBlog2", 1, "name");
log.writeLog(sql3);
// 使用SqlWrapper
params.clear();
SqlWrapper sqlWrapper = MyBatisFactory.getSqlWrapper(WorkflowBaseMapper.class, "selectBlog", id);
rs = new RecordSet();
rs.executeQuery(sqlWrapper.getSql(), sqlWrapper.getParams());// 使用SqlWrapper时可以不关心顺序
log.writeLog("----------------------------------leave test------------------------------");
}
public static final SqlSessionFactory sqlSessionFactory = createSqlSessionFactory();
private static SqlSessionFactory createSqlSessionFactory(){
// writeLog("----------------------------------enter mybatis load------------------------------");
try {
String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "config" + File.separatorChar + "MyBatis.xml";
InputStream inputStream = new FileInputStream(resource);
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, null, null);
Configuration configuration = parser.parse();
// 读取所有xml配置文件
String rootPath = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "config" + File.separatorChar + "mapper";
Collection<File> xmls = FileUtils.listFiles(new File(rootPath), null, true);
for (File file : xmls) {
if (file.getName().equals("MyBatis.xml")) {
continue;
}
//log.writeLog("path:"+file.getAbsolutePath());
if (file.getAbsolutePath().contains(".svn")) continue;
try {
FileInputStream is = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(isr,
configuration, file.getPath(), configuration.getSqlFragments());
xmlMapperBuilder.parse();
} catch(Exception e) {
writeLog(e);
}
}
return new SqlSessionFactoryBuilder().build(configuration);
} catch (IOException e) {
e.printStackTrace();
log.writeLog("读取MyBatis配置失败",e);
return null;
} catch (Exception e) {
e.printStackTrace();
log.writeLog("读取MyBatis配置失败",e);
return null;
}
}
public static SqlWrapper getSqlWrapper(Class c, String id, Object... params) {
String key = c.getName() + "." + id;
return getSqlWrapper(key, params);
}
public static SqlWrapper getSqlWrapper(String key, Object... params) {
Object parseParams;
if (params == null || params.length == 0) {
parseParams = null;
} else if (params.length == 1)
parseParams = params[0];
else
parseParams = params;
BoundSql bs = sqlSessionFactory.getConfiguration().getMappedStatement(key).getBoundSql(parseParams);
return new SqlWrapper(bs, parseParams);
}
/**
* 通过javabean或Map来读取sql
* @param key
* @param param
* @return
*/
public static String getSql(String key, Object param) {
BoundSql bs = sqlSessionFactory.getConfiguration().getMappedStatement(key).getBoundSql(param);
return bs.getSql();
}
/**
* 读取不需要参数的sql
* @param key
* @return
*/
public static String getSql(String key) {
return getSql(key, null);
}
/**
* 根据mapper文件读取sql
* @param c
* @param id
* @param param
* @return
*/
public static String getSql(Class c, String id, Object param) {
String key = c.getName() + "." + id;
return getSql(key, param);
}
/**
* 支持传入多个参数
* @param c
* @param id
* @param param
* @return
*/
public static String getSql(Class c, String id, Object... param) {
String key = c.getName() + "." + id;
return getSql(key, param);
}
/**
*
* @param c
* @param id
* @return
*/
public static String getSql(Class c, String id) {
return getSql(c, id, null);
}
private static void writeLog(Object o) {
log.writeLog(MyBatisFactory.class.getName(), o);
}
}