WAP開發中抽取BaseService以及其實現
阿新 • • 發佈:2019-01-27
import java.util.List; public interface BaseService<T> { //根據id查詢實體 T queryById(int id); //根據id查詢實體(主鍵是UUID) T queryByUUID(String id); //查詢所有 List<T> queryAll(); //條件查詢 List<T> queryListByWhere(T param); //查詢記錄數 Integer queryCount(T param); //分頁查詢 List<T> queryPageListByWhere(T param,Integer page,Integer rows); //查詢一條記錄 T queryOne(T param); //插入 Integer save(T param); //新增非空欄位 Integer saveSelect(T param); //根據主鍵更新 Integer update(T param); //根據主鍵更新非空欄位 Integer updateSelective(T param); //根據主鍵刪除 Integer deleteById(int id); Integer deleteByUUId(String id); //批量刪除 Integer deleteByIds(Class<T> clazz,List<Object> values); // 多條件模糊分頁查詢 List<T> queryPageListWhereLike(Class<T> clazz,T param,Integer page,Integer rows); // 多條件模糊查詢不分頁 List<T> queryListWhereLike(Class<T> clazz, T param); // 根據條件模糊查詢總條數 Integer queryCountWhereLike(Class<T> clazz,T param); }
public abstract class BaseServiceImpl<T> { @Autowired private Mapper<T> mapper; //根據id查詢實體 public T queryById(int id){ return this.mapper.selectByPrimaryKey(id); } //根據id查詢實體(主鍵是UUID) public T queryByUUID(String id){ return this.mapper.selectByPrimaryKey(id); } //查詢所有 public List<T> queryAll(){ return this.mapper.select(null); } //條件查詢 public List<T> queryListByWhere(T param){ return this.mapper.select(param); } //查詢記錄數 public Integer queryCount(T param){ return this.mapper.selectCount(param); } //分頁條件全部匹配查詢 public List<T> queryPageListByWhere(T param,Integer page,Integer rows){ PageHelper.startPage(page, rows); List<T> list = this.queryListByWhere(param); return list; } //查詢一條記錄 public T queryOne(T param){ return this.mapper.selectOne(param); } //插入 public Integer save(T param){ return this.mapper.insert(param); } //新增非空欄位 public Integer saveSelect(T param){ return this.mapper.insertSelective(param); } //根據主鍵更新 public Integer update(T param){ return this.mapper.updateByPrimaryKey(param); } //根據主鍵更新非空欄位 public Integer updateSelective(T param){ return this.mapper.updateByPrimaryKeySelective(param); } //根據主鍵刪除 主鍵是自增 public Integer deleteById(int id){ return this.mapper.deleteByPrimaryKey(id); } //根據主鍵刪除 主鍵 UUID public Integer deleteByUUId(String id){ return this.mapper.deleteByPrimaryKey(id); } //批量刪除 public Integer deleteByIds(Class<T> clazz,List<Object> values){ Example example = new Example(clazz); example.createCriteria().andIn("id", values); return this.mapper.deleteByExample(example); } /* * ben 新增 */ // 多條件模糊查詢(沒有分頁) public List<T> queryListWhereLike(Class<T> clazz, T param){ Example example = getExample(clazz, param); return this.mapper.selectByExample(example); } // 多條件模糊分頁查詢 public List<T> queryPageListWhereLike(Class<T> clazz,T param,Integer page,Integer rows){ PageHelper.startPage(page, rows); return this.queryListWhereLike(clazz,param); } // 根據條件模糊查詢總條數 public Integer queryCountWhereLike(Class<T> clazz,T param){ Example example = getExample(clazz, param); return this.mapper.selectCountByExample(example); } /** * 根據屬性名獲取屬性值(工具類) * @param fieldName * @param o * @return */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { e.getMessage(); return null; } } /** * 解析並且新增到exanple中 * @param clazz * @param param * @return */ private Example getExample(Class<T> clazz, T param) { Example example = new Example(clazz); // 注意用的是類中的屬性,不是資料庫中的屬性 Criteria criteria = example.createCriteria(); // example.setOrderByClause("groupKey asc"); // 注意用的是類中的屬性,不是資料庫中的屬性 // 開始解析物件屬性 Field[] fields = param.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; int m=0; for(int i=0;i<fields.length;i++){ String name = fields[i].getName(); Object value = getFieldValueByName(fields[i].getName(), param); if(value!=null && !"".equals(value)){ criteria.andLike(name,"%"+value+"%"); } } example.and(criteria); return example; } }