1. 程式人生 > >WAP開發中抽取BaseService以及其實現

WAP開發中抽取BaseService以及其實現

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;
    }

}