随笔 - 88  文章 - 0  评论 - 12  阅读 - 84003

从零开始的SpringBoot项目 ( 六 ) 整合 MybatisPlus 实现代码自动生成

1.添加依赖

复制代码
 1  <!-- MySQL数据库 -->
 2         <dependency>
 3             <groupId>mysql</groupId>
 4             <artifactId>mysql-connector-java</artifactId>
 5             <version>5.1.38</version>
 6         </dependency>
 7         <!-- mybatis -->
 8         <dependency>
 9             <groupId>org.mybatis.spring.boot</groupId>
10             <artifactId>mybatis-spring-boot-starter</artifactId>
11             <version>1.3.2</version>
12         </dependency>
13         <!-- mybatis-plus -->
14         <dependency>
15             <groupId>com.baomidou</groupId>
16             <artifactId>mybatis-plus</artifactId>
17             <version>2.1.6</version>
18         </dependency>
19         <!-- MyBatis-Plus模板引擎 -->
20         <dependency>
21             <groupId>org.apache.velocity</groupId>
22             <artifactId>velocity-engine-core</artifactId>
23             <version>2.1</version>
24         </dependency>
25         <!--热部署  每次修改代码springboot自动重启服务-->
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-devtools</artifactId>
29             <optional>true</optional>
30         </dependency>
31         <!-- lombok插件 -->
32         <dependency>
33             <groupId>org.projectlombok</groupId>
34             <artifactId>lombok</artifactId>
35         </dependency>
36         <dependency>
37             <groupId>junit</groupId>
38             <artifactId>junit</artifactId>
39         </dependency>
复制代码

2. 自动代码生成器

 

复制代码
  1 package com.my_springboot.generator;
  2 
  3 import com.baomidou.mybatisplus.annotation.IdType;
  4 import com.baomidou.mybatisplus.generator.AutoGenerator;
  5 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
  6 import com.baomidou.mybatisplus.generator.config.GlobalConfig;
  7 import com.baomidou.mybatisplus.generator.config.PackageConfig;
  8 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
  9 import com.baomidou.mybatisplus.generator.config.TemplateConfig;
 10 import com.baomidou.mybatisplus.generator.config.rules.DateType;
 11 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 12 
 13 /**
 14  * 代码生成器
 15  */
 16 public class MpGenerator {
 17 
 18     public static void main(String[] args) {
 19         String tableNames = "sys_user_info";// 通过表名生成相关类,多个用英文逗号隔开
 20         String tablePrefix = "sys_";// 去掉表名前缀
 21         String packageName = "com.my_springboot.user";// 自定义自己的包名,后续的代码生成会在这个包下
 22         String projectPath = "C:\\Users\\86130\\Desktop\\mmp";// 生成文件的输出目录 我一般放在桌面,避免原文件被覆盖
 23         new AutoGenerator()
 24                 .setGlobalConfig(getGlobalConfig(projectPath))  //全局配置
 25                 .setDataSource(getDataSource()) //数据源配置
 26                 .setPackageInfo(getPackageConfig(packageName)) //包配置
 27                 .setStrategy(getStrategyConfig(tableNames, tablePrefix))  //策略配置
 28                 .setTemplate(getTemplateConfig())  //模板配置
 29                 .execute();
 30     }
 31 
 32     /**
 33      * 全局配置
 34      *
 35      * @param projectPath 生成文件的输出目录
 36      */
 37     private static GlobalConfig getGlobalConfig(String projectPath) {
 38         //全局配置
 39         GlobalConfig gc = new GlobalConfig();
 40         gc.setOutputDir(projectPath)// 生成文件的输出目录
 41                 .setAuthor("JiHC")// 作者
 42                 .setOpen(true)// 是否打开输出目录 默认值:true
 43                 .setFileOverride(true)// 是否覆蓋已有文件 默认值:false
 44                 .setSwagger2(true)// 开启 swagger2 模式 默认false
 45                 .setBaseColumnList(true)// 开启 baseColumnList 默认false
 46                 .setBaseResultMap(true)// 开启 BaseResultMap 默认false
 47                 .setIdType(IdType.ASSIGN_UUID)// 主键策略 ASSIGN_UUID:主键生成32位字符串ID
 48                 .setDateType(DateType.ONLY_DATE)// 设置时间类型使用哪个包下的
 49                 .setEntityName("%sDO")// entity 命名方式 默认值:null 例如:%sEntity 生成 UserEntity
 50                 .setMapperName("%sDAO")// dao 命名方式 默认值:null 例如:%sDao 生成 UserDao
 51                 /*.setXmlName("%sMapper")// Mapper xml 命名方式   默认值:null 例如:%sDao 生成 UserDao.xml
 52                 .setServiceName("%sService")// service 命名方式   默认值:null 例如:%sBusiness 生成 UserBusiness
 53                 .setServiceImplName("%sServiceImpl")// service impl 命名方式  默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl
 54                 .setControllerName("%sController")*/// controller 命名方式    默认值:null 例如:%sAction 生成 UserAction
 55         ;
 56         return gc;
 57     }
 58 
 59     /**
 60      * 数据源配置
 61      */
 62     private static DataSourceConfig getDataSource() {
 63         DataSourceConfig dsc = new DataSourceConfig();
 64         dsc.setUrl(
 65                 "jdbc:mysql://localhost:3306/my_springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"
 66         );
 67         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
 68         dsc.setUsername("root");
 69         dsc.setPassword("root");
 70         return dsc;
 71     }
 72 
 73     /**
 74      * 包配置
 75      *
 76      * @param packageName 自定义包名,后续的代码生成会在这个包下
 77      */
 78     private static PackageConfig getPackageConfig(String packageName) {
 79         PackageConfig pc = new PackageConfig();
 80         pc.setParent(packageName)
 81                 .setController("controller")
 82                 .setService("service")
 83                 .setMapper("dao")
 84                 .setEntity("pojo");
 85         return pc;
 86     }
 87 
 88     /**
 89      * 策略配置
 90      *
 91      * @param tableNames 需要生成的表名
 92      */
 93     private static StrategyConfig getStrategyConfig(String tableNames, String tablePrefix) {
 94         // 策略配置    数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表
 95         StrategyConfig strategy = new StrategyConfig();
 96         strategy.setCapitalMode(false)//驼峰命名
 97                 .setNaming(NamingStrategy.underline_to_camel)//表名生成策略(下划线转驼峰)
 98                 .setColumnNaming(NamingStrategy.underline_to_camel)//列名生成策略(下划线转驼峰)
 99                 .setEntityLombokModel(true)//【实体】是否为lombok模型(默认 false)
100                 .setRestControllerStyle(true)//生成 @RestController 控制器
101                 .setInclude((tableNames).split(","))//通过表名生成相关类
102                 .setTablePrefix(tablePrefix)//去掉表的前缀
103                 .setControllerMappingHyphenStyle(true);//驼峰转连字符
104         //自定义继承的类全称,带包名
105     /*strategy.setSuperControllerClass("com.common.BaseController");
106     strategy.setSuperServiceClass((String) null);
107     strategy.setSuperServiceImplClass((String) null);
108     strategy.setSuperMapperClass(null);
109     strategy.setSuperEntityClass("com.common.BaseEntity")
110     strategy.setSuperEntityColumns("id");*/
111         return strategy;
112     }
113 
114     /**
115      * 模板配置:velocity模板
116      */
117     private static TemplateConfig getTemplateConfig() {
118         TemplateConfig tc = new TemplateConfig();
119         //使用resource下的自定义模板,不想要生成就设置为null,如果不设置null会使用默认模板
120         tc.setController("templates/controller.java.vm")
121                 .setService("templates/service.java")
122                 .setServiceImpl("templates/serviceImpl.java")
123                 .setEntity("templates/entity.java")
124                 .setMapper("templates/mapper.java")
125                 .setXml("templates/mapper.xml");
126         return tc;
127     }
128 
129 }
复制代码

开启 Swagger2 模式需配置 Swagger : 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能

配置完数据库源以及需要生成的对应表生成即可

分页配置

复制代码
package com.my_springboot.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor interceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
interceptor.setOverflow(true);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
return new PaginationInterceptor();
}
}
复制代码

controller层UserInfoController

 

复制代码
package com.my_springboot.user.controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.my_springboot.user.pojo.UserInfoDO;
import com.my_springboot.user.service.IUserInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 用户信息前端控制器
 * </p>
 *
 * @author JiHC
 * @since 2020-08-21
 */
@RestController
@RequestMapping("/user")
@Api(value = "UserInfoController", tags = {"用户模块"})
public class UserInfoController {

    @Autowired
    IUserInfoService userInfoService;

    @ApiOperation("新增用户信息")
    @PostMapping(value = "/saveUser")
    public String saveUser(@RequestBody UserInfoDO userInfoDO) {
        userInfoService.save(userInfoDO);
        return "用户添加成功!";
    }

    @ApiOperation("根据问题id修改问题")
    @PutMapping(value = "/updateUser")
    public String updateUser(@RequestBody UserInfoDO userInfoDO) {
        userInfoService.updateById(userInfoDO);
        return "用户修改成功!";
    }

    @ApiOperation("根据id删除用户信息")
    @DeleteMapping(value = "/removeUser")
    @ApiImplicitParam(name = "id", value = "用户id", dataType = "string", required = true, paramType = "query")
    public String removeUser(@RequestParam String id) {
        userInfoService.removeById(id);
        return "用户删除成功!";
    }

    @ApiOperation("分页查询用户")
    @PostMapping(value = "/listUserPage")
    @ResponseBody
    @ApiImplicitParams({
            @ApiImplicitParam(name = "pageNum", value = "当前页码", dataType = "int", required = true, paramType = "query",defaultValue = "1"),
            @ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "int", required = true, paramType = "query",defaultValue = "10")
    })
    public Page<UserInfoDO> listUserPage(Integer pageNum, Integer pageSize) {
        return userInfoService.listUserPage(new Page(pageNum, pageSize));
    }
}
复制代码

 

service层类UserInfoService

复制代码
package com.my_springboot.user.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.my_springboot.user.pojo.UserInfoDO;
import com.my_springboot.user.dao.UserInfoDAO;
import com.my_springboot.user.service.IUserInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 用户信息服务实现类
 * </p>
 *
 * @author JiHC
 * @since 2020-08-21
 */
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoDAO, UserInfoDO> implements
        IUserInfoService {
    @Override
    public Page<UserInfoDO> listUserPage(Page<UserInfoDO> page) {
        page.setRecords(baseMapper.listUsers(page));
        return page;
    }
}
复制代码

DAO层UserInfoDAO

复制代码
package com.my_springboot.user.dao;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.my_springboot.user.pojo.UserInfoDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;

/**
 * <p>
 * 用户信息Mapper 接口
 * </p>
 *
 * @author JiHC
 * @since 2020-08-21
 */
public interface UserInfoDAO extends BaseMapper<UserInfoDO> {

    /**
     * 查询用户列表
     *
     * @return users
     */
    List<UserInfoDO> listUsers(Page<UserInfoDO> page);
}
复制代码

UserMapper.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my_springboot.user.dao.UserInfoDAO">

  <!-- 通用查询映射结果 -->
  <resultMap id="BaseResultMap" type="com.my_springboot.user.pojo.UserInfoDO">
    <result column="id" property="id"/>
    <result column="nick_name" property="nickName"/>
    <result column="gender" property="gender"/>
    <result column="skey" property="skey"/>
    <result column="openid" property="openid"/>
    <result column="session_key" property="sessionKey"/>
    <result column="phone" property="phone"/>
    <result column="password" property="password"/>
    <result column="city" property="city"/>
    <result column="province" property="province"/>
    <result column="country" property="country"/>
    <result column="avatar_url" property="avatarUrl"/>
    <result column="first_visit_time" property="firstVisitTime"/>
    <result column="last_visit_time" property="lastVisitTime"/>
    <result column="ip_address" property="ipAddress"/>
    <result column="is_delete" property="isDelete"/>
  </resultMap>

  <!-- 通用查询结果列 -->
  <sql id="Base_Column_List">
        id, nick_name, gender, skey, openid, session_key, phone, password, city, province, country, avatar_url, first_visit_time, last_visit_time, ip_address, is_delete
    </sql>

  <!-- 查询用户列表 -->
  <select id="listUsers" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List"/>
    FROM `sys_user_info`
  </select>
  
</mapper>
复制代码

启动项目并访问Swagger

 

 

 

posted on   法哈席基  阅读(649)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示