提交 af09e29a 编写于 作者: M MaxKey

mybatis-jpa-extra-2.7

上级 df32b400
...@@ -73,7 +73,11 @@ public interface IJpaBaseMapper<T> { ...@@ -73,7 +73,11 @@ public interface IJpaBaseMapper<T> {
@DeleteProvider(type = MapperSqlProvider.class, method = "remove") @DeleteProvider(type = MapperSqlProvider.class, method = "remove")
public Integer remove(@Param ("entityClass")Class<?> entityClass,@Param ("id") String id); public Integer remove(@Param ("entityClass")Class<?> entityClass,@Param ("id") String id);
@DeleteProvider(type = MapperSqlProvider.class, method = "batchDelete") @DeleteProvider(type = MapperSqlProvider.class, method = "deleteBatch")
public Integer batchDelete(@Param ("entityClass")Class<?> entityClass,@Param ("idList") List<String> idList); public Integer deleteBatch(@Param ("entityClass")Class<?> entityClass,@Param ("idList") List<String> idList);
@DeleteProvider(type = MapperSqlProvider.class, method = "logicDelete")
public Integer logicDelete(@Param ("entityClass")Class<?> entityClass,@Param ("idList") List<String> idList);
} }
...@@ -22,7 +22,8 @@ import java.lang.reflect.Type; ...@@ -22,7 +22,8 @@ import java.lang.reflect.Type;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.mybatis.jpa.PageResultsSqlCache; import org.apache.mybatis.jpa.PageResultsSqlCache;
import org.apache.mybatis.jpa.util.BeanUtil; import org.apache.mybatis.jpa.util.BeanUtil;
import org.apache.mybatis.jpa.util.InstanceUtil; import org.apache.mybatis.jpa.util.InstanceUtil;
...@@ -41,7 +42,7 @@ import com.github.benmanes.caffeine.cache.Caffeine; ...@@ -41,7 +42,7 @@ import com.github.benmanes.caffeine.cache.Caffeine;
*/ */
public class JpaBaseService <T extends JpaBaseEntity> { public class JpaBaseService <T extends JpaBaseEntity> {
final static Logger _logger = Logger.getLogger(JpaBaseService.class); final static Logger _logger = LoggerFactory.getLogger(JpaBaseService.class);
@JsonIgnore @JsonIgnore
//定义全局缓存 //定义全局缓存
...@@ -76,7 +77,7 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -76,7 +77,7 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public JpaBaseService(@SuppressWarnings("rawtypes") Class cls) { public JpaBaseService(@SuppressWarnings("rawtypes") Class cls) {
_logger.trace("class : " + cls.getSimpleName()); _logger.trace("class : {}" , cls.getSimpleName());
mapperClass = cls.getSimpleName(); mapperClass = cls.getSimpleName();
Type[] pType = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments(); Type[] pType = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
if (pType != null && pType.length >= 1) { if (pType != null && pType.length >= 1) {
...@@ -85,7 +86,7 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -85,7 +86,7 @@ public class JpaBaseService <T extends JpaBaseEntity> {
_logger.error("invalide initail, need generic type parameter! "); _logger.error("invalide initail, need generic type parameter! ");
throw new RuntimeException("invalide initail, need generic type parameter!"); throw new RuntimeException("invalide initail, need generic type parameter!");
} }
_logger.trace("class : " + entityClass.getSimpleName()); _logger.trace("class : {}" , entityClass.getSimpleName());
} }
/** /**
...@@ -93,10 +94,14 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -93,10 +94,14 @@ public class JpaBaseService <T extends JpaBaseEntity> {
* @param mapperClass * @param mapperClass
*/ */
public JpaBaseService(String mapperClass) { public JpaBaseService(String mapperClass) {
_logger.trace("class : " + mapperClass); _logger.trace("class : {}" , mapperClass);
this.mapperClass = mapperClass; this.mapperClass = mapperClass;
} }
public void setMapper(IJpaBaseMapper<T> mapper) {
this.mapper = mapper;
}
//get or set mapper //get or set mapper
/** /**
* Load Mapper from spring container by mapperClass as bean id * Load Mapper from spring container by mapperClass as bean id
...@@ -106,22 +111,18 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -106,22 +111,18 @@ public class JpaBaseService <T extends JpaBaseEntity> {
public IJpaBaseMapper<T> getMapper() { public IJpaBaseMapper<T> getMapper() {
try { try {
if(mapper == null) { if(mapper == null) {
String mapperClassBean=mapperClass.toLowerCase().charAt(0)+mapperClass.substring(1); String mapperClassBean = mapperClass.toLowerCase().charAt(0) + mapperClass.substring(1);
_logger.info("mapperClass Bean is " +mapperClassBean); _logger.info("mapperClass Bean is {}" , mapperClassBean);
mapper = (IJpaBaseMapper<T>) WebContext.getBean(mapperClassBean); mapper = (IJpaBaseMapper<T>) WebContext.getBean(mapperClassBean);
} }
} catch(Exception e) { } catch(Exception e) {
_logger.error("getMapper Exception ",e); _logger.error("getMapper Exception " , e);
} finally { } finally {
} }
return mapper; return mapper;
} }
public void setMapper(IJpaBaseMapper<T> mapper) {
this.mapper = mapper;
}
//follow function for Query //follow function for Query
/** /**
...@@ -134,15 +135,15 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -134,15 +135,15 @@ public class JpaBaseService <T extends JpaBaseEntity> {
entity.setStartRow(calculateStartRow(entity.getPageNumber() ,entity.getPageSize())); entity.setStartRow(calculateStartRow(entity.getPageNumber() ,entity.getPageSize()));
entity.setPageable(true); entity.setPageable(true);
List<T> resultslist=getMapper().queryPageResults(entity); List<T> resultslist = getMapper().queryPageResults(entity);
entity.setPageable(false); entity.setPageable(false);
Integer totalPage=resultslist.size(); Integer totalPage = resultslist.size();
Integer totalCount = 0; Integer totalCount = 0;
if(entity.getPageNumber()==1&&totalPage<entity.getPageSize()) { if(entity.getPageNumber() == 1 && totalPage < entity.getPageSize()) {
totalCount=totalPage; totalCount=totalPage;
}else { }else {
totalCount=parseCount(getMapper().queryPageResultsCount(entity)); totalCount = parseCount(getMapper().queryPageResultsCount(entity));
} }
return new JpaPageResults<T>(entity.getPageNumber(),entity.getPageSize(),totalPage,totalCount,resultslist); return new JpaPageResults<T>(entity.getPageNumber(),entity.getPageSize(),totalPage,totalCount,resultslist);
...@@ -150,7 +151,6 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -150,7 +151,6 @@ public class JpaBaseService <T extends JpaBaseEntity> {
//follow function for Query //follow function for Query
/** /**
* query page list entity by entity * query page list entity by entity
* @param entity * @param entity
...@@ -162,20 +162,20 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -162,20 +162,20 @@ public class JpaBaseService <T extends JpaBaseEntity> {
entity.setStartRow(calculateStartRow(entity.getPageNumber() ,entity.getPageSize())); entity.setStartRow(calculateStartRow(entity.getPageNumber() ,entity.getPageSize()));
entity.setPageable(true); entity.setPageable(true);
List<T> resultslist=null; List<T> resultslist = null;
try { try {
resultslist = (List<T>)InstanceUtil.invokeMethod(getMapper(), mapperId, new Object[]{entity}); resultslist = (List<T>)InstanceUtil.invokeMethod(getMapper(), mapperId, new Object[]{entity});
} catch (Exception e) { } catch (Exception e) {
_logger.error("queryPageResults Exception ",e); _logger.error("queryPageResults Exception " , e);
} }
entity.setPageable(false); entity.setPageable(false);
Integer totalPage=resultslist.size(); Integer totalPage = resultslist.size();
Integer totalCount = 0; Integer totalCount = 0;
if(entity.getPageNumber()==1&&totalPage<entity.getPageSize()) { if(entity.getPageNumber() == 1 && totalPage < entity.getPageSize()) {
totalCount=totalPage; totalCount = totalPage;
}else { }else {
totalCount=parseCount(getMapper().queryPageResultsCount(entity)); totalCount = parseCount(getMapper().queryPageResultsCount(entity));
} }
return new JpaPageResults<T>(entity.getPageNumber(),entity.getPageSize(),totalPage,totalCount,resultslist); return new JpaPageResults<T>(entity.getPageNumber(),entity.getPageSize(),totalPage,totalCount,resultslist);
...@@ -188,17 +188,17 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -188,17 +188,17 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Integer queryPageResultsCount(T entity) { public Integer queryPageResultsCount(T entity) {
Integer count = 0;
try { try {
if(entity == null) { if(entity == null) {
entity = (T) entityClass.newInstance(); entity = (T) entityClass.newInstance();
} }
Integer count=getMapper().queryPageResultsCount(entity); count = getMapper().queryPageResultsCount(entity);
_logger.debug("queryCount count : "+count); _logger.debug("queryCount count : {}" , count);
return count;
} catch(Exception e) { } catch(Exception e) {
_logger.error("queryPageResultsCount Exception ",e); _logger.error("queryPageResultsCount Exception " , e);
} }
return null; return count;
} }
/** /**
...@@ -211,11 +211,10 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -211,11 +211,10 @@ public class JpaBaseService <T extends JpaBaseEntity> {
try { try {
if(entity == null) { if(entity == null) {
entity = (T) entityClass.newInstance(); entity = (T) entityClass.newInstance();
return getMapper().query(entity);
} }
return getMapper().query(entity); return getMapper().query(entity);
} catch(Exception e) { } catch(Exception e) {
_logger.error("query Exception ",e); _logger.error("query Exception " , e);
} }
return null; return null;
} }
...@@ -223,10 +222,9 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -223,10 +222,9 @@ public class JpaBaseService <T extends JpaBaseEntity> {
public List<T> findAll() { public List<T> findAll() {
try { try {
return getMapper().findAll(this.entityClass); return getMapper().findAll(this.entityClass);
} catch(Exception e) { } catch(Exception e) {
_logger.error("findAll Exception ",e); _logger.error("findAll Exception " , e);
} }
return null; return null;
} }
...@@ -238,10 +236,10 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -238,10 +236,10 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
public T load(T entity) { public T load(T entity) {
try { try {
List<T> entityList=getMapper().query(entity); List<T> entityList = getMapper().query(entity);
return entityList!=null&&entityList.size()>0?entityList.get(0):null; return ((entityList != null) && ( entityList.size() > 0 ))?entityList.get(0) : null;
} catch(Exception e) { } catch(Exception e) {
_logger.error("load Exception ",e); _logger.error("load Exception " , e);
} }
return null; return null;
} }
...@@ -253,20 +251,20 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -253,20 +251,20 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
public T get(String id) { public T get(String id) {
try { try {
_logger.debug("entityClass "+entityClass.toGenericString()+" , primaryKey "+id); _logger.debug("entityClass {} , primaryKey {}" , entityClass.toGenericString() , id);
return getMapper().get(this.entityClass,id); return getMapper().get(this.entityClass,id);
} catch(Exception e) { } catch(Exception e) {
_logger.error("get Exception ",e); _logger.error("get Exception " , e);
} }
return null; return null;
} }
public T find(Class<T> entityClass,Object primaryKey) { public T find(Class<T> entityClass,Object primaryKey) {
try { try {
_logger.debug("entityClass "+entityClass.toGenericString()+" , primaryKey "+primaryKey); _logger.debug("entityClass {} , primaryKey {}" , entityClass.toGenericString() , primaryKey);
return getMapper().get(entityClass,primaryKey.toString()); return getMapper().get(entityClass,primaryKey.toString());
} catch(Exception e) { } catch(Exception e) {
_logger.error("find Exception ",e); _logger.error("find Exception " , e);
} }
return null; return null;
} }
...@@ -279,18 +277,40 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -279,18 +277,40 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
public boolean insert(T entity) { public boolean insert(T entity) {
try { try {
Integer count=getMapper().insert(entity); Integer count = getMapper().insert(entity);
_logger.debug("insert count : "+count); _logger.debug("insert count : {}" , count);
return count > 0; return count > 0;
} catch(Exception e) { } catch(Exception e) {
_logger.error("insert Exception ",e); _logger.error("insert Exception " , e);
}
return false;
}
/**
* insert entity with batch
* @param listEntity
* @return
*/
public boolean insertBatch(List<T> listEntity){
try {
if(BeanUtil.isNotNull(listEntity)) {
Integer count = 0;
for(T entity : listEntity) {
if(getMapper().insert(entity)>0) {
count ++;
}
}
_logger.debug("Insert Batch count : {}" , count);
return count > 0;
}
} catch(Exception e) {
_logger.error("Insert Batch Exception " , e);
} }
return false; return false;
} }
/** /**
* JPA persist * JPA persist , save
* @param entity * @param entity
* @return boolean * @return boolean
*/ */
...@@ -299,13 +319,12 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -299,13 +319,12 @@ public class JpaBaseService <T extends JpaBaseEntity> {
} }
/** /**
* JPA merge * JPA merge , save or update
* @param entity * @param entity
* @return boolean * @return boolean
*/ */
public boolean merge(T entity) { public boolean merge(T entity) {
T loadedEntity = load(entity); T loadedEntity = load(entity);
if(loadedEntity == null) { if(loadedEntity == null) {
return insert(entity); return insert(entity);
}else { }else {
...@@ -320,13 +339,11 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -320,13 +339,11 @@ public class JpaBaseService <T extends JpaBaseEntity> {
*/ */
public boolean update(T entity) { public boolean update(T entity) {
try { try {
Integer count=getMapper().update(entity); Integer count=getMapper().update(entity);
_logger.debug("update count : "+count); _logger.debug("update count : {}" , count);
return count > 0; return count > 0;
} catch(Exception e) { } catch(Exception e) {
_logger.error("update Exception ",e); _logger.error("update Exception " , e);
} }
return false; return false;
} }
...@@ -339,79 +356,80 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -339,79 +356,80 @@ public class JpaBaseService <T extends JpaBaseEntity> {
public boolean delete(T entity) { public boolean delete(T entity) {
try { try {
Integer count=getMapper().delete(entity); Integer count=getMapper().delete(entity);
_logger.debug("delete count : "+count); _logger.debug("delete count : {}" , count);
return count > 0; return count > 0;
} catch(Exception e) { } catch(Exception e) {
_logger.error("delete Exception ",e); _logger.error("delete Exception " , e);
} }
return false; return false;
} }
/**
public boolean remove(String id){ * batch delete entity by id List
* @param ids
* @return
*/
public boolean deleteBatch(List<String> idList) {
try { try {
_logger.trace("deleteBatch {}" , idList);
Integer count=getMapper().remove(this.entityClass,id); Integer count = getMapper().deleteBatch(this.entityClass,idList);
_logger.debug("remove count : "+count); _logger.debug("deleteBatch count : {}" , count);
return count > 0; return count > 0;
} catch(Exception e) { } catch(Exception e) {
_logger.error("remove Exception ",e); _logger.error("deleteBatch Exception " , e);
} }
return false; return false;
} }
/** /**
* batch insert entity * batch delete entity by ids,split with ,
* @param listEntity * @param ids
* @return * @return
*/ */
public boolean batchInsert(List<T> listEntity){ public boolean deleteBatch(String ids) {
List<String> idList = StringUtils.string2List(ids, ",");
return deleteBatch(idList);
}
public boolean deleteBatch(String ids , String split) {
List<String> idList = StringUtils.string2List(ids, split);
return deleteBatch(idList);
}
public boolean remove(String id){
try { try {
if(BeanUtil.isNotNull(listEntity)) { Integer count=getMapper().remove(this.entityClass,id);
Integer count=0; _logger.debug("remove count : {}" , count);
for(T entity : listEntity) { return count > 0;
if(getMapper().insert(entity)>0) {
count++;
}
}
_logger.debug("batchInsert count : "+count);
return count > 0;
}
} catch(Exception e) { } catch(Exception e) {
_logger.error("batchInsert Exception ",e); _logger.error("remove Exception " , e);
} }
return false; return false;
} }
/** public boolean logicDelete(List<String> idList) {
* batch delete entity by id List
* @param ids
* @return
*/
public boolean batchDelete(List<String> idList) {
try { try {
Integer count=getMapper().batchDelete(this.entityClass,idList); _logger.trace("logicDelete {}" , idList);
_logger.debug("batchDelete count : "+count); Integer count = getMapper().logicDelete(this.entityClass,idList);
_logger.debug("logicDelete count : {}" , count);
return count > 0; return count > 0;
} catch(Exception e) { } catch(Exception e) {
_logger.error("batchDelete Exception ",e); _logger.error("logicDelete Exception " , e);
} }
return false; return true;
} }
/** public boolean logicDelete(String ids) {
* batch delete entity by ids,split with ,
* @param ids
* @return
*/
public boolean batchDelete(String ids) {
List<String> idList = StringUtils.string2List(ids, ","); List<String> idList = StringUtils.string2List(ids, ",");
return batchDelete(idList); return logicDelete(idList);
} }
public boolean logicDelete(String ids , String split) {
List<String> idList = StringUtils.string2List(ids, split);
return logicDelete(idList);
}
//follow is for query grid paging //follow is for query grid paging
/** /**
...@@ -424,7 +442,7 @@ public class JpaBaseService <T extends JpaBaseEntity> { ...@@ -424,7 +442,7 @@ public class JpaBaseService <T extends JpaBaseEntity> {
if(totalCount == null) { if(totalCount == null) {
return retTotalCount; return retTotalCount;
}else{ }else{
retTotalCount=Integer.parseInt(totalCount.toString()); retTotalCount = Integer.parseInt(totalCount.toString());
} }
return retTotalCount; return retTotalCount;
} }
......
...@@ -60,7 +60,7 @@ public class JpaPageResults <T>{ ...@@ -60,7 +60,7 @@ public class JpaPageResults <T>{
*/ */
public JpaPageResults(int currentPage,int pageResults,Long recordsCount) { public JpaPageResults(int currentPage,int pageResults,Long recordsCount) {
pageCount(currentPage,pageResults, recordsCount); pageCount(currentPage,pageResults, recordsCount);
_logger.debug("Grid page : "+page+" , records : "+records+" , total : "+total); _logger.debug("JpaPageResults : {} , records : {} , total : {}",page,records,total);
} }
/** /**
* 构造函数 * 构造函数
......
...@@ -48,6 +48,10 @@ public class MapperMetadata <T extends JpaBaseEntity>{ ...@@ -48,6 +48,10 @@ public class MapperMetadata <T extends JpaBaseEntity>{
public static String GET_SQL = "_GET_SQL"; public static String GET_SQL = "_GET_SQL";
public static String FINDALL_SQL = "_FINDALL_SQL"; public static String FINDALL_SQL = "_FINDALL_SQL";
public static String REMOVE_SQL = "_REMOVE_SQL"; public static String REMOVE_SQL = "_REMOVE_SQL";
public static String BATCHDELETE_SQL = "_BATCHDELETE_SQL";
public static String LOGICDELETE_SQL = "_LOGICDELETE_SQL";
} }
public static String ENTITY_CLASS = "entityClass"; public static String ENTITY_CLASS = "entityClass";
......
...@@ -53,10 +53,14 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{ ...@@ -53,10 +53,14 @@ public class MapperSqlProvider <T extends JpaBaseEntity>{
return new SqlProviderDelete().execute(parametersMap); return new SqlProviderDelete().execute(parametersMap);
} }
public String batchDelete(Map<String, Object> parametersMap) { public String deleteBatch(Map<String, Object> parametersMap) {
return new SqlProviderDelete().batchDelete(parametersMap); return new SqlProviderDelete().batchDelete(parametersMap);
} }
public String logicDelete(Map<String, Object> parametersMap) {
return new SqlProviderDelete().logicDelete(parametersMap);
}
/** /**
* @param entity * @param entity
* @return insert sql String * @return insert sql String
......
...@@ -45,13 +45,15 @@ public class SqlProviderDelete <T extends JpaBaseEntity>{ ...@@ -45,13 +45,15 @@ public class SqlProviderDelete <T extends JpaBaseEntity>{
} }
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn((entityClass).getSimpleName()); FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn((entityClass).getSimpleName());
SQL sql=new SQL(); SQL sql=new SQL();
sql.DELETE_FROM(MapperMetadata.getTableName(entityClass)); sql.DELETE_FROM(MapperMetadata.getTableName(entityClass))
sql.WHERE(idFieldColumnMapper.getColumnName()+" = #{"+idFieldColumnMapper.getFieldName()+",javaType=string,jdbcType=VARCHAR}"); .WHERE(idFieldColumnMapper.getColumnName()
+ " = #{" +idFieldColumnMapper.getFieldName() + ",javaType=string,jdbcType=VARCHAR}");
String deleteSql=sql.toString(); String deleteSql=sql.toString();
_logger.trace("Delete SQL \n"+deleteSql); _logger.trace("Delete SQL \n"+deleteSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.REMOVE_SQL,deleteSql); MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.REMOVE_SQL,deleteSql);
return deleteSql; return deleteSql;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public String batchDelete(Map<String, Object> parametersMap) { public String batchDelete(Map<String, Object> parametersMap) {
Class<?> entityClass=(Class<?>)parametersMap.get(MapperMetadata.ENTITY_CLASS); Class<?> entityClass=(Class<?>)parametersMap.get(MapperMetadata.ENTITY_CLASS);
...@@ -68,11 +70,36 @@ public class SqlProviderDelete <T extends JpaBaseEntity>{ ...@@ -68,11 +70,36 @@ public class SqlProviderDelete <T extends JpaBaseEntity>{
keyValue = keyValue.substring(1).replaceAll(";", ""); keyValue = keyValue.substring(1).replaceAll(";", "");
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName()); FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql=new SQL(); SQL sql=new SQL();
sql.DELETE_FROM(MapperMetadata.getTableName(entityClass)); sql.DELETE_FROM(MapperMetadata.getTableName(entityClass))
sql.WHERE(idFieldColumnMapper.getColumnName()+" in ( "+keyValue+" )"); .WHERE(idFieldColumnMapper.getColumnName()+" in ( "+keyValue+" )");
String deleteSql=sql.toString(); String deleteSql=sql.toString();
_logger.trace("Delete SQL \n"+deleteSql); _logger.trace("Delete SQL \n"+deleteSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.REMOVE_SQL,deleteSql); MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.BATCHDELETE_SQL,deleteSql);
return deleteSql;
}
@SuppressWarnings("unchecked")
public String logicDelete(Map<String, Object> parametersMap) {
Class<?> entityClass=(Class<?>)parametersMap.get(MapperMetadata.ENTITY_CLASS);
MapperMetadata.buildColumnList(entityClass);
ArrayList <String> idValues=(ArrayList<String>)parametersMap.get("idList");
String keyValue="";
for(String value : idValues) {
if(value.trim().length() > 0) {
keyValue += ",'" + value + "'";
_logger.trace("logic delete by id " + value);
}
}
//remove ;
keyValue = keyValue.substring(1).replaceAll(";", "");
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql=new SQL();
sql.UPDATE(MapperMetadata.getTableName(entityClass))
.SET("status = 9")
.WHERE(idFieldColumnMapper.getColumnName()+" in ( "+keyValue+" )");
String deleteSql=sql.toString();
_logger.trace("logic Delete SQL \n"+deleteSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.LOGICDELETE_SQL,deleteSql);
return deleteSql; return deleteSql;
} }
......
...@@ -68,8 +68,11 @@ public class SqlProviderInsert <T extends JpaBaseEntity>{ ...@@ -68,8 +68,11 @@ public class SqlProviderInsert <T extends JpaBaseEntity>{
)) { )) {
GeneratedValue generatedValue=listFields.get(i).getGeneratedValue(); GeneratedValue generatedValue=listFields.get(i).getGeneratedValue();
if(generatedValue.strategy()==GenerationType.AUTO) { if(generatedValue.strategy()==GenerationType.AUTO) {
if(MapperMetadata.identifierGeneratorFactory.getGeneratorStrategyMap().containsKey(generatedValue.generator().toLowerCase())) { if(MapperMetadata.identifierGeneratorFactory.getGeneratorStrategyMap()
BeanUtil.set(entity, fieldColumnMapper.getFieldName(), MapperMetadata.identifierGeneratorFactory.generate(generatedValue.generator().toLowerCase())); .containsKey(generatedValue.generator().toLowerCase())) {
BeanUtil.set(entity,
fieldColumnMapper.getFieldName(),
MapperMetadata.identifierGeneratorFactory.generate(generatedValue.generator().toLowerCase()));
sql.VALUES(fieldColumnMapper.getColumnName(),"#{" + fieldColumnMapper.getFieldName() + "}"); sql.VALUES(fieldColumnMapper.getColumnName(),"#{" + fieldColumnMapper.getFieldName() + "}");
} }
}else if(generatedValue.strategy()==GenerationType.SEQUENCE){ }else if(generatedValue.strategy()==GenerationType.SEQUENCE){
......
...@@ -53,9 +53,10 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -53,9 +53,10 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName()); FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql=new SQL(); SQL sql=new SQL();
sql.SELECT(selectColumnMapper(entityClass)); sql.SELECT(selectColumnMapper(entityClass))
sql.FROM(MapperMetadata.getTableName(entityClass)+" sel_tmp_table "); .FROM(MapperMetadata.getTableName(entityClass)+" sel_tmp_table ")
sql.WHERE(idFieldColumnMapper.getColumnName()+" = #{"+idFieldColumnMapper.getFieldName()+"}"); .WHERE(idFieldColumnMapper.getColumnName()
+ " = #{"+idFieldColumnMapper.getFieldName() + "}");
String getSql=sql.toString(); String getSql=sql.toString();
_logger.trace("Get SQL \n"+getSql); _logger.trace("Get SQL \n"+getSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + SQL_TYPE.GET_SQL,getSql); MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + SQL_TYPE.GET_SQL,getSql);
...@@ -69,8 +70,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -69,8 +70,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
return MapperMetadata.sqlsMap.get(MapperMetadata.getTableName(entityClass) + SQL_TYPE.FINDALL_SQL); return MapperMetadata.sqlsMap.get(MapperMetadata.getTableName(entityClass) + SQL_TYPE.FINDALL_SQL);
} }
SQL sql=new SQL(); SQL sql=new SQL();
sql.SELECT(selectColumnMapper(entityClass)); sql.SELECT(selectColumnMapper(entityClass))
sql.FROM(MapperMetadata.getTableName(entityClass)+" sel_tmp_table "); .FROM(MapperMetadata.getTableName(entityClass)+" sel_tmp_table ");
String findAllSql=sql.toString(); String findAllSql=sql.toString();
_logger.trace("Find All SQL \n"+findAllSql); _logger.trace("Find All SQL \n"+findAllSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + SQL_TYPE.FINDALL_SQL,findAllSql); MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + SQL_TYPE.FINDALL_SQL,findAllSql);
...@@ -80,8 +81,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -80,8 +81,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
public String execute(T entity) { public String execute(T entity) {
MapperMetadata.buildColumnList(entity.getClass()); MapperMetadata.buildColumnList(entity.getClass());
SQL sql=new SQL(); SQL sql=new SQL();
sql.SELECT(selectColumnMapper(entity.getClass())); sql.SELECT(selectColumnMapper(entity.getClass()))
sql.FROM(MapperMetadata.getTableName(entity.getClass())+" sel_tmp_table "); .FROM(MapperMetadata.getTableName(entity.getClass())+" sel_tmp_table ");
for(FieldColumnMapper fieldColumnMapper : MapperMetadata.fieldsMap.get(entity.getClass().getSimpleName())) { for(FieldColumnMapper fieldColumnMapper : MapperMetadata.fieldsMap.get(entity.getClass().getSimpleName())) {
String fieldValue = BeanUtil.getValue(entity, fieldColumnMapper.getFieldName()); String fieldValue = BeanUtil.getValue(entity, fieldColumnMapper.getFieldName());
...@@ -121,7 +122,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -121,7 +122,8 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
.append(" ") .append(" ")
.append(fieldColumnMapper.getFieldName()); .append(fieldColumnMapper.getFieldName());
} }
_logger.trace("Column "+ columnCount + " , ColumnName : "+fieldColumnMapper.getColumnName()+" , FieldName : " + fieldColumnMapper.getFieldName()); _logger.trace("Column {} , ColumnName : {} , FieldName : {}" ,
columnCount,fieldColumnMapper.getColumnName(),fieldColumnMapper.getFieldName());
} }
return selectColumn.toString(); return selectColumn.toString();
} }
...@@ -133,11 +135,16 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -133,11 +135,16 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
public String executePageResultsCount(T entity) { public String executePageResultsCount(T entity) {
JpaPagination pagination=(JpaPagination)entity; JpaPagination pagination=(JpaPagination)entity;
//获取缓存数据 //获取缓存数据
PageResultsSqlCache pageResultsSqlCache=JpaBaseService.pageResultsBoundSqlCache.getIfPresent(pagination.getPageResultSelectUUID()); PageResultsSqlCache pageResultsSqlCache =
JpaBaseService.pageResultsBoundSqlCache.getIfPresent(pagination.getPageResultSelectUUID());
//多个空格 tab 替换成1个空格 //多个空格 tab 替换成1个空格
String selectSql=pageResultsSqlCache.getSql().replaceAll("\r\n+", " \n").replaceAll("\n+", " \n").replaceAll("\t", " ").replaceAll(" +"," "); String selectSql = pageResultsSqlCache.getSql()
.replaceAll("\r\n+", " \n")
.replaceAll("\n+", " \n")
.replaceAll("\t", " ")
.replaceAll(" +"," ");
BoundSql boundSql=(BoundSql)pageResultsSqlCache.getBoundSql(); BoundSql boundSql=(BoundSql)pageResultsSqlCache.getBoundSql();
_logger.trace("Count original SQL :\n" + selectSql); _logger.trace("Count original SQL :\n{}" , selectSql);
StringBuffer sql=new StringBuffer(SqlSyntax.SELECT +" "+ SqlSyntax.Functions.COUNT_ONE +" countrows_ "); StringBuffer sql=new StringBuffer(SqlSyntax.SELECT +" "+ SqlSyntax.Functions.COUNT_ONE +" countrows_ ");
StringBuffer countSql=new StringBuffer(); StringBuffer countSql=new StringBuffer();
...@@ -153,7 +160,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -153,7 +160,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
countSql.append(selectSql); countSql.append(selectSql);
} }
String countSqlLowerCase = countSql.toString().toLowerCase(); String countSqlLowerCase = countSql.toString().toLowerCase();
_logger.trace("Count SQL LowerCase :\n" + countSqlLowerCase); _logger.trace("Count SQL LowerCase :\n{}" , countSqlLowerCase);
if(countSqlLowerCase.indexOf(SqlSyntax.DISTINCT + " ")>0 //去重 if(countSqlLowerCase.indexOf(SqlSyntax.DISTINCT + " ")>0 //去重
||countSqlLowerCase.indexOf(" " + SqlSyntax.GROUPBY + " ")>0 //分组 ||countSqlLowerCase.indexOf(" " + SqlSyntax.GROUPBY + " ")>0 //分组
...@@ -167,7 +174,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -167,7 +174,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
}else { }else {
int fromIndex = countSqlLowerCase.indexOf(" " + SqlSyntax.FROM + " "); int fromIndex = countSqlLowerCase.indexOf(" " + SqlSyntax.FROM + " ");
int orderByIndex = countSqlLowerCase.indexOf(" " + SqlSyntax.ORDERBY + " "); int orderByIndex = countSqlLowerCase.indexOf(" " + SqlSyntax.ORDERBY + " ");
_logger.trace("Count SQL from Index "+ fromIndex +" , order by " +orderByIndex); _logger.trace("Count SQL from Index {} , order by {}" ,fromIndex,orderByIndex);
if(orderByIndex > -1) { if(orderByIndex > -1) {
sql.append(countSql.substring(fromIndex,orderByIndex)); sql.append(countSql.substring(fromIndex,orderByIndex));
}else { }else {
...@@ -176,7 +183,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{ ...@@ -176,7 +183,7 @@ public class SqlProviderQuery <T extends JpaBaseEntity>{
} }
//删除缓存 //删除缓存
JpaBaseService.pageResultsBoundSqlCache.invalidate(pagination.getPageResultSelectUUID()); JpaBaseService.pageResultsBoundSqlCache.invalidate(pagination.getPageResultSelectUUID());
_logger.trace("Count SQL : \n" + sql); _logger.trace("Count SQL : \n{}" , sql);
return sql.toString(); return sql.toString();
} }
......
...@@ -51,7 +51,7 @@ public class SqlProviderUpdate <T extends JpaBaseEntity>{ ...@@ -51,7 +51,7 @@ public class SqlProviderUpdate <T extends JpaBaseEntity>{
for (int i = 0; i < listFields.size(); i++) { for (int i = 0; i < listFields.size(); i++) {
FieldColumnMapper fieldColumnMapper=listFields.get(i); FieldColumnMapper fieldColumnMapper=listFields.get(i);
_logger.trace("Field " +fieldColumnMapper.getFieldName()+" , Type "+ fieldColumnMapper.getFieldType()); _logger.trace("Field {} , Type {}",fieldColumnMapper.getFieldName(), fieldColumnMapper.getFieldType());
if (fieldColumnMapper.isIdColumn()) { if (fieldColumnMapper.isIdColumn()) {
continue; continue;
...@@ -71,7 +71,7 @@ public class SqlProviderUpdate <T extends JpaBaseEntity>{ ...@@ -71,7 +71,7 @@ public class SqlProviderUpdate <T extends JpaBaseEntity>{
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entity.getClass().getSimpleName()); FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entity.getClass().getSimpleName());
sql.WHERE(idFieldColumnMapper.getColumnName() + "=#{"+idFieldColumnMapper.getFieldName()+"}"); sql.WHERE(idFieldColumnMapper.getColumnName() + "=#{"+idFieldColumnMapper.getFieldName()+"}");
_logger.trace("Update SQL : \n" + sql); _logger.trace("Update SQL : \n{}" , sql);
return sql.toString(); return sql.toString();
} }
......
...@@ -20,7 +20,7 @@ package org.apache.mybatis.jpa.util; ...@@ -20,7 +20,7 @@ package org.apache.mybatis.jpa.util;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class StringUtils { public class StringUtils extends org.apache.commons.lang3.StringUtils {
public static boolean isNumeric(String val) { public static boolean isNumeric(String val) {
char[] chars = val.toCharArray(); char[] chars = val.toCharArray();
...@@ -55,14 +55,6 @@ public class StringUtils { ...@@ -55,14 +55,6 @@ public class StringUtils {
return num; return num;
} }
public static boolean isBlank(String str) {
return str==null || str.matches("\\s*");
}
public static boolean isNotBlank(String val) {
return !isBlank(val);
}
public static List<String> string2List(String string, String split) { public static List<String> string2List(String string, String split) {
String[] strs = {}; String[] strs = {};
if (string != null && !string.equals("")) { if (string != null && !string.equals("")) {
......
...@@ -134,14 +134,25 @@ public class MyBatisTestRunner { ...@@ -134,14 +134,25 @@ public class MyBatisTestRunner {
idList.add("ab7422e9-a91a-4840-9e59-9d911257c918"); idList.add("ab7422e9-a91a-4840-9e59-9d911257c918");
idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c"); idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c");
idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe"); idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe");
service.batchDelete(idList); service.deleteBatch(idList);
}
@Test
public void logicDelete() throws Exception{
_logger.info("logicDelete...");
List<String> idList=new ArrayList<String>();
idList.add("8584804d-b5ac-45d2-9f91-4dd8e7a090a7");
idList.add("ab7422e9-a91a-4840-9e59-9d911257c918");
idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c");
idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe");
service.logicDelete(idList);
} }
@Test @Test
public void batchDeleteByIds() throws Exception{ public void batchDeleteByIds() throws Exception{
_logger.info("batchDeleteByIds..."); _logger.info("batchDeleteByIds...");
service.batchDelete("2"); service.deleteBatch("2");
service.batchDelete("2,639178432667713536"); service.deleteBatch("2,639178432667713536");
} }
@Test @Test
......
...@@ -100,7 +100,7 @@ public class MybatisJpaApplicationTest{ ...@@ -100,7 +100,7 @@ public class MybatisJpaApplicationTest{
idList.add("ab7422e9-a91a-4840-9e59-9d911257c918"); idList.add("ab7422e9-a91a-4840-9e59-9d911257c918");
idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c"); idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c");
idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe"); idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe");
studentsService.batchDelete(idList); studentsService.deleteBatch(idList);
} }
@Test @Test
......
...@@ -88,7 +88,7 @@ public class MyBatisTestRunner { ...@@ -88,7 +88,7 @@ public class MyBatisTestRunner {
idList.add("ab7422e9-a91a-4840-9e59-9d911257c918"); idList.add("ab7422e9-a91a-4840-9e59-9d911257c918");
idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c"); idList.add("12b6ceb8-573b-4f01-ad85-cfb24cfa007c");
idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe"); idList.add("dafd5ba4-d2e3-4656-bd42-178841e610fe");
service.batchDelete(idList); service.deleteBatch(idList);
} }
@Test @Test
......
...@@ -15,24 +15,23 @@ ...@@ -15,24 +15,23 @@
</modules> </modules>
<properties> <properties>
<mybatis.jpa.extra.version>2.6</mybatis.jpa.extra.version><!--project version--> <mybatis.jpa.extra.version>2.7</mybatis.jpa.extra.version><!--project version-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.8</jdk.version> <jdk.version>1.8</jdk.version>
<spring.version>5.2.0.RELEASE</spring.version> <spring.version>5.3.14</spring.version>
<springboot.version>2.2.6.RELEASE</springboot.version> <springboot.version>2.6.2</springboot.version>
<commons-dbcp2.version>2.1.1</commons-dbcp2.version> <commons-dbcp2.version>2.1.1</commons-dbcp2.version>
<commons-pool2.version>2.4.2</commons-pool2.version> <commons-pool2.version>2.4.2</commons-pool2.version>
<mysql-connnector.version>8.0.21</mysql-connnector.version> <mysql-connnector.version>8.0.26</mysql-connnector.version>
<servlet-api.version>3.1.0</servlet-api.version> <servlet-api.version>3.1.0</servlet-api.version>
<commons-io.version>2.4</commons-io.version> <commons-io.version>2.4</commons-io.version>
<commons-codec.version>1.9</commons-codec.version> <commons-codec.version>1.9</commons-codec.version>
<log4j.version>2.17.0</log4j.version> <log4j.version>2.17.0</log4j.version>
<slf4j.version>1.7.28</slf4j.version> <slf4j.version>1.7.32</slf4j.version>
<jackson.version1>1.9.13</jackson.version1>
<jackson.version2>2.10.0</jackson.version2> <jackson.version2>2.10.0</jackson.version2>
<druid.version>1.1.22</druid.version> <druid.version>1.2.8</druid.version>
<persistence.version>2.2.1</persistence.version> <persistence.version>2.2.1</persistence.version>
<mybatis.version>3.5.7</mybatis.version> <mybatis.version>3.5.8</mybatis.version>
<mybatis-spring.version>2.0.6</mybatis-spring.version> <mybatis-spring.version>2.0.6</mybatis-spring.version>
</properties> </properties>
...@@ -275,6 +274,11 @@ ...@@ -275,6 +274,11 @@
<version>3.2.2</version> <version>3.2.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency> <dependency>
<groupId>commons-logging</groupId> <groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId> <artifactId>commons-logging</artifactId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册