首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

企業級 Java 框架基石:通用基類體系設計與實現 (Controller/Service/Mapper/POJO)

     編輯:Java 程式設計入門

設計目標

消除 CRUD 重複代碼,統一分頁、返回格式、異常處理,建立可復用的分層基礎設施,讓業務開發聚焦核心邏輯。

分層架構圖

Controller (BaseController) 
    ↓ 依賴介面
Service (BaseService) 
    ↓ 依賴介面
Mapper (BaseMapper) 
    ↓ 操作
Database

核心基類代碼詳解

1. POJO 層:分頁與統一返回


// 分頁參數承載 (支援 MySQL limit/offset 與 Oracle 分頁)
public class BasePage {
    protected int start;          // 起始行
    protected Integer limit;      // 頁大小
    protected Integer length;     // 兼容 DataTables
    protected int draw;           // 請求計數
    protected Integer oracleStart; // Oracle 起始
    protected Integer oracleEnd;   // Oracle 結束
    // getter/setter 省略
}

// 列表返回結構 (兼容 DataTables / Bootstrap Table)
public class GridReturn {
    private int draw;
    private long recordsTotal;
    private long recordsFiltered;
    private List data;
    // 構造器、getter/setter 省略
}

// 通用操作返回
public class MsgReturn {
    private boolean success;
    private Object msg;
    private Object otherObject;
    // 多種構造器支援成功/失敗/異常/攜帶數據
}

2. Mapper 層:統一持久化契約


public interface BaseMapper {
    int insert(T t);
    int delete(T t);
    int update(T t);
    T get(T t);                    // 單條查詢
    List findList(C c);         // 分頁列表
    int getTotalCount(C c);        // 總數
}

3. Service 層:業務邊界與事務


public interface BaseService {
    int insert(T t);
    int delete(T t);
    int update(T t);
    T get(T t);
    List findList(C c);
    int getTotalCount(C c);
}

// 模板方法實現,子類只需提供 Mapper
public abstract class BaseServiceImpl implements BaseService {
    protected abstract BaseMapper getChildMapper();
    
    // 所有方法委派給 Mapper,此處可擴展事務、緩存、日誌、權限攔截
    public int insert(T t) { return getChildMapper().insert(t); }
    // ... 其他方法同理
}

4. Controller 層:REST 端點標準化


public abstract class BaseController {
    protected abstract BaseService getBaseService();
    
    @PostMapping("/insert")
    @ResponseBody
    public MsgReturn insert(T t) {
        return getBaseService().insert(t) > 0 
            ? new MsgReturn(true, "新增成功!") 
            : new MsgReturn(false, "新增失敗!");
    }
    
    @PostMapping("/delete")
    @ResponseBody
    public MsgReturn delete(T t) { /* 同理 */ }
    
    @PostMapping("/update")
    @ResponseBody
    public MsgReturn update(T t) { /* 同理 */ }
    
    @GetMapping("/get")
    @ResponseBody
    public T get(T t) { return getBaseService().get(t); }
    
    @PostMapping("/findList")
    @ResponseBody
    public GridReturn findList(C c) {
        // 兼容前端 limit/length 參數差異
        if (c.getLimit() != null || c.getLength() != null) {
            c.setLength(c.getLimit());
            c.setLimit(c.getLimit());
            c.setOracleEnd(c.getLimit() + c.getStart());
            c.setOracleStart(c.getStart());
        }
        List list = getBaseService().findList(c);
        int count = getBaseService().getTotalCount(c);
        return new GridReturn(c.getDraw(), count, count, list);
    }
}

使用範例:用戶管理模組


// 1. 實體
public class User { private Long id; private String name; /* getter/setter */ }

// 2. 查詢條件繼承分頁
public class UserQuery extends BasePage { private String name; /* getter/setter */ }

// 3. Mapper 介面 (MyBatis XML 對應)
public interface UserMapper extends BaseMapper { }

// 4. Service 實現
@Service
public class UserServiceImpl extends BaseServiceImpl {
    @Autowired UserMapper userMapper;
    protected BaseMapper getChildMapper() { return userMapper; }
}

// 5. Controller
@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
    @Autowired UserServiceImpl userService;
    protected BaseService getBaseService() { return userService; }
}

擴展建議

  • 樂觀鎖:在 BaseMapper 增加 updateByIdWithVersion,實體加 @Version。
  • 軟刪除:BaseMapper delete 改為邏輯刪除 SQL,查詢自動加 deleted=0。
  • 自動填充:MyBatis Plus 或攔截器自動填充 create_time, update_time, create_by。
  • 異常統一:Controller 建議配合 @ControllerAdvice 全局異常處理,返回統一 MsgReturn。
  • 權限註解:在 BaseController 方法加 @PreAuthorize 或自定義註解 + AOP。

總結

這套基類體系通過泛型抽象、模板方法模式、介面導向,將 CRUD 通用邏輯下沉到框架層,業務層僅需「配置而非編碼」即可擁有標準化的增刪改查、分頁、返回格式。是中小型項目快速搭建、大型項目規範基線的極佳起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved