SSM分布式架構電商項目-04使用Spring4的泛型注入封裝BaseService

來源:互聯網
上載者:User

每個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中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.