| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- ---
- name: dao-crud
- description: >-
- 创建对象或功能项的CRUD全链路脚手架。当用户需要为某个实体创建完整的数据库持久层、业务层和控制器层时使用本技能,包括:Table接口、SqlProvider、Mapper、DBService接口/实现类、BizFilter、BizHelper和Controller。触发场景如:"帮我创建一个XXX的CRUD"、"生成XXX的全套代码"、"生成XXX的增删查改"。
- ---
- # DAO CRUD 全链路脚手架生成
- 本技能用于快速生成一个对象或功能项的完整 CRUD 链路代码,包括数据库持久层、业务处理层和 API 控制器层。
- ## 工作流程
- ### 第一步:确认对象名称
- **必须先询问用户**要创建的对象/功能项名称(如:`DevEntity`、`PatrolTask` 等)。
- ### 第二步:生成代码骨架
- 按照以下顺序创建 **8** 个文件,**扩展函数和具体实现均可留空或抛出 `UnsupportedOperationException`,由用户自行补全**。
- #### 2.1 Table 接口
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/dbdao/tables/{EntityName}Table.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.dbdao.tables;
- import java.util.HashSet;
- import java.util.Set;
- public interface {EntityName}Table {
- interface R_INFO{
- String TABLE = ""; // TODO: 填写查询表/视图名
- String PRIMARY_KEY = ""; // TODO: 填写主键字段
- String ALL_FILED = "*";
- String UNIQUE_ID = "";
- String DEFAULT_ORDER = "";
- Set<String> LIKE_SUPPORT_FILTER = new HashSet<String>(){{}};
- }
- interface W_INFO{
- String TABLE = ""; // TODO: 填写写入表名
- String PRIMARY_KEY = ""; // TODO: 填写主键字段
- String UNIQUE_ID = "";
- }
- }
- ```
- #### 2.2 SqlProvider
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/dbdao/providers/{EntityName}SqlProvider.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.dbdao.providers;
- import com.shkpr.service.alamdmaordertask.dbdao.tables.{EntityName}Table;
- public class {EntityName}SqlProvider extends BaseSqlProvider implements {EntityName}Table {
- @Override
- public String getRTableName() {
- return R_INFO.TABLE;
- }
- @Override
- public String getWTableName() {
- return W_INFO.TABLE;
- }
- @Override
- public String getRUniqueId() {
- return R_INFO.UNIQUE_ID;
- }
- @Override
- public String getWUniqueId() {
- return W_INFO.UNIQUE_ID;
- }
- @Override
- public String getSAllFiled() {
- return R_INFO.ALL_FILED;
- }
- @Override
- public String getRPrimaryKey() {
- return R_INFO.PRIMARY_KEY;
- }
- @Override
- public String getWPrimaryKey() {
- return W_INFO.PRIMARY_KEY;
- }
- @Override
- public boolean isWJsonForFiled(String filedName) {
- return false;
- }
- // TODO: 根据业务需求扩展 SQL 方法
- }
- ```
- #### 2.3 Mapper 接口
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/dbdao/mapper/{EntityName}Mapper.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.dbdao.mapper;
- import com.shkpr.service.alamdmaordertask.dbdao.BaseDBMapper;
- import com.shkpr.service.alamdmaordertask.dbdao.providers.{EntityName}SqlProvider;
- import org.apache.ibatis.annotations.InsertProvider;
- import org.apache.ibatis.annotations.Param;
- import org.apache.ibatis.annotations.SelectProvider;
- import org.apache.ibatis.annotations.UpdateProvider;
- import java.util.List;
- import java.util.Map;
- public interface {EntityName}Mapper extends BaseDBMapper{
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "totalCounts")
- int totalCounts(@Param("andWheres") Map<String, Object> andWheres
- , @Param("orWheres") Map<String, Object> orWheres
- , @Param("group2Power") Map<String, List<Map<String, Object>>> group2Power
- , @Param("extend") String extend);
-
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "listAllWiths")
- List<Map<String, Object>> listAllWiths(@Param("table") String table
- , @Param("filed") String filed
- , @Param("limit") int limit
- , @Param("offset") int offset
- , @Param("andWheres") Map<String, Object> andWheres
- , @Param("orWheres") Map<String, Object> orWheres
- , @Param("group2Power") Map<String, List<Map<String, Object>>> group2Power
- , @Param("extend") String extend
- , @Param("order") String order);
-
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "batchQueryWiths")
- List<Map<String, Object>> batchQueryWiths(@Param("table") String table
- , @Param("filed") String filed
- , @Param("andWheres") Map<String, Object> andWheres
- , @Param("orWheres") Map<String, Object> orWheres
- , @Param("group2Power") Map<String, List<Map<String, Object>>> group2Power
- , @Param("extend") String extend
- , @Param("order") String order);
-
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "batchQueryIn")
- List<Map<String, Object>> batchQueryIn(@Param("table") String table
- , @Param("filed") String filed
- , @Param("ids") List<? extends Object> ids
- , @Param("group2Power") Map<String, List<Map<String, Object>>> group2Power
- , @Param("extend") String extend
- , @Param("order") String order);
-
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "getOne")
- Map<String, Object> getOne(@Param("table") String table, @Param("filed") String filed, @Param("id") Object id);
- @Override
- @SelectProvider(type = {EntityName}SqlProvider.class, method = "existLine")
- boolean existLine(@Param("table") String table
- , @Param("andWheres") Map<String, Object> andWheres
- , @Param("orWheres") Map<String, Object> orWheres
- , @Param("group2Power") Map<String, List<Map<String, Object>>> group2Power
- , @Param("extend") String extend);
- @Override
- @UpdateProvider(type = {EntityName}SqlProvider.class, method = "updateWiths")
- int updateWiths(@Param("datas") Map<String, Object> datas
- , @Param("andWheres") Map<String, Object> andWheres
- , @Param("orWheres") Map<String, Object> orWheres
- , @Param("extend") String extend);
-
- @Override
- @InsertProvider(type = {EntityName}SqlProvider.class, method = "inserts")
- int inserts(@Param("inserts") Map<String, Object> inserts);
- @Override
- @InsertProvider(type = {EntityName}SqlProvider.class, method = "batchInserts")
- int batchInserts(@Param("inserts") List<Map<String, Object>> inserts);
- @Override
- @InsertProvider(type = {EntityName}SqlProvider.class, method = "insertOrUpdate")
- int insertOrUpdate(@Param("inserts") Map<String, Object> inserts
- , @Param("uniques") List<Object> uniques
- , @Param("updates") List<Object> updates);
-
- // TODO: 根据业务需求扩展 Mapper 方法
- }
- ```
- #### 2.4 DBService 接口
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/dbdao/services/intef/{EntityName}DBService.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.dbdao.services.intef;
- import com.shkpr.service.alamdmaordertask.dbdao.BaseDBFuncTemplate;
- import com.shkpr.service.alamdmaordertask.dbdao.mapper.{EntityName}Mapper;
- public abstract class {EntityName}DBService extends BaseDBFuncTemplate<{EntityName}Mapper> {
- // TODO: 根据业务需求扩展接口方法
- }
- ```
- #### 2.5 DBServiceImpl 实现类
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/dbdao/services/{EntityName}DBServiceImpl.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.dbdao.services;
- import com.shkpr.service.alamdmaordertask.dbdao.mapper.{EntityName}Mapper;
- import com.shkpr.service.alamdmaordertask.dbdao.services.intef.{EntityName}DBService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.annotation.PostConstruct;
- @Service
- public class {EntityName}DBServiceImpl extends {EntityName}DBService {
- private String mStrClassName = "";
- private String mBusinessType = "";
- private String logTag = "";
- public {EntityName}DBServiceImpl() {
- mStrClassName = this.getClass().getSimpleName();
- mBusinessType = "";
- logTag = "{EntityName}";
- }
- @SuppressWarnings("all")
- @Autowired
- {EntityName}Mapper {entityName}Mapper;
- @PostConstruct
- public void postConstruct(){
- init({entityName}Mapper, mBusinessType, logTag);
- }
- // TODO: 根据业务需求扩展接口方法
- }
- ```
- #### 2.6 BizFilter 过滤器
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/controllerfilter/third/ThirdJWT{EntityName}BizFilter.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.controllerfilter.third;
- import com.shkpr.service.alamdmaordertask.controllercheck.ThirdCommTaskControllerCheck;
- import com.shkpr.service.alamdmaordertask.controllerfilter.JWTAuthenticationFilter;
- import org.springframework.security.authentication.AuthenticationManager;
- import org.springframework.security.web.util.matcher.RequestMatcher;
- import javax.servlet.FilterChain;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Map;
- public class ThirdJWT{EntityName}BizFilter extends JWTAuthenticationFilter {
- private RequestMatcher mRequestMatcher = null;
- private ThirdCommTaskControllerCheck mControllerCheck = null;
- private static final Map<String, String> msMapURI2Method;
- static {
- msMapURI2Method = new HashMap<String, String>();
- // TODO: 配置 API 路由映射,例如:
- // msMapURI2Method.put(String.format("%s/%s", ApiURI.URI_XXX_H, ApiURI.URI_XXX_LIST), "POST");
- }
- public ThirdJWT{EntityName}BizFilter(AuthenticationManager authenticationManager) {
- super(authenticationManager);
- this.mStrThisSampleName = this.getClass().getSimpleName();
- this.mControllerCheck = new ThirdCommTaskControllerCheck(msMapURI2Method);
- setControllerCheck(this.mControllerCheck);
- }
- public ThirdJWT{EntityName}BizFilter(String url, AuthenticationManager authenticationManager) {
- super(url, authenticationManager);
- this.mStrThisSampleName = this.getClass().getSimpleName();
- this.mControllerCheck = new ThirdCommTaskControllerCheck(msMapURI2Method);
- setControllerCheck(this.mControllerCheck);
- }
- @Override
- public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
- super.doFilterInternal(request, response, chain);
- }
- }
- ```
- #### 2.7 BizHelper 业务处理类
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/busihandler/{EntityName}BizHelper.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.busihandler;
- import com.shkpr.service.alamdmaordertask.dbdao.DBMgrProxy;
- import com.shkpr.service.alamdmaordertask.dbdao.services.intef.{EntityName}DBService;
- import java.util.*;
- public class {EntityName}BizHelper {
- private final static String mStrClassName = "{EntityName}BizHelper";
- private static {EntityName}DBService getThisDBService(){
- return DBMgrProxy.getInstance().applyXXXApi({EntityName}DBService.class);
- }
- // TODO: 根据业务需求实现业务方法
- }
- ```
- #### 2.8 Controller 控制器
- **文件路径**: `src/main/java/com/shkpr/service/alamdmaordertask/controllerapi/Third{EntityName}Controller.java`
- **模板**:
- ```java
- package com.shkpr.service.alamdmaordertask.controllerapi;
- import com.shkpr.service.alamdmaordertask.constants.ApiURI;
- import org.springframework.util.StringUtils;
- import org.springframework.web.bind.annotation.*;
- import java.util.concurrent.atomic.AtomicInteger;
- @RequestMapping(ApiURI.URI_XXX_H) // TODO: 替换为实际的 API 路径
- @RestController
- public class Third{EntityName}Controller extends ThirdBaseController {
- final static String MSG_SUCCESS = "success.";
- final static String MSG_FAILED = "failed.";
- final static String mBusinessType = "";
- final static String mLogTag = "{EntityName}";
- private String mStrClassName = "";
- private AtomicInteger mSeqReq = null;
- public Third{EntityName}Controller() {
- super(mBusinessType, mLogTag);
- mStrClassName = this.getClass().getSimpleName();
- }
- // TODO: 实现具体的 API 处理方法
- }
- ```
- ### 第三步:输出总结
- 创建完成后,输出以下总结信息:
- ```
- ✓ CRUD 全链路脚手架已生成!
- 已创建以下文件:
- 1. Table 接口: {EntityName}Table.java
- 2. SqlProvider: {EntityName}SqlProvider.java
- 3. Mapper: {EntityName}Mapper.java
- 4. DBService 接口: {EntityName}DBService.java
- 5. DBServiceImpl: {EntityName}DBServiceImpl.java
- 6. BizFilter: ThirdJWT{EntityName}BizFilter.java
- 7. BizHelper: {EntityName}BizHelper.java
- 8. Controller: Third{EntityName}Controller.java
- 请注意:
- - 文件中的 TODO 项需要您自行补充完整
- ```
- ## 注意事项
- 1. **始终先询问对象名称**,不要在用户未提供名称时自行推断
- 2. **保持代码风格与现有项目一致**,使用项目已有的包结构和命名规范
- 3. **扩展方法均可留空**,框架代码只保证编译通过
- 4. **Mapper 中不使用实体对象**,只使用 `Map<String, Object>` 或 `List<Map<String, Object>>` 进行数据交互(遵循数据库持久层规范)
|