This commit is contained in:
parent
d64422b7db
commit
d12037f3ce
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue