1. 程式人生 > >SSM之Service層抽取成BaseService和BaseServiceImpl與mapper層抽取 BaseMapper

SSM之Service層抽取成BaseService和BaseServiceImpl與mapper層抽取 BaseMapper

1、BaseService


package dataSource;


import data.page.PageImpl;
import data.page.Pageable;


import java.io.Serializable;
import java.util.List;


/**
 * @author henry
 * @version V1.0
 * @Title: BaseService
 * @Package com.txy.dataSource
 * @Description: 公用service介面
 */
public interface BaseService<T,ID extends Serializable> {
    int add(T model);

    int adds(List<T> modelList);

    int update(T model);

    int updates(List<T> modelList);

    T queryById(ID id);

    T queryModelByModel(T model);

    List<T> queryList(T model);

    PageImpl<T> queryListForPageModel(T model, Pageable pb);

    int queryCount(T model);
}




2、BaseServiceImpl


package dataSource.impl;


import data.page.PageImpl;
import data.page.Pageable;
import dataSource.BaseMapper;
import dataSource.BaseService;

import java.io.Serializable;
import java.util.List;


/**
 * @author henry
 * @version V1.0
 * @Title: BaseServiceImpl
 * @Package dataSource.impl
 * @Description: 公用service抽象實現類
 */
public abstract class BaseServiceImpl<T,ID extends Serializable> implements BaseService<T,ID> {


    public abstract BaseMapper<T, ID> getMapper();

    public int add(T model) {
        int i = 0;
        try{
            i = getMapper().add(model);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return i;
    }
    
    public int adds(List<T> modelList) {
        int i = 0;
        try{
            i = getMapper().adds(modelList);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return i;
    }
    
    public int update(T model) {
        int i = 0;
        try{
            i = getMapper().update(model);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return i;
    }
    
    public int updates(List<T> modelList) {
        int i = 0;
        try{
            i = getMapper().updates(modelList);
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        return i;
    }
    
    public T queryById(ID id) {
        return getMapper().queryById(id);
    }

    public T queryModelByModel(T model){
        return getMapper().queryModelByModel(model);
    }

    public List<T> queryList(T model) {
        return getMapper().queryList(model);
    }
    
    public PageImpl<T> queryListForPageModel(T model, Pageable pb) {
        // 查詢所有資料count
        int totalElements = getMapper().queryCount(model);
        // 查詢list分頁資料
        List<T> list = getMapper().queryListForPageModel(model, pb);
        return new PageImpl(pb,totalElements,list);
    }
    
    public int queryCount(T model) {
        return getMapper().queryCount(model);
    }
}




3、BaseMapper


package dataSource;


import data.page.Pageable;
import org.apache.ibatis.annotations.Param;


import java.io.Serializable;
import java.util.List;


/**
 * @author henry
 * @version V1.0
 * @Title: BaseMapper
 * @Package com.txy.dataSource
 * @Description: 公用mapper介面
 */
public interface BaseMapper<T,ID extends Serializable> {
    int add(T model);


    int adds(List<T> modelList);


    int update(T model);


    int updates(List<T> modelList);


    T queryById(ID id);


    T queryModelByModel(@Param("model") T model);


    List<T> queryList(@Param("model") T model);


    List<T> queryListForPageModel(@Param("model") T model, @Param("page") Pageable pb);


    int queryCount(@Param("model") T model);
}




本程式碼段中使用分頁類程式碼
1、Page


package data.page;


import java.util.List;


/**
 * @author henry
 * @version V1.0
 * @Title: Page
 * @Package data.page
 * @Description: 頁內容。
 */
public interface Page<T> {


    /**
     * 當前頁碼
     */
    int getNumber();


    /**
     * 頁大小
     */
    int getSize();


    /**
     * 總頁數
     */
    int getTotalPages();


    /**
     * 總記錄條數
     */
    int getTotalElements();




    /**
     * 獲取內容
     */
    List<T> getContent();


    /**
     * 是否有內容
     */
    boolean hasContent();


    /**
     * 下一頁
     */
    Pageable nextPageable();


    /**
     * 前一頁
     */
    Pageable previousPageable();


    boolean isLastPageNumber();


}


2、Pageable


package data.page;


/**
 * @author henry
 * @version V1.0
 * @Title: Pageable
 * @Package data.page
 */
public class Pageable {


    private int pageNumber;
    private int pageSize;


    private int index;
    private int length;


    public Pageable(int pageNumber, int pageSize) {
        this.pageNumber = pageNumber;
        this.pageSize = pageSize;


        this.index = (pageNumber - 1) * pageSize;
        this.length = pageSize;
    }


    public int getPageNumber() {
        return pageNumber;
    }


    public int getPageSize() {
        return pageSize;
    }


    public int getLength() {
        return length;
    }


    public int getIndex() {
        return index;
    }


    public Pageable next() {
        return new Pageable(pageNumber + 1, pageSize);
    }


    public Pageable previousOrFirst() {
        if (pageNumber == 1) {
            return this;
        }
        return new Pageable(pageNumber - 1, pageSize);
    }


    public Pageable first() {
        return new Pageable(1, pageSize);
    }
}


3、PageImpl


package data.page;


import com.google.gson.annotations.Expose;


import java.util.List;


/**
 * @author henry
 * @version V1.0
 * @Package data.page
 * @Description: 分頁實現。
 */
public class PageImpl<T> implements Page<T> {


    @Expose
    private int number;


    @Expose
    private int size;


    @Expose
    private int totalElements;


    @Expose
    private int totalPages;


    @Expose
    private List<T> content;


    private transient Pageable pageable;


    public PageImpl(Pageable pageable, int totalElements, List<T> content) {
        number = pageable == null ? -1 : pageable.getPageNumber();
        size = pageable == null ? -1 : pageable.getPageSize();
        this.totalElements = totalElements;
        this.totalPages = pageable == null ? 1 : (totalElements + size - 1) / size;
        this.content = content;
        this.pageable = pageable;
    }


    public int getNumber() {
        return number;
    }


    public int getSize() {
        return size;
    }


    public int getTotalPages() {
        return totalPages;
    }


    public int getTotalElements() {
        return totalElements;
    }


    public List<T> getContent() {
        return content;
    }


    public boolean hasContent() {
        return content != null && content.size() > 0;
    }


    public Pageable nextPageable() {
        return pageable.next();
    }


    public Pageable previousPageable() {
        return pageable.previousOrFirst();
    }


    public boolean isLastPageNumber() {
        return pageable.getPageNumber()==totalElements/pageable.getPageSize()+1;
    }
}