概述
一、基础配置
1、导入maven依赖
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
2、配置数据源
【省略创建数据库、表和添加数据】
#mysql8 的需要设置时区
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=admin
3、日志打印
# 日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
二、测试
1、创建实体类
package com.tcc.entity;
import java.sql.Timestamp;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
public class User {
private Long id;
private String name;
private Integer age;
private String email;
//getter,setter等方法省略...
}
2、创建mapper
package com.tcc.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tcc.entity.User;
//放入springbott中并自动扫描这个类
@Mapper
//继承mybatis-plus的接口,里面拥有大部分sql方法 给这个接口传入泛型
public interface UserMapper extends BaseMapper<User> {
}
3、在测试方法中测试
package com.tcc;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.tcc.mapper.UserMapper;
@SpringBootTest
class ApplicationTests {
@Autowired
private UserMapper uMapper;
/**
* 查询所有
*/
@Test
void contextLoads() {
List<User> list = uMapper.selectList(null);
System.out.println(list);
}
}
三、基本的CRUD
1、查询
/**
* 查询所有
*/
@Test
void contextLoads() {
List<User> list = uMapper.selectList(null);
System.out.println(list);
}
/**
* 根据id查询
*/
@Test
void selectById() {
User user = uMapper.selectById(1L);
System.out.println(user);
}
/**
* 根据多个id查询
*/
@Test
void selectByIds() {
List<User> user = uMapper.selectBatchIds(Arrays.asList(1,2,3));
System.out.println(user);
}
/**
* 根据map条件查询 会自动map里面的键值对动态拼接到where后面
*/
@Test
void selectByMap() {
HashMap<String,Object> map = new HashMap<>();
map.put("name", "aaa");
map.put("age", 20);
List<User> user = uMapper.selectByMap(map);
System.out.println(user);
}
2、添加
/**
* 添加
*/
@Test
void addUser() {
User user = new User();
//user.setId(7L);
user.setName("baba10");
user.setAge(22);
user.setEmail("897113177@qq.com");
int num = uMapper.insert(user);
System.out.println(num);
System.out.println(user);
}
3、修改
/**
* 修改
*/
@Test
void updateUser() {
User user = new User();
user.setId(1L);
user.setName("abc");
int num = uMapper.updateById(user);
System.out.println(num);
}
4、删除
/**
* 删除 简单举例,还有很多删除的方法
*/
@Test
void delUser() {
int num = uMapper.deleteById(1492031071255588866L);
System.out.println(num);
}
四、自定义ID生成
1、在实体类id上添加注解@TableId
//如果添加对象的时候不给id值或给null值,那么默认为雪花算法添加默认的全局唯一id,如果使用注解赋值则用注解的
//@TableId(type = IdType.AUTO)可以设置id值,添加的时候会默认添加,值可以参考IdType.class类或官网
@TableId(type = IdType.ASSIGN_ID)
private Long id;
五、自动填充
1、在表中添加 gmt_create, gmt_modified 列
- 代表数据的创建时间和修改时间,gmt代表国际化。
2、更新实体类的属性,然后在这两个属性上添加注解@TableField
//自动填充功能 FieldFill:字段自动填充策略
@TableField(fill = FieldFill.INSERT)//在添加的时候填充
private Date create_time;
@TableField(fill = FieldFill.INSERT_UPDATE)//在添加和修改的时候填充
private Timestamp update_time;
3、自定义实现类 MyMetaObjectHandler
package com.tcc.Handler;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
//添加为spring组件
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
Date date = new Date();//获得系统时间.
String nowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
//把被格式化的new date转换为Timestamp格式的日期
Timestamp goodsC_date = Timestamp.valueOf(nowTime);
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("create_time", new Date(), metaObject);
this.setFieldValByName("update_time", goodsC_date, metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("update_time", goodsC_date, metaObject);
}
}
4、添加和修改数据进行测试查看时间列是否自动填充
六、乐观锁插件
1、创建配置类
package com.tcc.mpconfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
//定义配置类
@Configuration
//启用事务管理 效果等同于xml配置的<tx:annotation-driven />
@EnableTransactionManagement
public class MyBatisPlusConfiguration {
/**
* 乐观锁新版
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
}
2、在实体类version属性上添加@Version注解
@Version //乐观锁
private Integer version;
3、测试
/**
* 测试乐观锁成功
*/
@Test
void versionTest() {
User user = uMapper.selectById(1L);
user.setName("bbb");
uMapper.updateById(user);
}
/**
* 测试乐观锁失败
*/
@Test
void versionTest2() {
//修改失败
User user = uMapper.selectById(1L);
user.setName("ccc");
//模拟另外一个线程执行了插队操作
User user2 = uMapper.selectById(1L);
user2.setName("aaa");
uMapper.updateById(user2);
uMapper.updateById(user);
}
七、分页插件
1、在配置类里添加配置方法
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor2() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
2、测试
/**
* 测试分页
*/
@Test
void pageTest() {
Page<User> page = new Page<>(2,3);
uMapper.selectPage(page, null);
List<User> list = page.getRecords();
System.out.println(list);
}
八、逻辑删除
1、在表中添加deleted字段
2、更新实体类并在该类上添加@TableLogic注解
@TableLogic //逻辑删除
private Integer deleted;
3、在配置文件里进行乐观锁配置
#乐观锁 默认0为没有被删除的,1为删除的
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
4、进行测试
- 执行删除的话看日志其实执行的是修改操作。
- 执行查询的话会在where后面添加条件[and] deleted=0。
九、条件构造器
1、在测试方法中new一个wapper对象
- 有QueryWrapper、UpdateWrapper等,具体看方法所需要的类型
2、调用测试
/**
* 条件构造器 wapper
* 查询名称为aaa的人
*/
@Test
void wapperTest1() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "aaa");
User user = uMapper.selectOne(wrapper);
System.out.println(user.toString());
}
/**
* 条件构造器 wapper
* 查询姓名等于abc并且邮箱等于指定值并且年龄大于等于21的人
*/
@Test
void wapperTest2() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "abc");
wrapper.eq("email", "897113177@qq.com");
wrapper.ge("age", 21);
List<User> list = uMapper.selectList(wrapper);
list.forEach(System.out::println);
}
/**
* 条件构造器 wapper
* 查询名称里含有a字母的人
*/
@Test
void wapperTest3() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "a");
List<User> user = uMapper.selectList(wrapper);
user.forEach(System.out::println);
}
/**
* 条件构造器 wapper
* 把名字为abc的人改成666
*/
@Test
void wapperTest4() {
User user = new User();
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name","abc");
user.setName("666");
uMapper.update(user, wrapper);
}
wapper的更多方法请在官网查看:https://baomidou.com/pages/10c804/#abstractwrapper。
十、代码生成器
1、旧(3.5.1以下版本适用)
1、导入依赖
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
2、编写代码自动生成类
package com.tcc;
import java.util.ArrayList;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
// 代码自动生成器
public class MyAutoGenerator {
public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
// 作者
gc.setAuthor("宇辰");
// 是否打开输出目录(文件夹)
gc.setOpen(false);
// 是否覆盖已有文件
gc.setFileOverride(false);
// 默认声明前面会有前缀I,这个配置是去I的
gc.setServiceName("%sService");
// 指定生成的主键的ID类型
gc.setIdType(IdType.ID_WORKER);
// 时间类型对应策略
gc.setDateType(DateType.ONLY_DATE);
// 是否开启 swagger2 模式
gc.setSwagger2(false);
mpg.setGlobalConfig(gc);
// 设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/springbootdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
dsc.setUsername("root");
dsc.setPassword("admin");
// 设置数据库类型
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// 设置模块名
pc.setModuleName("blog");
// 父包名
pc.setParent("com.tcc");
// 子名
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setServiceImpl("serviceImpl");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// ====设置要生成的表名====
strategy.setInclude("tbl_account");
// NamingStrategy:从数据库表到文件的命名策略 underline_to_camel:下划线转驼峰命名
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 是否为lombok模型(默认 false)
strategy.setEntityLombokModel(false);
// 逻辑删除属性名称
strategy.setLogicDeleteFieldName("deleted");
// 生成 <code>@RestController</code> 控制器
strategy.setRestControllerStyle(true);
// 自动填充
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> list = new ArrayList<>();
list.add(createTime);
list.add(updateTime);
// 表填充字段
strategy.setTableFillList(list);
// 乐观锁属性名称
strategy.setVersionFieldName("versioin");
mpg.setStrategy(strategy);
// 代码自动生成器,执行
mpg.execute();
}
}
3、运行测试
2、新(3.5.1以上版本适用)
1、导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
2、编写代码
package com.tcc;
import java.util.Arrays;
import java.util.Collections;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.fill.Column;
// 代码自动生成器
public class MyAutoGenerator {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/springbootdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8";
String username = "root";
String password = "admin";
String projectPath = System.getProperty("user.dir");
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> {
builder.author("宇辰") // 设置作者
//.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir(projectPath + "/src/main/java") // 指定输出目录
.disableOpenDir(); // 禁止打开输出目录
})
.packageConfig(builder -> {
builder.parent("com.tcc") // 设置父包名
.moduleName("blog") // 设置父包模块名
.entity("entity")
.mapper("mapper")
.xml("xml")
.service("service")
.serviceImpl("serviceImpl")
.controller("controller")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("user") // 设置需要生成的表名
.addTablePrefix("t_", "c_") // 设置过滤表前缀
.serviceBuilder() // service策略配置
.formatServiceFileName("%sService") // 格式化名称
.formatServiceImplFileName("%sServiceImpl")
.entityBuilder() // 实体类策略配置
//.enableLombok() // 开启lombok模型
.idType(IdType.ASSIGN_ID) // 默认id生成策略
//.enableTableFieldAnnotation()// 生成字段注解(在每个属性上添加@TableField注解)
.logicDeleteColumnName("deleted") // 逻辑删除
.addTableFills(Arrays.asList( // 自动填充
new Column("create_time",FieldFill.INSERT),
new Column("update_time",FieldFill.INSERT_UPDATE)))
.versionColumnName("version") // 乐观锁
.controllerBuilder() // 控制层策略
.enableRestStyle() // 开启@RestController注解
.formatFileName("%sController") // 格式化名称
.mapperBuilder() // mapper策略
.formatMapperFileName("%sMapper") // mapper格式化名称
.formatXmlFileName("%sMapper") // xml名
.enableMapperAnnotation() // 开启@Mapper注解
.superClass(BaseMapper.class); // 父类
})
//.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
3、运行测试
最后
以上就是苹果毛衣为你收集整理的mybatis-plus的全部内容,希望文章能够帮你解决mybatis-plus所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复