絞盡腦汁,CodeMaker生成Dao、Service、Controller

文章目錄

1 前提配置:

1.1 通過Generate.POJOs.groovy生成實體類

Generate.POJOs.groovy生成實體類

2.2 下載CodeMaker插件,構建模板

Dao

2 模板

Dao

package $class.PackageName;

import com.bocloud.bsm.cmdb.entity.${class.className};
import com.bocloud.common.model.Param;
import com.bocloud.database.core.intf.GenericDao;

import java.util.List;
import java.util.Map;

/**
 * ${class.className}Dao
 *
 * @author jiaohongtao
 * @version v1.0
 * @since $TIME
 */
public interface ${class.className}Dao extends GenericDao<${class.className}, Long> {

    /**
     * 翻頁查詢
     *
     * @param page   第幾頁
     * @param rows   第幾行
     * @param params params
     * @param sorter 簡要內容
     */
    List<${class.className}> list(int page, int rows, List<Param> params, Map<String, String> sorter) throws Exception;

    /**
     * 查詢所有
     */
    List<${class.className}> listAll() throws Exception;

    /**
     * 根據id查詢
     *
     * @param id id
     */
    ${class.className} query(Long id) throws Exception;

    /**
     * 根據id刪除
     *
     * @param id     id
     * @param userId 操作人
     */
    boolean delete(Long id, Long userId) throws Exception;

    /**
     * 查詢總數
     *
     * @param params params
     */
    int count(List<Param> params) throws Exception;
}

DaoImpl

package $class.PackageName;

import com.bocloud.database.core.intf.impl.JdbcGenericDao;
import com.bocloud.bsm.cmdb.entity.${class.className};
import com.bocloud.bsm.cmdb.dao.intf.${class.className}Dao;

import com.bocloud.common.model.Param;
import com.bocloud.common.utils.Common;
import com.bocloud.common.utils.MapTools;
import com.bocloud.database.core.intf.impl.JdbcGenericDao;
import com.bocloud.database.utils.SqlHelper;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * ${class.className}Dao實現
 *
 * @author jiaohongtao
 * @version v1.0
 * @since $TIME
 */
@Repository
public class ${class.className}DaoImpl extends JdbcGenericDao<${class.className}, Long> implements ${class.className}Dao {

    @Override
    public List<${class.className}> list(int page, int rows, List<Param> params, Map<String, String> sorter) throws Exception {
        String sql = "select a.* from ${class.className} a where a.is_deleted = 0";
        sql = SqlHelper.buildRawSql(sql, page, rows, params, sorter, "a");
        Map<String, Object> param = SqlHelper.getParam(params);
        return this.list(${class.className}.class, sql, param);
    }

    @Override
    public List<${class.className}> listAll() throws Exception {
        String sql = "select * from ${class.className} where is_deleted = 0";
        return this.list(${class.className}.class, sql);
    }

    @Override
    public ${class.className} query(Long id) throws Exception {
        String sql = "select * from ${class.className} where is_deleted = 0 and id = :id";
        Map<String, Object> params = MapTools.simpleMap(Common.ID, id);
        List<${class.className}> list = this.list(${class.className}.class, sql, params);
        return list.isEmpty() ? null : list.get(0);
    }

    @Override
    public boolean delete(Long id, Long userId) throws Exception {
        String sql = "update ${class.className} set is_deleted = 1, gmt_modify = :gmtModify, mender_id = :menderId where id = :id";
        Map<String, Object> params = MapTools.simpleMap(Common.ID, id);
        params.put("gmtModify", new Date());
        params.put(Common.MENDER_ID, userId);
        return this.execute(sql, params) > 0;
    }

    @Override
    public int count(List<Param> params) throws Exception {
        String sql = "select count(*) from ${class.className} a where a.is_deleted = 0";
        sql = SqlHelper.buildRawSql(sql, params, null, "a");
        Map<String, Object> param = SqlHelper.getParam(params);
        return this.countQuery(sql, param).intValue();
    }
}

Service

package $class.PackageName;

import com.bocloud.bsm.cmdb.entity.${class.className};
import com.bocloud.common.model.Param;
import com.bocloud.common.model.BocloudResult;

import java.util.List;
import java.util.Map;

/**
 * ${class.className}Service
 *
 * @author jiaohongtao
 * @version v1.0
 * @since $TIME
 */
public interface ${class.className}Service {

    /**
     * 翻頁查詢所有
     *
     * @param page   第幾頁
     * @param rows   第幾行
     * @param params params
     * @param sorter 分類
     * @param simple 是否只取簡要
     */
    BocloudResult list(int page, int rows, List<Param> params, Map<String, String> sorter, Boolean simple) throws Exception;

    /**
     * 查詢所有
     */
    BocloudResult listAll() throws Exception;

    /**
     * 添加
     *
     * @param entity 修改對象
     * @param userId 操作者
     */
    BocloudResult create(${class.className} entity, Long userId) throws Exception;

    /**
     * 修改
     *
     * @param id  id
     * @param entity  修改對象
     * @param userId 修改人
     */
    BocloudResult modify(Long id, ${class.className} entity, Long userId) throws Exception;

    /**
     * 刪除
     *
     * @param id     分組id
     * @param userId 刪除人
     */
    BocloudResult remove(Long id, Long userId) throws Exception;

    /**
     * 詳情
     *
     * @param id 分組id
     */
    BocloudResult detail(Long id) throws Exception;
}

ServiceImpl

package $class.PackageName;

import com.bocloud.bsm.cmdb.dao.common.BeanCopyUtil;
import com.bocloud.bsm.cmdb.dao.intf.${class.className}Dao;
import com.bocloud.bsm.cmdb.entity.${class.className};
import com.bocloud.bsm.cmdb.service.intf.${class.className}Service;
import com.bocloud.common.model.BocloudResult;
import com.bocloud.common.model.GridBean;
import com.bocloud.common.model.Param;
import com.bocloud.common.utils.GridHelper;
import com.bocloud.service.lock.BocloudLock;
import com.bocloud.service.lock.LockFactory;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * ${class.className}Service實現
 *
 * @author jiaohongtao
 * @version v1.0
 * @since $TIME
 */
@Service
public class ${class.className}ServiceImpl implements ${class.className}Service {

    private static final Logger logger = LoggerFactory.getLogger(${class.className}ServiceImpl.class);
    
    @Autowired
    private LockFactory lockFactory;
    @Autowired
    private ${class.className}Dao originDao;

    @Override
    public BocloudResult list(int page, int rows, List<Param> params, Map<String, String> sorter, Boolean simple) throws Exception {
        params = null == params ? new ArrayList<>() : params;
        sorter = null == sorter ? Maps.newHashMap() : sorter;
        int total = originDao.count(params);
        List<${class.className}> list = originDao.list(page, rows, params, sorter);
        GridBean gridBean = GridHelper.getBean(page, rows, total, list);
        return new BocloudResult(true, gridBean, "查詢成功");
    }
    
    @Override
    public BocloudResult listAll() throws Exception {
        return new BocloudResult(true, originDao.listAll(), "查詢成功");
    }
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public BocloudResult create(${class.className} entity, Long userId) throws Exception {
        entity.setCreaterId(userId);
        entity.setMenderId(userId);
        originDao.save(entity);
        return new BocloudResult(true, "添加成功");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public BocloudResult modify(Long id, ${class.className} entity, Long userId) throws Exception {
        String path = ${class.className}.class.getSimpleName() + "_" + id;
        BocloudLock lock = lockFactory.getBLock(path);
        Assert.isTrue(lock.acquire(10, TimeUnit.SECONDS), "獲取分佈式鎖失敗!");
        try {
	        ${class.className} queryEntity = originDao.query(id);
	        if (null == queryEntity) {
	            logger.warn("${class.className} data not exist");
	            return BocloudResult.FAILED("數據不存在!");
	        }
	        queryEntity.setMenderId(userId);
	        BeanCopyUtil.copyProperties(entity, queryEntity);
	        originDao.update(queryEntity);
	        return new BocloudResult(true, "修改成功");
        } catch (Exception e) {
            logger.error("修改失敗:{}", e.getMessage());
            return BocloudResult.FAILED("修改失敗");
        } finally {
            lock.release();
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public BocloudResult remove(Long id, Long userId) throws Exception {
        String path = ${class.className}.class.getSimpleName() + "_" + id;
        BocloudLock lock = lockFactory.getBLock(path);
        Assert.isTrue(lock.acquire(10, TimeUnit.SECONDS), "獲取分佈式鎖失敗!");
        try {
	        ${class.className} entity = originDao.query(id);
	        if (null == entity) {
	            return BocloudResult.FAILED("數據不存在");
	        }
	
	        originDao.delete(id, userId);
	        return new BocloudResult(true, "刪除成功");
        } catch (Exception e) {
            logger.error("移除失敗:", e);
            return BocloudResult.FAILED("刪除失敗");
        } finally {
            lock.release();
        }
    }

    @Override
    public BocloudResult detail(Long id) throws Exception {
        ${class.className} entity = originDao.query(id);
        return entity == null ? BocloudResult.FAILED("數據不存在") : new BocloudResult(true, entity, "獲取詳情成功");
    }
}

Controller

package $class.PackageName;

import com.alibaba.fastjson.JSONObject;
import com.bocloud.bsm.cmdb.entity.${class.className};
import com.bocloud.bsm.cmdb.service.intf.${class.className}Service;
import com.bocloud.common.annotations.Log;
import com.bocloud.common.enums.BoCloudService;
import com.bocloud.common.model.BocloudResult;
import com.bocloud.common.model.Param;
import com.bocloud.common.model.RequestUser;
import com.bocloud.common.utils.Common;
import com.bocloud.common.utils.JSONTools;
import com.bocloud.common.utils.ResultTools;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * ${class.className}Controller
 *
 * @author jiaohongtao
 * @version 1.0
 * @since $TIME
 */
@RestController
@RequestMapping("${class.className}")
public class ${class.className}Controller {

    private static final Logger logger = LoggerFactory.getLogger(${class.className}Controller.class);

    @Autowired
    private ${class.className}Service originService;

    /**
     * 翻頁查詢所有
     *
     * @param page   第幾頁
     * @param rows   第幾行
     * @param params params
     * @param sorter 分類
     * @param simple 是否只取簡要
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "列表查詢")
    @RequestMapping(value = "/list", method = {RequestMethod.POST})
    public BocloudResult list(@RequestParam(value = Common.PAGE, required = false) Integer page,
                              @RequestParam(value = Common.ROWS, required = false) Integer rows,
                              @RequestParam(value = Common.PARAMS, required = false) String params,
                              @RequestParam(value = Common.SORTER, required = false) String sorter,
                              @RequestParam(value = Common.SIMPLE, required = false) Boolean simple) {
        try {
            @SuppressWarnings("unchecked")
            Map<String, String> sorterMap = JSONObject.parseObject(sorter, HashMap.class);
            return originService.list(page, rows, JSONObject.parseArray(params, Param.class), sorterMap, simple);
        } catch (Exception e) {
            logger.error("${class.className} list fail:{}", e.getMessage());
            return BocloudResult.FAILED("查詢失敗");
        }
    }
    
    /**
     * 查詢所有
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "查詢所有")
    @RequestMapping(value = "/listAll", method = { RequestMethod.POST })
    public BocloudResult listAll() {
        try {
            return originService.listAll();
        } catch (Exception e) {
            logger.error("${class.className} listAll fail:{}", e.getMessage());
            return BocloudResult.FAILED("查詢失敗");
        }
    }

    /**
     * 創建
     *
     * @param params 屬性信息的json字符串,數據轉換髮生異常時,對外拋出400異常【Bad Request】
     * @param user   操作者
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "創建")
    @RequestMapping(value = "/create", method = {RequestMethod.POST})
    public BocloudResult create(@RequestParam(value = Common.PARAMS) String params,
                                @Value(Common.REQ_USER) RequestUser user) {
        try {
            JSONObject object = JSONTools.isJSONObj(params);
            if (null == object) {
            return ResultTools.formatErrResult();
            }
            ${class.className} entity = JSONObject.parseObject(object.toJSONString(), ${class.className}.class);
            return originService.create(entity, user.getId());
        } catch (Exception e) {
            logger.error("${class.className} create fail:{}", e.getMessage());
            return BocloudResult.FAILED("創建失敗");
        }
    }

    /**
     * 修改
     *
     * @param params 屬性信息的json字符串,數據轉換髮生異常時,對外拋出400異常【Bad Request】
     * @param id     id
     * @param user   操作者
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "修改")
    @RequestMapping(value = "/{id}/modify", method = {RequestMethod.POST})
    public BocloudResult modify(@RequestParam(value = Common.PARAMS) String params,
                                @PathVariable(value = Common.ID) Long id, @Value(Common.REQ_USER) RequestUser user) {
        try {
            JSONObject object = JSONTools.isJSONObj(params);
            if (null == object) {
                return ResultTools.formatErrResult();
            }
            ${class.className} entity = JSONObject.parseObject(object.toJSONString(), ${class.className}.class);
            return originService.modify(id, entity, user.getId());
        } catch (Exception e) {
            logger.error("${class.className} modify fail:{}", e.getMessage());
            return BocloudResult.FAILED("修改失敗");
        }
    }

    /**
     * 移除
     *
     * @param id   id
     * @param user 操作者
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "移除")
    @RequestMapping(value = "/{id}/remove", method = {RequestMethod.DELETE})
    public BocloudResult remove(@PathVariable(Common.ID) Long id, @Value(Common.REQ_USER) RequestUser user) {
        try {
            return originService.remove(id, user.getId());
        } catch (Exception e) {
            logger.error("${class.className} remove fail:{}", e.getMessage());
            return BocloudResult.FAILED("移除失敗");
        }
    }

    /**
     * 詳情
     *
     * @param id id
     */
    @Log(module = BoCloudService.Cmdb, target = "${class.className}", operation = "詳情")
    @RequestMapping(value = "/{id}/detail", method = {RequestMethod.GET})
    public BocloudResult detail(@PathVariable(Common.ID) Long id) {
        try {
            return originService.detail(id);
        } catch (Exception e) {
            logger.error("${class.className} detail fail:{}", e.getMessage());
            return BocloudResult.FAILED("查詢失敗");
        }
    }
}

CMCController(我自己用的,做個記錄)

package com.bocloud.cmc.controller.cmdb.bsm;

import com.bocloud.cmc.controller.BasicController;
import com.bocloud.cmc.serviceLoader.BocloudServiceLoader;
import com.bocloud.common.annotations.Log;
import com.bocloud.common.enums.BoCloudService;
import com.bocloud.common.model.BocloudResult;
import com.bocloud.common.model.Pager;
import com.bocloud.common.utils.Common;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * ${class.className}控制層
 *
 * @author jiaohongtao
 * @version 1.0
 * @since $TIME
 */
@RestController
@RequestMapping("/${class.className}")
@Api(tags = "BSM-CMDB ${class.className}")
public class ${class.className}Controller {

    private final String BASE_SERVICE = "${class.className}";
    private static final BoCloudService SERVICE = BocloudServiceLoader.bsmCmdbService;
    @Autowired
    private BasicController basicController;

    @ApiOperation(value = "${class.className}新增", response = BocloudResult.class, httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "新增")
    @RequestMapping(value = "/create", method = {RequestMethod.POST})
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "params", value = "{\"name\": \"\",\"code\": \"\"}")
    })
    public BocloudResult create(@RequestParam(value = Common.PARAMS, required = false) String params,
                                HttpServletRequest request) {
        return basicController.create(SERVICE, BASE_SERVICE, params, request, ${class.className}Controller.class);
    }
    
    @ApiOperation(value = "${class.className}列表查詢", response = BocloudResult.class, httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "列表查詢")
    @RequestMapping(value = "/list", method = {RequestMethod.POST})
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "params", value = "[{\"param\":{\"groupId\":2},\"sign\":\"EQ\"}]"),
            @ApiImplicitParam(name = "sorter", value = "{\"gmtCreate\":\"1\"}")
    })
    public BocloudResult list(
            @RequestParam(value = Common.PAGE, required = false, defaultValue = Common.ONE) Integer page,
            @RequestParam(value = Common.ROWS, required = false, defaultValue = Common.TEN) Integer rows,
            @RequestParam(value = Common.PARAMS, required = false) String params,
            @RequestParam(value = Common.SORTER, required = false) String sorter,
            @RequestParam(value = Common.SIMPLE, required = false) boolean simple, HttpServletRequest request) {
        return basicController.list(SERVICE, BASE_SERVICE, new Pager(page, rows, params, sorter), simple, request,
                ${class.className}Controller.class);
    }

    @ApiOperation(value = "${class.className}查詢所有", response = BocloudResult.class, httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "查詢所有")
    @RequestMapping(value = "/listAll", method = {RequestMethod.POST})
    public BocloudResult tree(HttpServletRequest request) {
        return basicController.operate(SERVICE, BASE_SERVICE + "/listAll", "{}", request, ${class.className}Controller.class);
    }

    @ApiOperation(value = "${class.className}修改", response = BocloudResult.class, httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "修改")
    @RequestMapping(value = "/modify", method = {RequestMethod.POST})
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "params", value = "{\"id\": 1,\"name\": \"\",\"code\": \"\"}")
    })
    public BocloudResult modify(@RequestParam(value = Common.PARAMS, required = false) String params,
                                HttpServletRequest request) {
        return basicController.modify(SERVICE, BASE_SERVICE, params, request, ${class.className}Controller.class);
    }

    @ApiOperation(value = "${class.className}刪除", response = BocloudResult.class, httpMethod = "DELETE", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "刪除")
    @RequestMapping(value = "/remove", method = {RequestMethod.DELETE})
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "params", value = "{\"id\": 1}")
    })
    public BocloudResult remove(@RequestParam(value = Common.PARAMS, required = false) String params,
                                HttpServletRequest request) {
        return basicController.remove(SERVICE, BASE_SERVICE, params, request, ${class.className}Controller.class);
    }

    @ApiOperation(value = "${class.className}詳情", response = BocloudResult.class, httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE)
    @Log(module = BoCloudService.Cmc, target = "${class.className}", operation = "詳情")
    @RequestMapping(value = "/detail", method = {RequestMethod.GET})
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "params", value = "{\"id\": 1}")
    })
    public BocloudResult detail(@RequestParam(value = Common.PARAMS, required = false) String params,
                                HttpServletRequest request) {
        return basicController.detail(SERVICE, BASE_SERVICE, params, request, ${class.className}Controller.class);
    }
}

3 通過模板生成操作類:

在需要構建的類名上右鍵(或者快捷鍵alt+insert),點擊Generate:
第一步
點擊自定義中需要生成的操作類:
第二步
選擇生成的目錄位置(可隨意選擇,最後都需要調整類的包名和路徑),點擊OK:
第三步
生成成功
第四步

4 答疑區:

  • 4.1 BeanCopyUtil類

  • 4.2 其他請寫在評論區

參考文獻:
梁鍾霖-idea快速生成entity、dao、service
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章