从零开始的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 ...
随机推荐
- java反序列化——apache-shiro复现分析
本文首发于“合天智汇”公众号 作者:Fortheone 看了好久的文章才开始分析调试java的cc链,这个链算是java反序列化漏洞里的基础了.分析调试的shiro也是直接使用了cc链.首先先了解一些 ...
- js POST调用api接口时,由于OPTIONS请求导致服务器异常
1.学习心得 当你搜到这个问题时,就表示你已经知道了脚本POST请求接口时,会先执行一次OPTIONS类型的请求.至于为什么会这样,在此就不做描述了,想知道的小伙伴可以查一下:本文主要将我在现实中遇到 ...
- 2019 HL SC day10
10天都过去了 4天都在全程懵逼.. 怎么可以这么难啊 我服了 现在想起依稀只记得一些结论 什么 反演? 什么后缀自动机?什么组合数的应用?什么神仙东西 ,不过讲课人的确都是神仙.(实名羡慕. mzx ...
- LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci 题解
题目传送门 如果之前推过斐波那契数列前缀和就更好做(所以题目中给出了). 斐波那契数列前缀和题目链接 先来推一下斐波那契数列前缀和: \[\sum\limits_{i=1}^nf(i) \] 其中 \ ...
- [NewLife.Net]单机400万长连接压力测试
目标 对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性. [2020年8月1日晚上22点] 先上源码:https://github.com/NewLifeX/N ...
- 【SCOI2008】奖励关 题解(状压DP+期望)
题目链接 题目大意:给定$n$个宝物,每次随机抛出一个宝物,奖励分数为$p_i$.但如果选这个宝物必须选过它的前置宝物集合.共进行$K$轮问最优策略下的期望. $n\leq 15,-10^6\leq ...
- JAVA的基本程序设计结构<上>
一个简单的Java应用程序 public class FirstSample { public static void main(String[] args) { System.out.println ...
- 028_go语言中的超时处理
代码演示 package main import "fmt" import "time" func main() { c1 := make(chan strin ...
- @RequestMapping 参数详解
引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio ...
- LinuX操作系统基础------> 用户管理,grep搜索
用户管理 用户组管理 字符管理和grep搜索 1.用户管理: LinuX是一个多用户,多任务的操作系统,可以让多个用户使用,这个账号可以帮助对用户进行追踪,必须在初始化的时候设置好自己的密码 1-1配 ...