還在寫CURD?試試這款基於mybatis-plus的springboot代碼生成器
- 2020 年 5 月 2 日
- 筆記
- mybatis-plus, 資源工具
目錄
⚡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() + "]");
}
}
}