以下是我在公司花了一个星期写的核心代码
package com.demo.common;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.mapping.ResultMapping;
import org.apache.ibatis.mapping.MappedStatement.Builder;
import org.apache.ibatis.scripting.LanguageDriver;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* SQL注入
* @author 陈双
*
*/
@Component
@EnableConfigurationProperties(CommonProperties.class)
public class SQLInjectionBean implements InitializingBean {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private SqlSessionFactory sqlSessionFactory;
@Autowired
private CommonProperties commonProperties;
private Configuration configuration;
private LanguageDriver languageDriver;
private List<EntityMapping> entityMappings = new ArrayList<EntityMapping>(100);
private Map<String,String> mappers = new HashMap<String,String>(100);
public void addEntityMapping(EntityMapping mapping) {
this.entityMappings.add(mapping);
}
public void addMapper(String entityClass,String mapperClass) {
this.mappers.put(entityClass, mapperClass);
}
@Override
public void afterPropertiesSet() throws Exception {
logger.info("start init SQL .....");
if (this.configuration == null) {
this.configuration = this.sqlSessionFactory.getConfiguration();
this.languageDriver = this.configuration.getDefaultScriptingLanuageInstance();
}
//开始扫描注解
PackageScanner scanner = new PackageScanner(commonProperties,this);
logger.info("scann package ....");
scanner.scann();
Method buildAllStatements=this.configuration.getClass().getDeclaredMethod("buildAllStatements", null);
buildAllStatements.setAccessible(true);
buildAllStatements.invoke(this.configuration, null);
/*
* 初始化MappedStatement
*/
for (EntityMapping mapping : this.entityMappings) {
createResultMap(mapping);
addInsertMappedStatement(mapping);
addInsertListMappedStatement(mapping);
addUpdateMappedStatement(mapping);
addUpdateByMapMappedStatement(mapping);
addGetByIdMappedStatement(mapping);
addGetCountMappedStatement(mapping);
addGetListMappedStatement(mapping);
addGetListByIdsMappedStatement(mapping);
addGetMappedStatement(mapping);
addDeleteByIdMappedStatement(mapping);
addDeleteMappedStatement(mapping);
addExecuteDeleteBySqlMappedStatement(mapping);
addExecuteInsertBySqlMappedStatement(mapping);
addExecuteQueryListBySqlMappedStatement(mapping);
addExecuteQueryOneBySqlMappedStatement(mapping);
addExecuteUpdateBySqlMappedStatement(mapping);
}
logger.info("end init SQL .....");
}
/**
* 创建ResultMap
* @param mapping
* @throws ClassNotFoundException
*/
public void createResultMap(EntityMapping mapping) throws ClassNotFoundException {
List<ResultMapping> list = new ArrayList<ResultMapping>();
for (PropertyMapping propertyMapping : mapping.getPropertyMappings()) {
ResultMapping resultMapping = new ResultMapping.Builder(this.configuration,propertyMapping.getProperty(),propertyMapping.getColumn(),propertyMapping.getType()).build();
list.add(resultMapping);
}
Class<?> entityClass = Class.forName(mapping.getClassName());
ResultMap resultMap = new ResultMap.Builder(this.configuration, getResultMapId(mapping.getClassName()), entityClass,list).build();
this.configuration.addResultMap(resultMap);
}
/**
* 添加insert
* @throws ClassNotFoundException
*/
public void addInsertMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".insert";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
String sql = SQLHeper.generateInsertSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.INSERT).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加insertList
*/
public void addInsertListMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".insertList";
if (this.configuration.hasStatement(id, false)) {
return;
}
String sql = SQLHeper.generateInsertListSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, List.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.INSERT).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加update
* @param mapping
* @throws ClassNotFoundException
*/
public void addUpdateMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".update";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
String sql = SQLHeper.generateUpdateSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.UPDATE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加updateByMap
* @param mapping
*/
public void addUpdateByMapMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".updateByMap";
if (this.configuration.hasStatement(id, false)) {
return;
}
String sql = SQLHeper.generateUpdateByMapSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.UPDATE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加getById
* @param mapping
*/
public void addGetByIdMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".getById";
if (this.configuration.hasStatement(id, false)) {
return;
}
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
String sql = SQLHeper.generateGetByIdSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, SQLHeper.generateGetByIdSql(mapping), Serializable.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加get
* @param mapping
* @throws ClassNotFoundException
*/
public void addGetMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".get";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
String sql = SQLHeper.generateGetSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加getList
* @param mapping
* @throws ClassNotFoundException
*/
public void addGetListMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".getList";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
String sql = SQLHeper.generateGetListSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 生成getListByIds
* @param mapping
*/
public void addGetListByIdsMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".getListByIds";
if (this.configuration.hasStatement(id, false)) {
return;
}
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
String sql = SQLHeper.generateGetListByIdsSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, List.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加getCount
* @param mapping
* @throws ClassNotFoundException
*/
public void addGetCountMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".getCount";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
String sql = SQLHeper.generateGetCountSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
List<ResultMap> resultMaps = new ArrayList<ResultMap>();
//生成ResultMap
ResultMap resultMap = new ResultMap.Builder(this.configuration, id +"-Inline", Integer.class, new ArrayList<ResultMapping>()).build();
resultMaps.add(resultMap);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加deleteById
* @param mapping
* @throws ClassNotFoundException
*/
public void addDeleteByIdMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".deleteById";
if (this.configuration.hasStatement(id, false)) {
return;
}
String sql = SQLHeper.generateDeleteByIdSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, Serializable.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.DELETE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加delete
* @param mapping
* @throws ClassNotFoundException
*/
public void addDeleteMappedStatement(EntityMapping mapping) throws ClassNotFoundException {
String id = this.mappers.get(mapping.getClassName())+".delete";
if (this.configuration.hasStatement(id, false)) {
return;
}
Class<?> clz = Class.forName(mapping.getClassName());
String sql = SQLHeper.generateDeleteSql(mapping);
logger.info(id);
logger.info(sql);
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, sql, clz);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.DELETE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加executeInsertBySql
* @param mapping
*/
public void addExecuteInsertBySqlMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".executeInsertBySql";
if (this.configuration.hasStatement(id, false)) {
return;
}
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, "${sql}", Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.INSERT).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加executeUpdateBySql
* @param mapping
*/
public void addExecuteUpdateBySqlMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".executeUpdateBySql";
if (this.configuration.hasStatement(id, false)) {
return;
}
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, "${sql}", Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.UPDATE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加executeDeleteBySql
* @param mapping
*/
public void addExecuteDeleteBySqlMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".executeDeleteBySql";
if (this.configuration.hasStatement(id, false)) {
return;
}
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, "${sql}", Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.DELETE).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加executeQueryOneBySql
* @param mapping
*/
public void addExecuteQueryOneBySqlMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".executeQueryOneBySql";
if (this.configuration.hasStatement(id, false)) {
return;
}
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, "${sql}", Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
/**
* 添加executeQueryListBySql
* @param mapping
*/
public void addExecuteQueryListBySqlMappedStatement(EntityMapping mapping) {
String id = this.mappers.get(mapping.getClassName())+".executeQueryListBySql";
if (this.configuration.hasStatement(id, false)) {
return;
}
ArrayList<ResultMap> resultMaps = new ArrayList<>();
//对应xml中的resultSet的id
resultMaps.add(this.configuration.getResultMap(getResultMapId(mapping.getClassName())));
SqlSource sqlSource = this.languageDriver.createSqlSource(configuration, "${sql}", Map.class);
MappedStatement ms= new Builder(this.configuration,id,sqlSource,SqlCommandType.SELECT).resultMaps(resultMaps).build();
this.configuration.addMappedStatement(ms);
}
private String getResultMapId(String entityName) {
return "Base"+entityName.substring(entityName.lastIndexOf(".") + 1)+"ResultMap";
}
}
package com.demo.common;
import java.util.Date;
/**
* SQL生成工具
* @author 陈双
*
*/
public class SQLHeper {
/**
* 生成insert SQL
* @param mapping
* @return
*/
public static String generateInsertSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>insert into "+mapping.getTable());
sql.append("\r\n");
sql.append("<trim prefix='(' suffix=')' suffixOverrides=',' >");
sql.append("\r\n");
for (int i =0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("<if test='"+property.getProperty() +"!= null'>");
sql.append("\r\n");
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</trim>");
sql.append("\r\n");
sql.append("<trim prefix='values (' suffix=')' suffixOverrides=',' >");
sql.append("\r\n");
for (int i =0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("<if test='"+property.getProperty() +"!= null'>");
sql.append("\r\n");
sql.append("#{");
sql.append(property.getProperty());
sql.append("}");
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</trim></script>");
return sql.toString();
}
/**
* 生成insertList SQL
* @param mapping
* @return
*/
public static String generateInsertListSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>insert into "+mapping.getTable());
sql.append("(");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append(") values");
sql.append("\r\n");
sql.append("<foreach collection='entityList' item='entity' separator=','>");
sql.append("\r\n");
sql.append("(");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
sql.append("#{entity.");
sql.append(property.getProperty());
sql.append("}");
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append("\r\n");
sql.append(")");
sql.append("\r\n");
sql.append("</foreach></script>");
return sql.toString();
}
/**
* 生成update SQL
* @param mapping
* @return
*/
public static String generateUpdateSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>update ");
sql.append(mapping.getTable());
sql.append("\r\n");
sql.append("<trim suffixOverrides=',' >");
sql.append("\r\n");
sql.append("<set>");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
if (property.getProperty().equals("id")) {
continue;
}
sql.append("\r\n");
sql.append("<if test='"+property.getProperty()+" != null'>");
sql.append("\r\n");
sql.append(property.getColumn());
sql.append("=#{");
sql.append(property.getProperty());
sql.append("}");
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</set>");
sql.append("\r\n");
sql.append("</trim>");
sql.append("\r\n");
sql.append("where id_=#{id}</script>");
return sql.toString();
}
/**
* 生成updateByMap SQL
* @param mapping
* @return
*/
public static String generateUpdateByMapSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>update ");
sql.append(mapping.getTable());
sql.append("\r\n");
sql.append("<trim suffixOverrides=',' >");
sql.append("\r\n");
sql.append("<set>");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
if (property.getProperty().equals("id")) {
continue;
}
sql.append("\r\n");
sql.append("<if test='entity."+property.getProperty()+" != null'>");
sql.append("\r\n");
sql.append(property.getColumn());
sql.append("=#{entity.");
sql.append(property.getProperty());
sql.append("}");
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</set>");
sql.append("\r\n");
sql.append("</trim>");
sql.append("\r\n");
sql.append("where 1=1 ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
if (property.getType().equals(String.class)) {
sql.append("<if test='condition."+property.getProperty()+" != null and condition."+property.getProperty()+" != \"\"'>");
} else {
sql.append("<if test='condition."+property.getProperty()+" != null'>");
}
sql.append("\r\n");
sql.append(" and ");
sql.append(property.getColumn());
sql.append("=#{condition.");
sql.append(property.getProperty());
sql.append("}");
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</script>");
return sql.toString();
}
/**
* 生成getById SQL
* @param mapping
* @return
*/
public static String generateGetByIdSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("select ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append(" from ");
sql.append(mapping.getTable());
sql.append(" where id_=#{id}");
return sql.toString();
}
/**
* 生成get SQL
* @param mapping
* @return
*/
public static String generateGetSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>select ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append(" from ");
sql.append(mapping.getTable());
sql.append(" where 1=1 ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
if (property.getType().equals(String.class)) {
sql.append("<if test='"+property.getProperty()+" != null and "+property.getProperty()+" != \"\"'>");
} else {
sql.append("<if test='"+property.getProperty()+" != null'>");
}
sql.append("\r\n");
sql.append(" and ");
sql.append(property.getColumn());
sql.append("=#{");
sql.append(property.getProperty());
sql.append("}");
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</script>");
return sql.toString();
}
/**
* 生成getList SQL
* @param mapping
* @return
*/
public static String generateGetListSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>select ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append(" from ");
sql.append(mapping.getTable());
sql.append(" where 1=1 ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
if (property.getType().equals(String.class)) {
sql.append("<if test='"+property.getProperty()+" != null and "+property.getProperty()+" != \"\"'>");
} else {
sql.append("<if test='"+property.getProperty()+" != null'>");
}
sql.append("\r\n");
sql.append(" and ");
sql.append(property.getColumn());
sql.append("=#{");
sql.append(property.getProperty());
sql.append("}");
sql.append("\r\n");
sql.append("</if>");
//扩展属性
if(property.getType().equals(Date.class)){
//开始时间
sql.append("\r\n");
sql.append("<if test='ov."+property.getProperty()+"Begin != null'>");
sql.append("\r\n");
sql.append(" and date(");
sql.append(property.getColumn());
sql.append(")>=date(#{ov.");
sql.append(property.getProperty());
sql.append("Begin,jdbcType=TIMESTAMP})");
sql.append("\r\n");
sql.append("</if>");
sql.append("\r\n");
//结束时间
sql.append("<if test='ov."+property.getProperty()+"End != null'>");
sql.append("\r\n");
sql.append(" and date(");
sql.append(property.getColumn());
sql.append(")<=date(#{ov.");
sql.append(property.getProperty());
sql.append("End,jdbcType=TIMESTAMP})");
sql.append("\r\n");
sql.append("</if>");
}
}
sql.append("\r\n");
sql.append("<if test='sortFields != null'>");
sql.append("\r\n");
sql.append("order by ${sortFields} ${sortType} ");
sql.append("\r\n");
sql.append("</if>");
sql.append("</script>");
return sql.toString();
}
public static String generateGetListByIdsSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>select ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append(property.getColumn());
if (i < mapping.getPropertyMappings().size()-1) {
sql.append(",");
}
}
sql.append(" from ");
sql.append(mapping.getTable());
sql.append(" where id_ in ");
sql.append("\r\n");
sql.append("<foreach item='id' collection='idList' open='(' separator=',' close=')'>");
sql.append("\r\n");
sql.append("#{id}");
sql.append("\r\n");
sql.append("</foreach></script>");
return sql.toString();
}
/**
* 生成getCount SQL
* @param mapping
* @return
*/
public static String generateGetCountSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>select ");
sql.append("count(*)");
sql.append(" from ");
sql.append(mapping.getTable());
sql.append(" where 1=1 ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
if (property.getType().equals(String.class)) {
sql.append("<if test='"+property.getProperty()+" != null and "+property.getProperty()+" != \"\"'>");
} else {
sql.append("<if test='"+property.getProperty()+" != null'>");
}
sql.append("\r\n");
sql.append(" and ");
sql.append(property.getColumn());
sql.append("=#{");
sql.append(property.getProperty());
sql.append("}");
sql.append("\r\n");
sql.append("</if>");
//扩展属性
if(property.getType().equals(Date.class)){
//开始时间
sql.append("\r\n");
sql.append("<if test='ov."+property.getProperty()+"Begin != null'>");
sql.append("\r\n");
sql.append(" and date(");
sql.append(property.getColumn());
sql.append(")>=date(#{ov.");
sql.append(property.getProperty());
sql.append("Begin,jdbcType=TIMESTAMP})");
sql.append("\r\n");
sql.append("</if>");
sql.append("\r\n");
//结束时间
sql.append("<if test='ov."+property.getProperty()+"End != null'>");
sql.append("\r\n");
sql.append(" and date(");
sql.append(property.getColumn());
sql.append(")<=date(#{ov.");
sql.append(property.getProperty());
sql.append("End,jdbcType=TIMESTAMP})");
sql.append("\r\n");
sql.append("</if>");
}
}
sql.append("\r\n");
sql.append("</script>");
return sql.toString();
}
/**
* 生成 deleteById SQL
* @param mapping
* @return
*/
public static String generateDeleteByIdSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("delete from ");
sql.append(mapping.getTable());
sql.append(" where id_=#{id}");
return sql.toString();
}
/**
* 生成delete SQL
* @param mapping
* @return
*/
public static String generateDeleteSql(EntityMapping mapping) {
StringBuffer sql = new StringBuffer("<script>delete from ");
sql.append(mapping.getTable());
sql.append(" where 1=1 ");
for (int i=0;i<mapping.getPropertyMappings().size();i++) {
PropertyMapping property = mapping.getPropertyMappings().get(i);
sql.append("\r\n");
if (property.getType().equals(String.class)) {
sql.append("<if test='"+property.getProperty()+" != null and "+property.getProperty()+" != \"\"'>");
}else {
sql.append("<if test='"+property.getProperty()+" != null'>");
}
sql.append("\r\n");
sql.append(" and ");
sql.append(property.getColumn());
sql.append("=#{");
sql.append(property.getProperty());
sql.append("}");
sql.append("\r\n");
sql.append("</if>");
}
sql.append("\r\n");
sql.append("</script>");
return sql.toString();
}
}
mybatis实现零配置
最新推荐文章于 2024-05-12 16:13:26 发布