从零开始的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
分类:
springboot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端