从零开始的SpringBoot项目 ( 六 ) 整合 MybatisPlus 实现代码自动生成
1.添加依赖
<!-- MySQL数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.6</version>
</dependency>
<!-- MyBatis-Plus模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<!--热部署 每次修改代码springboot自动重启服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
2. 自动代码生成器
package com.my_springboot.generator; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; /**
* 代码生成器
*/
public class MpGenerator { public static void main(String[] args) {
String tableNames = "sys_user_info";// 通过表名生成相关类,多个用英文逗号隔开
String tablePrefix = "sys_";// 去掉表名前缀
String packageName = "com.my_springboot.user";// 自定义自己的包名,后续的代码生成会在这个包下
String projectPath = "C:\\Users\\86130\\Desktop\\mmp";// 生成文件的输出目录 我一般放在桌面,避免原文件被覆盖
new AutoGenerator()
.setGlobalConfig(getGlobalConfig(projectPath)) //全局配置
.setDataSource(getDataSource()) //数据源配置
.setPackageInfo(getPackageConfig(packageName)) //包配置
.setStrategy(getStrategyConfig(tableNames, tablePrefix)) //策略配置
.setTemplate(getTemplateConfig()) //模板配置
.execute();
} /**
* 全局配置
*
* @param projectPath 生成文件的输出目录
*/
private static GlobalConfig getGlobalConfig(String projectPath) {
//全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath)// 生成文件的输出目录
.setAuthor("JiHC")// 作者
.setOpen(true)// 是否打开输出目录 默认值:true
.setFileOverride(true)// 是否覆蓋已有文件 默认值:false
.setSwagger2(true)// 开启 swagger2 模式 默认false
.setBaseColumnList(true)// 开启 baseColumnList 默认false
.setBaseResultMap(true)// 开启 BaseResultMap 默认false
.setIdType(IdType.ASSIGN_UUID)// 主键策略 ASSIGN_UUID:主键生成32位字符串ID
.setDateType(DateType.ONLY_DATE)// 设置时间类型使用哪个包下的
.setEntityName("%sDO")// entity 命名方式 默认值:null 例如:%sEntity 生成 UserEntity
.setMapperName("%sDAO")// dao 命名方式 默认值:null 例如:%sDao 生成 UserDao
/*.setXmlName("%sMapper")// Mapper xml 命名方式 默认值:null 例如:%sDao 生成 UserDao.xml
.setServiceName("%sService")// service 命名方式 默认值:null 例如:%sBusiness 生成 UserBusiness
.setServiceImplName("%sServiceImpl")// service impl 命名方式 默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl
.setControllerName("%sController")*/// controller 命名方式 默认值:null 例如:%sAction 生成 UserAction
;
return gc;
} /**
* 数据源配置
*/
private static DataSourceConfig getDataSource() {
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(
"jdbc:mysql://localhost:3306/my_springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"
);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
return dsc;
} /**
* 包配置
*
* @param packageName 自定义包名,后续的代码生成会在这个包下
*/
private static PackageConfig getPackageConfig(String packageName) {
PackageConfig pc = new PackageConfig();
pc.setParent(packageName)
.setController("controller")
.setService("service")
.setMapper("dao")
.setEntity("pojo");
return pc;
} /**
* 策略配置
*
* @param tableNames 需要生成的表名
*/
private static StrategyConfig getStrategyConfig(String tableNames, String tablePrefix) {
// 策略配置 数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表
StrategyConfig strategy = new StrategyConfig();
strategy.setCapitalMode(false)//驼峰命名
.setNaming(NamingStrategy.underline_to_camel)//表名生成策略(下划线转驼峰)
.setColumnNaming(NamingStrategy.underline_to_camel)//列名生成策略(下划线转驼峰)
.setEntityLombokModel(true)//【实体】是否为lombok模型(默认 false)
.setRestControllerStyle(true)//生成 @RestController 控制器
.setInclude((tableNames).split(","))//通过表名生成相关类
.setTablePrefix(tablePrefix)//去掉表的前缀
.setControllerMappingHyphenStyle(true);//驼峰转连字符
//自定义继承的类全称,带包名
/*strategy.setSuperControllerClass("com.common.BaseController");
strategy.setSuperServiceClass((String) null);
strategy.setSuperServiceImplClass((String) null);
strategy.setSuperMapperClass(null);
strategy.setSuperEntityClass("com.common.BaseEntity")
strategy.setSuperEntityColumns("id");*/
return strategy;
} /**
* 模板配置:velocity模板
*/
private static TemplateConfig getTemplateConfig() {
TemplateConfig tc = new TemplateConfig();
//使用resource下的自定义模板,不想要生成就设置为null,如果不设置null会使用默认模板
tc.setController("templates/controller.java.vm")
.setService("templates/service.java")
.setServiceImpl("templates/serviceImpl.java")
.setEntity("templates/entity.java")
.setMapper("templates/mapper.java")
.setXml("templates/mapper.xml");
return tc;
} }
开启 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


从零开始的SpringBoot项目 ( 六 ) 整合 MybatisPlus 实现代码自动生成的更多相关文章
- 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- 从零开始的SpringBoot项目 ( 四 ) 整合mybatis
一.创建一个SpringBoot项目 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目 二.引入相关依赖 <!--mysql数据库驱动--> & ...
- SpringBoot与Mybatis整合(包含generate自动生成代码工具,数据库表一对一,一对多,关联关系中间表的查询)
链接:https://blog.csdn.net/YonJarLuo/article/details/81187239 自动生成工具只是生成很单纯的表,复杂的一对多,多对多的情况则是在建表的时候就建立 ...
- 使用Springboot + Gradle快速整合Mybatis-Plus
使用Springboot + Gradle快速整合Mybatis-Plus 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] MyBatis-Plus(简称 MP)是一个 MyBatis ...
- springboot整合mybatis,利用mybatis-genetor自动生成文件
springboot整合mybatis,利用mybatis-genetor自动生成文件 项目结构: xx 实现思路: 1.添加依赖 <?xml version="1.0" e ...
- 从零开始搭建SpringBoot项目
一.新建springboot项目 1. new-->Project-->Spring Initralizr Group:com.zb Artifact:zbook springboot v ...
- 从零开始的SpringBoot项目 ( 一 ) Spring、SpringMVC和SpringBoot
要想开始一个SpringBoot项目 , 首先要知道SpringBoot是什么 , 可以做什么 , 再去研究怎么用 . 一.概念 1.Spring Spring是一个开源容器框架,可以接管web层,业 ...
- 从零开始的SpringBoot项目搭建
前言 今天是我加入博客园的第一天今天刚好学习到SpringBoot,就顺便记录一下吧 一.创建项目 1.创建工程 ① 通过File > New > Project,新建工程,选择Sprin ...
- SpringBoot整合MyBatis-Plus代码自动生成类
在springboot的test测试类下创建 MpGenerator.java 配置 MpGenerator.java public class MpGenerator { @Test publ ...
随机推荐
- python基础day7_编码及小数据池
数字概念,字符串----小数据池 数字的范围:-5---256 字符串: 1,不能有特殊字符 2,s*20还是同一个地址,s*21之后就是另外一个地址 i1 = 6 i2 = 6 print(id(i ...
- luogu P3223 [HNOI2012]排队
LINK:排队\ 原谅我没学过组合数学 没有高中数学基础水平... 不过凭着隔板法的应用还是可以推出来的. 首先考虑女生 发现一个排列数m! 两个女生不能相邻 那么理论上来说存在无解的情况 而这道题好 ...
- Python编程基础(一)编程语言是什么?编译型语言和解释型语言的区别|Python是什么?
编程语言是什么? 其实,程序指的就是一系列指令,用来告诉计算机做什么,而编写程序的关键在于,我们需要用计算机可以理解的语言来提供这些指令. 虽然借助 Siri(Apple).Google Now(An ...
- time模块 random模块
time模块 time.sys等模块是C语言实现的,内置到了python解释器的.而不是py文件. 导入模块的时候,优先到python解释器,然后才会找py文件. #时间戳 #计算 # print(t ...
- JVM补充篇
1.对象分配原则 1)对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC 2)大对象直接进入老年代(大对象是指需要大量连续内存空间的对象),这样做的目的是避免在E ...
- Python预测2020高考分数和录取情况
“迟到”了一个月的高考终于要来了. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识. ...
- Typora 完美结合 PicGo,写作体验更佳!
写在前面 在众多 md 编辑器中,Typora 是大家公认的体验较好的写作软件之一,它最大的特点就是:所见即所得,无须分屏预览,或者开启新页面预览.除此之外,还有很多优点,这里不做介绍,不是本文的重点 ...
- C语言学习笔记之数组与指针的关系
首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...
- (数据科学学习手札92)利用query()与eval()优化pandas代码
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 利用pandas进行数据分析的过程,不仅仅是计算 ...
- FPN和他的子孙们
FPN 方框里表示top down里每层有两个卷积操作 PAN:添加一个 bottom up线 NAS-FPN:基于搜索结构的FPN Fully-conencted FPN:全连接的FPN Si ...