环境:
jdk:1.8
springboot版本:2.7.15
mybatis-plus版本:3.5.1以上
(本文章用的当前最新版本:3.5.3.2,代码适用于3.5.1版本以上的版本)
步骤:
1.添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.2</version>
</dependency>
<!-- 代码生成时候配置中会用到版本引擎,这里添加模版引擎依赖 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
2.配置代码
在测试类中创建一下测试类运行就行。
运行之前需要修改一些配置信息。
1.修改成自己的数据库链接地址、账号、密码
2.进行全局配置globalConfig,参数解释:
- author:作者名称,设置以后代码生成时候类注释上会有设置的名字
- outputDir:指定输出目录,这里设置到/src/main/java目录就行,生产的文件会输出到这个目录下
- enableSwagger:如果项目中配置了swagger,可以打开,如果没配置注释调就行
3.进行包配置packageConfig,参数解释:
- parent:设置父包名,这个设置你自己的包名就可以,生产代码时,此属性会配合outputDir属性,在/src/main/java目录下生成一个包
- pathInfo:此属性是指定生成mapper.xml文件的路径
4.进行策略配置strategyConfig,参数解释:
- addInclude:设置生成的表名称,如果多张表用逗号","分割开
- addTablePrefix:设置过滤表前缀,如果表有固定的前缀,可以在这里设置,生产代码时会将前缀去掉,如:t_user表,如果设置此属性,生成的实体类为User,如果不设置则生成的实体类名称为:TUser
package com.iterge.iterge_pre;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.Types;
import java.util.Collections;
@SpringBootTest
class ItergePreApplicationTests {
@Test
void contextLoads() {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/test", "root", "root")
.globalConfig(builder -> {
builder.author("iterge") // 设置作者
// 开启 swagger 模式 默认不开启
//.enableSwagger()
.outputDir("/Users/liuph/dev/space/idea/iterge_pre/src/main/java"); // 指定输出目录
})
.dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
// 自定义类型转换
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
}))
.packageConfig(builder -> {
// 设置父包名
builder.parent("com.iterge.iterge_pre")
// 设置父包模块名
//.moduleName("mapper")
// 设置mapperXml生成路径
.pathInfo(Collections.singletonMap(OutputFile.xml, "/Users/liuph/dev/space/idea/iterge_pre/src/main/resources/mapper"));
})
.strategyConfig(builder -> {
// 设置需要生成的表名
builder.addInclude("t_user,user_info");
// 设置过滤表前缀
//.addTablePrefix("t_", "c_");
})
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
3.运行
启动测试类,生成结果如下:
此代码生成器会同时生成:controller、service、serviceImpl、mapper、entity以及mapper.xml文件,没有的目录也会自动生成
测试
1.测试生成的service
1.1、service用法
package com.iterge.iterge_pre.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iterge.iterge_pre.entity.TUser;
import com.iterge.iterge_pre.entity.User;
import com.iterge.iterge_pre.mapper.TUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
* @author liuph
* @date 2023/9/6 10:49:02
*/
@SpringBootTest
@Slf4j
public class TUserServiceTest {
@Resource
private ITUserService itUserService;
@Test
public void selectById(){
Optional<TUser> optById = itUserService.getOptById(1);
log.info("通过id查询数据:{}",optById.get());
}
@Test
public void queryAll(){
List<TUser> list = itUserService.list();
log.info("获取全量数据:{}",list.size());
}
@Test
public void queryByUser(){
LambdaQueryWrapper<TUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TUser::getName,"zhangsan");
List<TUser> list = itUserService.list(queryWrapper);
log.info("自定义条件查询:{}",list.size());
}
}
2.分页查询
mybits-plus的分页查询要引入分页插件
2.1、分页插件配置
package com.iterge.iterge_pre.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liuph
* @date 2023/9/6 11:30:02
*/
@Configuration
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//如果配置多个插件,切记分页最后添加
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
//interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
2.2、测试
package com.iterge.iterge_pre.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iterge.iterge_pre.entity.TUser;
import com.iterge.iterge_pre.entity.User;
import com.iterge.iterge_pre.mapper.TUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
/**
* @author liuph
* @date 2023/9/6 10:49:02
*/
@SpringBootTest
@Slf4j
public class TUserServiceTest {
@Resource
private ITUserService itUserService;
@Test
public void queryByPage(){
IPage<TUser> page = new Page<>();
page.setSize(2)
.setCurrent(2);
LambdaQueryWrapper<TUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TUser::getName,"test");
List<TUser> list = itUserService.list(page,queryWrapper);
log.info("分页查询:{}",list.size());
}
}
3.源码
码云
创作不易,你的鼓励是我创作的动力~
有什么疑问可以评论区留言哦~
版权归原作者 悟空、大师兄 所有, 如有侵权,请联系我们删除。