diff --git a/mybatis-enhance-actable/pom.xml b/mybatis-enhance-actable/pom.xml index a62c0637aebff5c3be9d5a6c5753aad91539521e..6c579bfac27db83804b529e548076c1a3bd961ac 100644 --- a/mybatis-enhance-actable/pom.xml +++ b/mybatis-enhance-actable/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.gitee.sunchenbin.mybatis.actable mybatis-enhance-actable - 1.0.3 + 1.0.4 org.sonatype.oss diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/BaseModel.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/BaseModel.java index f9cc97b82a9c3bc13c32dd9121c22aafb0d4d18e..ae3f8bd3b2801503cb4b9dab7d29483e48201fa1 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/BaseModel.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/BaseModel.java @@ -1,6 +1,7 @@ package com.gitee.sunchenbin.mybatis.actable.command; import java.io.Serializable; +import java.util.LinkedHashMap; /** @@ -25,9 +26,7 @@ public class BaseModel implements Serializable{ public int start;// (currentPage-1)*pageSize - public String orderField; - - public String sortStr = DESC; + public LinkedHashMap orderBy; public static String DESC = "desc"; @@ -65,26 +64,13 @@ public class BaseModel implements Serializable{ } - public String getOrderField() { - return orderField; - } - - - public void setOrderField(String orderField) { - this.orderField = orderField; - } - - - public String getSortStr() { - return sortStr; + public LinkedHashMap getOrderBy() { + return orderBy; } - public void setSortStr(String sortStr) { - this.sortStr = sortStr; + public void setOrderBy(LinkedHashMap orderBy) { + this.orderBy = orderBy; } - - - } diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/dao/common/BaseMysqlCRUDMapper.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/dao/common/BaseMysqlCRUDMapper.java index 7061b25cd7e6adbcfd360ee7a576fa062d5368c4..0c8378270faadbd7d19a0f47fc18d23ff4f06132 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/dao/common/BaseMysqlCRUDMapper.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/dao/common/BaseMysqlCRUDMapper.java @@ -1,5 +1,6 @@ package com.gitee.sunchenbin.mybatis.actable.dao.common; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -39,12 +40,24 @@ public interface BaseMysqlCRUDMapper { * 查询 * @param tableMap 表结构的map */ - public List> query(@Param("tableMap") Map tableMap); + public List> search(@Param("tableMap") Map tableMap); /** * 查询的count * @param tableMap 表结构的map */ - public int queryCount(@Param("tableMap") Map tableMap); + public int searchCount(@Param("tableMap") Map tableMap); + + /** + * 查询 + * @param value 动态sql + */ + public List> query(String value); + + /** + * 更新,可以更新null + * @param saveOrUpdateDataCommand + */ + public void updateWithNull(SaveOrUpdateDataCommand saveOrUpdateDataCommand); } diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManager.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManager.java index 6b4222eb060d65c88eea5405d5807781c3f5c55e..549d3db46c8264b77c13e0ecaf021e201d0e5628 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManager.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManager.java @@ -1,5 +1,6 @@ package com.gitee.sunchenbin.mybatis.actable.manager.common; +import java.util.LinkedHashMap; import java.util.List; import com.gitee.sunchenbin.mybatis.actable.command.PageResultCommand; @@ -14,6 +15,12 @@ public interface BaseMysqlCRUDManager{ */ Integer save(T t); + /** + * 更新,可以更新null值 + * @param t + * @return + */ + Integer updateWithNull(T t); /** * 根据传入对象非空的条件删除 * @param model类型 @@ -22,9 +29,32 @@ public interface BaseMysqlCRUDManager{ void delete(T t); /** - * 根据传入对象非空的条件进行查询 + * 根据传入对象非空的条件进行查询返回值PageResultCommand,适用于返回结果集的场合 * @param model类型 * @param t 要查询的model类型数据 */ - PageResultCommand query(T t); + PageResultCommand search(T t); + + /** + * 根据传入对象非空的条件进行查询返回对象,适用于返回单个对象的场合 + * @param t + * @return + */ + T findPrimaryBy(T t); + + /** + * 动态查询方法 + * @param + * @param sql 动态sql + * @param beanClass 返回list对象类型,不传默认返回List(Map(String,Object))格式 + * @return + */ + List query(String sql, Class beanClass); + + /** + * 动态查询方法 + * @param sql 动态sql + * @return + */ + List> query(String sql); } diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManagerImpl.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManagerImpl.java index 71e9a994faf3af951b6919101916944c27a8743d..3869a6931942ba07e667be58dd228ed9ae3d4d41 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManagerImpl.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/common/BaseMysqlCRUDManagerImpl.java @@ -3,6 +3,7 @@ package com.gitee.sunchenbin.mybatis.actable.manager.common; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -30,6 +31,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ @Autowired private BaseMysqlCRUDMapper baseMysqlCRUDMapper; + @Override public Integer save(T obj){ boolean isSave = true; Table tableName = obj.getClass().getAnnotation(Table.class); @@ -48,7 +50,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ field.setAccessible(true); Column column = field.getAnnotation(Column.class); if (column == null) { - log.info("该field没有配置注解不是表中在字段!"); + log.debug("该field没有配置注解不是表中在字段!"); continue; } @@ -61,7 +63,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ // 如果是自增,并且是保存的场合,不需要添加到map中做保存 if (isSave && column.isAutoIncrement()) { - log.info("字段:" + field.getName() + "是自增的不需要添加到map中"); + log.debug("字段:" + field.getName() + "是自增的不需要添加到map中"); continue; } @@ -96,6 +98,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ return declaredFields; } + @Override public void delete(T obj){ // 得到表名 @@ -113,7 +116,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ // 得到字段的配置 Column column = field.getAnnotation(Column.class); if (column == null) { - log.info("该field没有配置注解不是表中在字段!"); + log.debug("该field没有配置注解不是表中在字段!"); continue; } try{ @@ -128,18 +131,17 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ baseMysqlCRUDMapper.delete(tableMap); } + @Override @SuppressWarnings("unchecked") - public PageResultCommand query(T obj){ + public PageResultCommand search(T obj){ String startKey = "start"; String sizeKey = "pageSize"; String currentPageKey = "currentPage"; - String orderFieldKey = "orderField"; - String sortKey = "sortStr"; + String orderByKey = "orderBy"; Integer startVal = null; Integer sizeVal = null; Integer currentPageVal = null; - String orderFieldVal = null; - String sortVal = null; + LinkedHashMap orderByVal = null; PageResultCommand pageResultCommand = new PageResultCommand(); // 得到表名 Table tableName = obj.getClass().getAnnotation(Table.class); @@ -164,16 +166,13 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ if(currentPageKey.equals(field.getName())) { currentPageVal = (Integer) field.get(obj); } - if(orderFieldKey.equals(field.getName())) { - orderFieldVal = (String) field.get(obj); - } - if(sortKey.equals(field.getName())) { - sortVal = (String) field.get(obj); + if(orderByKey.equals(field.getName())) { + orderByVal = (LinkedHashMap) field.get(obj); } // 得到字段的配置 Column column = field.getAnnotation(Column.class); if (column == null) { - log.info("该field没有配置注解不是表中在字段!"); + log.debug("该field没有配置注解不是表中在字段!"); continue; } if (field.get(obj) instanceof String && field.get(obj) != null && "".equals(field.get(obj))) { @@ -192,11 +191,10 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ tableMap.put(startKey, startVal); tableMap.put(sizeKey, sizeVal); } - if(orderFieldVal != null && orderFieldVal != "") { - tableMap.put(orderFieldKey, orderFieldVal); - tableMap.put(sortKey, sortVal); + if(orderByVal != null && orderByVal.size() > 0) { + tableMap.put(orderByKey, orderByVal); } - List> query = baseMysqlCRUDMapper.query(tableMap); + List> query = baseMysqlCRUDMapper.search(tableMap); List list = new ArrayList(); try{ @@ -208,7 +206,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ // 得到字段的配置 Column column = field.getAnnotation(Column.class); if (column == null) { - log.info("该field没有配置注解不是表中在字段!"); + log.debug("该field没有配置注解不是表中在字段!"); continue; } String name = column.name(); @@ -223,7 +221,7 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ } if (null != list) { pageResultCommand.setData(list); - int queryCount = baseMysqlCRUDMapper.queryCount(tableMap); + int queryCount = baseMysqlCRUDMapper.searchCount(tableMap); pageResultCommand.setRecordsFiltered(queryCount); pageResultCommand.setRecordsTotal(queryCount); } @@ -245,4 +243,96 @@ public class BaseMysqlCRUDManagerImpl implements BaseMysqlCRUDManager{ return fields; } + @Override + public T findPrimaryBy(T t) { + PageResultCommand query = search(t); + if (query != null && query.getData() != null && query.getData().size() > 0) { + return query.getData().get(0); + } + return null; + } + + @Override + public List> query(String value) { + log.info(value); + return baseMysqlCRUDMapper.query(value); + } + + @Override + public List query(String sql, Class beanClass) { + if(null == beanClass){ + return null; + } + List> query = baseMysqlCRUDMapper.query(sql); + if(null == query || query.size() == 0){ + return null; + } + List list = new ArrayList(); + for(Map map : query){ + try{ + T t = beanClass.newInstance(); + Field[] fields = t.getClass().getDeclaredFields(); + for(Field field : fields){ + field.setAccessible(true); + Column annotation = field.getAnnotation(Column.class); + String name = (null != annotation && !annotation.name().equals("")) ? annotation.name() : field.getName(); + if(null == map.get(name)){ + continue; + } + field.set(t, map.get(name)); + } + list.add(t); + }catch(Exception e){ + log.error("map转对象失败",e); + } + } + return list; + } + + @Override + public Integer updateWithNull(T obj){ + Table tableName = obj.getClass().getAnnotation(Table.class); + if ((tableName == null) || (tableName.name() == null || tableName.name() == "")) { + log.error("必须使用model中的对象!"); + return null; + } + Field[] declaredFields = getAllFields(obj); + Map> tableMap = new HashMap>(); + Map dataMap = new HashMap(); + Map keyFieldMap = new HashMap(); + Integer updateId = null; + for (Field field : declaredFields){ + try{ + // 私有属性需要设置访问权限 + field.setAccessible(true); + Column column = field.getAnnotation(Column.class); + if (column == null) { + log.debug("该field没有配置注解不是表中在字段!"); + continue; + } + // 如果是主键,并且不是空的时候,这时候应该是更新操作 + if (column.isKey() && field.get(obj) != null && (new Integer(field.get(obj).toString())) > 0) { + keyFieldMap.put(field.getName(), field.get(obj)); + updateId = (Integer) field.get(obj); + } + dataMap.put(column.name(), field.get(obj)); + }catch (IllegalArgumentException e){ + e.printStackTrace(); + }catch (IllegalAccessException e){ + e.printStackTrace(); + } + } + + if(keyFieldMap.isEmpty()) { + log.error("主键不能更新为null!"); + return null; + } + dataMap.put(KEYFIELDMAP, keyFieldMap); + tableMap.put(tableName.name(), dataMap); + SaveOrUpdateDataCommand saveOrUpdateDataCommand = new SaveOrUpdateDataCommand(tableMap); + // 执行更新操作根据主键 + baseMysqlCRUDMapper.updateWithNull(saveOrUpdateDataCommand); + return updateId; + } + } diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/mapping/common/BaseMysqlCRUDMapper.xml b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/mapping/common/BaseMysqlCRUDMapper.xml index 9789c9bb1f281a585e18991e61a6930a67ba3857..f26ddb03d9285c59d186aa81c94ad768d549801c 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/mapping/common/BaseMysqlCRUDMapper.xml +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/mapping/common/BaseMysqlCRUDMapper.xml @@ -49,6 +49,30 @@ + + + + + update `${key}` + + set + + + `${field}` = #{fieldvalue} + + + + where 1=1 + + + + and `${field}` = #{fieldvalue} + + + + + + - - + select * from `${key}` where 1=1 @@ -80,8 +104,11 @@ - - order by `${tableMap.orderField}` ${tableMap.sortStr} + + order by + + `${field}` ${sort} + @@ -90,10 +117,10 @@ - - + select count(1) from `${key}` where 1=1 @@ -105,4 +132,9 @@ + + +