每個service都幾乎需要以下方法:
1、 queryById
2、 queryAll
3、 queryOne
4、 queryListByWhere
5、 queryPageListByWhere
6、 save
7、 update
8、 deleteById
9、 deleteByIds
10、deleteByWhere
在封裝BaseService的時候會遇到下面的問題:
所以我們可以通過下面這種方式:
package com.taotao.manage.service;import java.util.Date;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import com.github.abel533.entity.Example;import com.github.abel533.mapper.Mapper;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import com.taotao.manage.pojo.BasePojo;public abstract class BaseService<T extends BasePojo> { //@Autowired //private Mapper<T> mapper; public abstract Mapper<T> getMapper(); /** * 根據id查詢資料 * * @param id * @return */ public T queryById(Long id) { return this.getMapper().selectByPrimaryKey(id); } /** * 查詢所有資料 * * @return */ public List<T> queryAll() { return this.getMapper().select(null); } /** * 根據條件查詢一條資料,如果有多條資料會拋出異常 * * @param record * @return */ public T queryOne(T record) { return this.getMapper().selectOne(record); } /** * 根據條件查詢資料列表 * * @param record * @return */ public List<T> queryListByWhere(T record) { return this.getMapper().select(record); } /** * 分頁查詢 * * @param page * @param rows * @param record * @return */ public PageInfo<T> queryPageListByWhere(Integer page, Integer rows, T record) { // 設定分頁條件 PageHelper.startPage(page, rows); List<T> list = this.queryListByWhere(record); return new PageInfo<T>(list); } /** * 新增資料,返回成功的條數 * * @param record * @return */ public Integer save(T record) { record.setCreated(new Date()); record.setUpdated(record.getCreated()); return this.getMapper().insert(record); } /** * 新增資料,使用不為null的欄位,返回成功的條數 * * @param record * @return */ public Integer saveSelective(T record) { record.setCreated(new Date()); record.setUpdated(record.getCreated()); return this.getMapper().insertSelective(record); } /** * 修改資料,返回成功的條數 * * @param record * @return */ public Integer update(T record) { return this.getMapper().updateByPrimaryKey(record); } /** * 修改資料,使用不為null的欄位,返回成功的條數 * * @param record * @return */ public Integer updateSelective(T record) { record.setUpdated(new Date()); return this.getMapper().updateByPrimaryKeySelective(record); } /** * 根據id刪除資料 * * @param id * @return */ public Integer deleteById(Long id) { return this.getMapper().deleteByPrimaryKey(id); } /** * 大量刪除 * @param clazz * @param property * @param values * @return */ public Integer deleteByIds(Class<T> clazz, String property, List<Object> values) { Example example = new Example(clazz); example.createCriteria().andIn(property, values); return this.getMapper().deleteByExample(example); } /** * 根據條件做刪除 * * @param record * @return */ public Integer deleteByWhere(T record) { return this.getMapper().delete(record); }}
使用BaseService改造ItemCatService
package com.taotao.manage.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.github.abel533.mapper.Mapper;import com.taotao.manage.mapper.ItemCatMapper;import com.taotao.manage.pojo.ItemCat;@Servicepublic class ItemCatService extends BaseService<ItemCat>{ @Autowired private ItemCatMapper itemCatMapper;// public List<ItemCat> queryItemCat(Long parentId) {// ItemCat record = new ItemCat();// record.setParentId(parentId);// return this.itemCatMapper.select(record );// } @Override public Mapper<ItemCat> getMapper() { // TODO Auto-generated method stub return this.itemCatMapper; }}
在Controller:
測試
Spring4的泛型注入
BaseService的最佳化
測試:
測試:運行時注入具體的通用Mapper的子介面的實作類別:
問題
ItemCatMapper在編碼時沒有使用到,是否將其刪除。 – 不能。
原因:在Spring運行時會使用該對象,將其注入到BaseService中。