還在寫CURD?試試這款基於mybatis-plus的springboot程式碼生成器

黃鈺朝發表於2020-05-02

⚡Introduction

這是一個基於mybatis-plus官方的AutoGenerator程式碼生成器+定製程式碼模板的springboot程式碼生成器

使用這個生成器你可以在1分鐘之內生成資料庫表對應的實體類,以及Mapper,Service,Controller層的基本CURD程式碼,並可以立即執行測試介面。

如果你不瞭解什麼是mybatis-plus,請參考官方文件

本程式碼生成器具有以下優點:

  • 只需三步,即可開始測試CURD介面

  • 生成的程式碼風格良好,註釋詳細(遵循阿里巴巴開發規範)

  • 帶有程式執行日誌列印和錯誤日誌列印

✔️Release

立即前往:釋出地址

⭐️Features

  • 實現controller restful風格CURD介面
  • service層CURD對IService的方法再次封裝,方便新增業務邏輯
  • serviceImpl中方法實現執行日誌列印
  • mapper模板在官方模板基礎上加入@mapper註解
  • 各模板方法新增Javadoc註釋
  • 實現分頁查詢,關鍵詞模糊查詢(需自定義欄位)

?Quick Start

動畫演示

使用步驟:

  • 修改application.properties配置檔案,設定資料庫資訊
#DataSource Config
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/flower?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=
  • 執行CodeGenerator類,輸入Author,輸入資料庫表名
  • 執行SpringbootMybatisPlusGeneratorApplication,測試介面

注意:資料庫表必須符合以下規範

每張表的主鍵命名為 表名_id 如: user_id

?Examples

1.Controller模板程式碼示例

package cn.hellochaos.generator.controller;


import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import cn.hellochaos.generator.entity.dto.ResultBean;
import cn.hellochaos.generator.service.UserService;
import cn.hellochaos.generator.entity.User;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 使用者 前端控制器
 * </p>
 *
 * @author chaos
 * @since 2020-05-02
 * @version v1.0
 */
@RestController
@RequestMapping("/generator/api/v1/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
    * 查詢分頁資料
    */
    @RequestMapping(method = RequestMethod.GET)
    public ResultBean<?> listByPage(@RequestParam(name = "page", defaultValue = "1") int page,
                                    @RequestParam(name = "pageSize", defaultValue = "10") int pageSize,
                                    @RequestParam String keyword) {
        return new ResultBean<>(userService.listUsersByPage(page, pageSize,keyword));
    }


    /**
    * 根據id查詢
    */
    @RequestMapping(method = RequestMethod.GET, value = "/{id}")
    public ResultBean<?> getById(@PathVariable("id") Integer id) {
        return new ResultBean<>(userService.getUserById(id));
    }

    /**
    * 新增
    */
    @RequestMapping(method = RequestMethod.POST)
    public ResultBean<?> insert(@RequestBody User user) {
        return new ResultBean<>(userService.insertUser(user));
    }

    /**
    * 刪除
    */
    @RequestMapping(method = RequestMethod.DELETE, value = "/{id}")
    public ResultBean<?> deleteById(@PathVariable("id") Integer id) {
        return new ResultBean<>(userService.deleteUserById(id));
    }

    /**
    * 修改
    */
    @RequestMapping(method = RequestMethod.PUT)
    public ResultBean<?> updateById(@RequestBody User user) {
        return new ResultBean<>(userService.updateUser(user));
    }
}

2.Service模板程式碼示例

package cn.hellochaos.generator.service;

import cn.hellochaos.generator.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

/**
* <p>
* 使用者 服務類
* </p>
*
* @author chaos
* @since 2020-05-02
*/
public interface UserService {

    /**
    * 分頁查詢User
    *
    * @param page     當前頁數
    * @param pageSize 頁的大小
    * @param keyword  搜尋關鍵詞
    * @return 返回mybatis-plus的Page物件,其中records欄位為符合條件的查詢結果
    * @author chaos
    * @since 2020-05-02
    */
    Page<User> listUsersByPage(int page, int pageSize, String keyword);

    /**
    * 根據id查詢User
    *
    * @param id 需要查詢的User的id
    * @return 返回對應id的User物件
    * @author chaos
    * @since 2020-05-02
    */
    User getUserById(int id);

    /**
    * 插入User
    *
    * @param user 需要插入的User物件
    * @return 返回插入成功之後User物件的id
    * @author chaos
    * @since 2020-05-02
    */
    int insertUser(User user);

    /**
    * 根據id刪除User
    *
    * @param id 需要刪除的User物件的id
    * @return 返回被刪除的User物件的id
    * @author chaos
    * @since 2020-05-02
    */
    int deleteUserById(int id);

    /**
    * 根據id更新User
    *
    * @param user 需要更新的User物件
    * @return 返回被更新的User物件的id
    * @author chaos
    * @since 2020-05-02
    */
    int updateUser(User user);

}

3.ServiceImpl模板程式碼示例

package cn.hellochaos.generator.service.impl;

import cn.hellochaos.generator.entity.User;
import cn.hellochaos.generator.mapper.UserMapper;
import cn.hellochaos.generator.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import cn.hellochaos.generator.exception.bizException.BizException;

/**
* <p>
* 使用者 服務實現類
* </p>
*
* @author chaos
* @since 2020-05-02
*/
@Slf4j
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Override
    public Page<User> listUsersByPage(int page, int pageSize, String keyword) {
        log.info("正在執行分頁查詢user: page = {} pageSize = {} keyword = {}",page,pageSize,keyword);
        QueryWrapper<User> queryWrapper =  new QueryWrapper<User>().like("", keyword);
        //TODO 這裡需要自定義用於匹配的欄位,並把wrapper傳入下面的page方法
        Page<User> result = super.page(new Page<>(page, pageSize));
        log.info("分頁查詢user完畢: 結果數 = {} ",result.getRecords().size());
        return result;
    }

    @Override
    public User getUserById(int id) {
        log.info("正在查詢user中id為{}的資料",id);
        User user = super.getById(id);
        log.info("查詢id為{}的user{}",id,(null == user?"無結果":"成功"));
        return user;
    }

    @Override
    public int insertUser(User user) {
        log.info("正在插入user");
        if (super.save(user)) {
            log.info("插入user成功,id為{}",user.getUserId());
            return user.getUserId();
        } else {
            log.error("插入user失敗");
            throw new BizException("新增失敗");
        }
    }

    @Override
    public int deleteUserById(int id) {
        log.info("正在刪除id為{}的user",id);
        if (super.removeById(id)) {
            log.info("刪除id為{}的user成功",id);
            return id;
        } else {
            log.error("刪除id為{}的user失敗",id);
            throw new BizException("刪除失敗[id=" + id + "]");
        }
    }

    @Override
    public int updateUser(User user) {
        log.info("正在更新id為{}的user",user.getUserId());
        if (super.updateById(user)) {
            log.info("更新d為{}的user成功",user.getUserId());
            return user.getUserId();
        } else {
            log.error("更新id為{}的user失敗",user.getUserId());
            throw new BizException("更新失敗[id=" + user.getUserId() + "]");
        }
    }

}

相關文章