package com.code2roc.fastface.db; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.code2roc.fastface.util.CommonUtil; import com.code2roc.fastface.util.ConvertOp; import com.code2roc.fastface.util.ReflectUtil; import com.code2roc.fastface.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashMap; import java.util.List; @Component public class BaseServiceImpl implements BaseService{ @Autowired public CommonDTO commonDTO; @Autowired public CommonWrapper commonWrapper; public String tableName; public String tableKeyName; public Class entityClass; public BaseMapper mapperBean; @Autowired public MapperBeanManage mapperBeanManage; public BaseServiceImpl() { entityClass = getEntityClass(); tableName = getTableName(entityClass); tableKeyName = getTableKeyName(entityClass); } public void insert(T entity) { getMapper().insert(entity); } public void delete(String id) { UpdateWrapper wrapper = commonWrapper.getDeleteWrapperFillKey(entityClass, id); getMapper().delete(wrapper); } public void delete(String fieldName, Object filedValue) { UpdateWrapper wrapper = commonWrapper.getDeleteWrapperCustomKey(fieldName, filedValue); getMapper().delete(wrapper); } public void batchDelte(List idList) { for (String id : idList) { delete(id); } } public void update(T entity) { UpdateWrapper wrapper = commonWrapper.getUpdateWrapperFillKey(entity); getMapper().update(entity, wrapper); } public void batchUpdate(List entityList) { for (T entity : entityList) { update(entity); } } public void save(T entity) { String unitguid = ""; if (StringUtil.isEmpty(getTableKeyValue(entity))) { unitguid = CommonUtil.getNewGuid(); setTableKeyValue(entity,unitguid); } else { unitguid = getTableKeyValue(entity); } if (null == selectOne(unitguid)) { insert(entity); } else { update(entity); } } public T selectOne(String unitguid) { return (T) commonDTO.selectOne(entityClass, tableName, "*", tableKeyName, unitguid); } public Page selectPage(String columns, String where, String orderBy, HashMap paramMap) { return commonDTO.selectPage(tableName, columns, where, orderBy, paramMap); } public List selectPageList(String columns, String where, String orderBy, HashMap paramMap) { return (List) commonDTO.selectPageList(entityClass, tableName, columns, where, orderBy, paramMap); } public List selectList(String columns, String where, String orderBy, HashMap paramMap) { return (List) commonDTO.selectList(entityClass, tableName, columns, where, orderBy, paramMap); } @Override public List selectAllList() { return (List) commonDTO.selectList(entityClass, tableName, "*", "1=1", "", new HashMap<>()); } @Override public List selectListByField(String filedName, Object filedValue) { String sql = filedName + " = #{" + filedName + "}"; HashMap paramMap = new HashMap(); paramMap.put(filedName, filedValue); return selectList("*", sql, "", paramMap); } @Override public List selectRangeList(List rowIDList) { String rowIDString = ""; if (rowIDList.size() == 0) { rowIDString = "''"; } else { for (int i = 0; i < rowIDList.size(); i++) { if (!rowIDString.contains(rowIDList.get(i))) { if (i == rowIDList.size() - 1) { rowIDString += "'" + rowIDList.get(i) + "'"; } else { rowIDString += "'" + rowIDList.get(i) + "',"; } } } } String sql = " "+tableKeyName+" in (" + rowIDString + ") "; return selectList("*", sql, "", null); } @Override public List selectRangeListByField(String filedName, List rowIDList) { String rowIDString = ""; if (rowIDList.size() == 0) { rowIDString = "''"; } else { for (int i = 0; i < rowIDList.size(); i++) { if (!rowIDString.contains(rowIDList.get(i))) { if (i == rowIDList.size() - 1) { rowIDString += "'" + rowIDList.get(i) + "'"; } else { rowIDString += "'" + rowIDList.get(i) + "',"; } } } } String sql = " " + filedName + " in (" + rowIDString + ") "; return selectList("*", sql, "", null); } @Override public boolean checkExist(String fieldName, Object fieldValue) { String sql = " " + fieldName + "= #{" + fieldName + "}"; HashMap paramMap = new HashMap(); paramMap.put(fieldName, fieldValue); return selectCount(sql, paramMap) > 0; } @Override public boolean checkExist(String fieldName, Object fieldValue, String rowID) { String sql = " " + fieldName + "= #{" + fieldName + "} and "+tableKeyName+" != #{row_id}"; HashMap paramMap = new HashMap(); paramMap.put(fieldName, fieldValue); paramMap.put("row_id", tableKeyName); return selectCount(sql, paramMap) > 0; } public int selectCount(String where, HashMap paramMap) { return commonDTO.selectCount(tableName, where, paramMap); } @Override public T selectOneByField(String fieldName, Object filedValue) { return (T) this.commonDTO.selectOne(this.entityClass, this.tableName, "*", fieldName, filedValue.toString()); } @Override public void deleteByField(String fieldName, Object filedValue) { UpdateWrapper wrapper = this.commonWrapper.getDeleteWrapperCustomKey(fieldName, filedValue); this.getMapper().delete(wrapper); } @Override public void deleteAll() { String sql = "delete from " + tableName; commonDTO.executeSQL(sql, null); } //获取泛型具体对应class public Class getEntityClass() { return ReflectUtil.getSuperClassGenricType(this.getClass()); } //获取表名 public String getTableName(Class clazz) { String tabaleName = ""; TableName tableNameAnnotaion = (TableName) clazz.getAnnotation(TableName.class); if (tableNameAnnotaion != null) { tabaleName = tableNameAnnotaion.value(); } if ("".equals(tabaleName)) { tabaleName = clazz.getSimpleName(); } return tabaleName; } //获取主键名称 public String getTableKeyName(Class clazz) { String tableKeyName = ""; List fs = Arrays.asList(clazz.getDeclaredFields()); for (Field field : fs) { field.setAccessible(true); //TableId修饰主键 TableId tableIDAnnotaion = field.getAnnotation(TableId.class); if (tableIDAnnotaion != null) { tableKeyName = tableIDAnnotaion.value(); break; } } if ("".equals(tableKeyName)) { tableKeyName = "id"; } return tableKeyName; } public String getTableKeyValue(T entity) { String tableKeyValue = ""; List fs = Arrays.asList(entityClass.getDeclaredFields()); for (Field field : fs) { field.setAccessible(true); //TableId修饰主键 TableId tableIDAnnotaion = field.getAnnotation(TableId.class); if (tableIDAnnotaion != null) { try{ tableKeyValue = ConvertOp.convert2String(field.get(entity)); }catch (Exception e){ e.printStackTrace(); } break; } } return tableKeyValue; } public void setTableKeyValue(T entity, String value){ List fs = Arrays.asList(entityClass.getDeclaredFields()); for (Field field : fs) { field.setAccessible(true); //TableId修饰主键 TableId tableIDAnnotaion = field.getAnnotation(TableId.class); if (tableIDAnnotaion != null) { try{ field.set(entity,value); }catch (Exception e){ e.printStackTrace(); } break; } } } //获取Dao对应的bean public BaseMapper getMapper() { if (null == mapperBean) { String tableNameValue = StringUtil.replaceLast(entityClass.getSimpleName().toLowerCase(),"do",""); mapperBean = mapperBeanManage.getMapper(tableNameValue); } return mapperBean; } }