还在写curd?试试这款基于mybatis-plus的springboot代码生成器(代码片段)

YuchaoHuang的博客 YuchaoHuang的博客     2022-12-25     582

关键词:

?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() + "]");
        
    


还在用swagger?试试这款神器,功能真心强大!

介绍smart-doc是一款同时支持JAVARESTAPI和ApacheDubboRPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型定义推导的理念,完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。你只需要按照j... 查看详情

还在使用swagger吗,快来试试这款强大的在线api工具

将开源小分队设为星标 精品文章第一时间读大家好,我是可爱又机灵的开源小妹。今天给大家分享一个非常好用的在线文档工具:Knife4j背景现在分工越来越明确,做项目也都是前后端分离,这样就和前端沟通越... 查看详情

还在随大流用postman?快来试试apipost吧

🎉前言最近在写自己的小Demo,是一个前后端分离的分布式项目,在开发阶段难免会遇到需要测试接口的时候,我用的是比较流行的PostMan接口测试工具,但是使用下来,发现这个工具测试一些学习的用例和... 查看详情

还在写if/elseif...?

在日常开发中,我们经常会写出很多if elseif...很多看起来又长又糟糕的代码,那么策略模式你该去get了。点我查看哦! 查看详情

扔掉swagger,试试这款功能强大,零注解侵入的api接口文档生成工具!

点击关注公众号,实用技术文章及时了解介绍smart-doc是一款同时支持JAVARESTAPI和ApacheDubboRPC接口文档生成的工具,smart-doc在业内率先提出基于JAVA泛型定义推导的理念,完全基于接口源码来分析生成接口文档,不采... 查看详情

还在写sql做sap二开?通过rfc调用netweaver,让hana数据库操作更可靠

相比于从零开始构建全套信息化系统,基于成熟的ERP等行业软件做二次开发是更多中大型企业应对个性化软件需求的首选方案。如何在二开模块中,可靠地对成品软件的数据库进行读写操作,以满足单据自动创建、元... 查看详情

如果40岁了还在写代码,是一种幸福,还是一种悲哀?

今天突然想到一个问题:如果40岁了还在写代码,是怎样的状态?然后搜了一下,果然已经有人想到了,我们先来看看知乎的神人回答。曾经有网友在知乎提问:“如果40岁了还在写代码,是一种幸福,还是一种悲哀?请考虑国... 查看详情

基于mybatisutil工具类,完成curd操作(代码片段)

packageloaderman;importjava.io.IOException;importjava.io.Reader;importjava.sql.Connection;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.sessio 查看详情

边玩游戏,边学编程?试试这款开源游戏

以下内容选自「码农周刊VIP会员」圈子,每日更新,精彩不断。扫描下方二维码,即刻加入!一个免费、开源的多人在线RPG游戏,通过这个游戏,你可以学到现实世界里的编程技能。 查看详情

牛!helloworld发明人80岁还在写代码

作者| 新程序员编辑部出品|CSDN(ID:CSDNnews)年龄从来不是界限,除非自己拿过来为难自己。今年80岁的 UNIX核心开发者之一、UNIX命名者BrianW.Kernighan,在夏季很多人都在开启学术休假之际,找到了一些空... 查看详情

80岁还在写代码!helloworld发明人登上github热榜

...为80岁的原作者更新了。是的你没听错,有人都80岁了还在改代码!这位大神,就是加拿大计算机科学家——布莱恩·柯林汉 (BrianKernighan)。与比尔盖茨、Jav 查看详情

快50岁了,怎么还在写代码?

今年夏天这个暑假,姐姐家的小朋友由于暑期实习,借住在我家。小朋友是一位零零后,今年大三升大四,马上就面临着考公、考研、找工作等等人生重要的节点。实习工作不算太忙,晚上吃完饭后还能坐下... 查看详情

快40岁了还在写增删改查,迷茫。。

大家好,我是栈长。最近栈长的《SpringCloudAlibaba微服务实战课》报名了一位老程序员:和栈长一样,他也是 80 后,更明确点说,他还是85 年之前的,具体多少就不透露了,这也是我从他的微信ID 中&#... 查看详情

快40岁了还在写增删改查,迷茫。。

大家好,我是栈长。最近栈长的《SpringCloudAlibaba微服务实战课》报名了一位老程序员:和栈长一样,他也是 80 后,更明确点说,他还是85 年之前的,具体多少就不透露了,这也是我从他的微信ID 中&#... 查看详情

电商流量分析怎么做?试试这款数据工具dataleap!

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群作为成熟的电商模式,货架场景可以让商家以更低的门槛入驻,让消费者完成更高销量的购买和复购。在这一场景下,运营人员每天... 查看详情

unity3d小小白之gui控件(buttontextfieldslider)(还在写)

一、Button控件  点击发生事件,当有按钮单击事件发生时,该函数返回1,否则为0  也可以直接写函数,然后把脚本拖到canvas里,然后在button里添加,选择监听函数。二、RepeatButton控件  Button点击一次,相应一次,这个控... 查看详情

2021,你还在写“赤裸裸”的api吗?(代码片段)

前言新的项目要开始了,由于项目中涉及到和第三方厂商的接口对接,所有对接口的安全性有要求,下来我们看看如何写好一个规范的接口如何保证接口传输中数据安全保证数据安全,大家首先能想到的就是对内... 查看详情

2021,你还在写“赤裸裸”的api吗?(代码片段)

前言新的项目要开始了,由于项目中涉及到和第三方厂商的接口对接,所有对接口的安全性有要求,下来我们看看如何写好一个规范的接口如何保证接口传输中数据安全保证数据安全,大家首先能想到的就是对内... 查看详情