当前位置:   article > 正文

Mybatis Plus:Mybatis框架的Plus版_mybatisplus版本对应mybatis版本

mybatisplus版本对应mybatis版本

目录

Mybatis-Plus的介绍:

新手入门

通用Service的CURD

内置的分页插件

条件构造器 Wrapper

全局ID生成策略

逻辑删除

数据安全保护

 乐观锁

附图(资料)

相关注解

 条件构造器的相关方法


Mybatis-Plus的介绍:

MyBatis­Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Mybatis-Plus官网:MyBatis-Plus (baomidou.com)icon-default.png?t=M3C8https://baomidou.com/

特点:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

新手入门

步骤:

导入mybatis-plus-boot-starter依赖

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.5.1</version>
  5. </dependency>

编写pojo的类名要与对应的数据表名称相同,如果不相同可以使用注解@TableName

编写dao层,接口继承BaseMapper<T> T-pojo类

  1. @Repository
  2. public interface UserMapper extends BaseMapper<user> {
  3. }

进行测试:获取mapper接口对象,直接调用CRUD方法

注意:

  • 这些方法执行SQL的方式均是预编译;
  • 进行添加后可以立即返回id值。
  • pojo类中:设置主键自增的注解是@TableId(value = "id",type = IdType.AUTO)
  1. @Test
  2. void contextLoads() {
  3. // 增加 id自增 0是初始值 不会添加进去
  4. user test001 = new user(0, "test001", "123");
  5. userMapper.insert(test001);
  6. // mybatis-plus 的特性:可以立即返回id值
  7. System.out.println(test001.getId());
  8. // 删除
  9. userMapper.deleteById(14);
  10. // 修改
  11. user tony = new user(10, "tony", "123456");
  12. userMapper.updateById(tony);
  13. // 查询
  14. System.out.println(userMapper.selectByMap(null));
  15. }

通用Service的CURD

步骤:

建立接口继承IService<T>接口

  1. public interface userService extends IService<user> {
  2. }

实现类实现刚刚创建的接口、继承ServiceImpl<S,T>,S:dao层mapper类名,T:pojo类名

  1. @Service
  2. public class userServiceImpl extends ServiceImpl<UserMapper, user>implements userService {
  3. }

获取实现类对象调用CRUD方法进行测试

  1. @Test
  2. void test_2(){
  3. // 增加
  4. user test002 = new user(0, "test003", "123");
  5. userService.save(test002);
  6. System.out.println(test002.getId());
  7. // 删除
  8. userService.removeById(11);
  9. // 保存/修改
  10. user test003 = new user(17, "test005", "123");
  11. userService.saveOrUpdate(test003);
  12. System.out.println(test003.getId());
  13. // 查询
  14. System.out.println(userService.getById(17));
  15. }

内置的分页插件

在springboot的配置类中添加bean对象

  1. @Bean
  2. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  3. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  4. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  5. return interceptor;
  6. }

对单表进行分页查询:底层会自动加上limit关键字

  1. @Test
  2. void test_3(){
  3. // 参数: 页码、每页的条数
  4. Page<user> userPage = new Page<>(1, 3);
  5. Page<user> page = userService.page(userPage);
  6. System.out.println(page.getRecords());
  7. }

条件构造器 Wrapper

具体的实现类有QueryWrapper、UpdateWrapper (查询、更新)

  1. @Test
  2. void test_4(){
  3. // 查询 id>17的,只查询username这个属性
  4. QueryWrapper<user> userQueryWrapper = new QueryWrapper<>();
  5. userQueryWrapper
  6. .select("username")
  7. .gt("id",17);
  8. System.out.println(userService.list(userQueryWrapper));
  9. System.out.println("=================================");
  10. // 查询id>17 || id<10
  11. QueryWrapper<user> userQueryWrapper1 = new QueryWrapper<>();
  12. userQueryWrapper1
  13. .gt("id",17)
  14. .or()
  15. .lt("id",10);
  16. System.out.println(userService.list(userQueryWrapper1));
  17. System.out.println("=====================================");
  18. // 查询id>10 && id<17 &&不需要and方法
  19. QueryWrapper<user> userQueryWrapper2 = new QueryWrapper<>();
  20. userQueryWrapper2
  21. .gt("id",10)
  22. .lt("id",17);
  23. System.out.println(userService.list(userQueryWrapper2));
  24. }

使用lambda方法配置条件构造器:优势所有的名称没有写死!

  1. @Test
  2. void test_5(){
  3. UpdateWrapper<user> wrapper = new UpdateWrapper<>();
  4. wrapper.lambda()
  5. .set(user::getUsername,"test006")
  6. .eq(user::getId,17);
  7. userService.update(wrapper);
  8. }

全局ID生成策略

不用每个pojo的主键都添加注解 在配置文件设置即可

mybatis-plus.global-config.db-config.id-type=auto

逻辑删除

逻辑删除:不同于物理删除,物理删除是直接将数据删除掉。逻辑删除是在数据表中设定标志位,通过判断标志位的数据,来确定是否已经删除。

逻辑删除:实质进行的是修改。执行查询的时候,也不会显示已经被“逻辑删除”的数据。

步骤:

在数据表中添加标志位,类似于字段enabled,整型(0,1进行判断)

局部配置:在pojo类上,添加注解@TableLogic:正常-0 删除-1

  1. @TableLogic(value ="0" ,delval = "1")
  2. private Integer enabled;

全局配置:不用每个pojo的主键都添加注解 在配置文件设置即可

  1. mybatis-plus.global-config.db-config.logic-delete-field=enabled
  2. mybatis-plus.global-config.db-config.logic-delete-value=1
  3. mybatis-plus.global-config.db-config.logic-not-delete-value=0

数据安全保护

方法:对url、username、password进行加密

步骤:

得到密钥

AES.generateRandomKey()

使用密钥进行加密

  1. System.out.println(AES.encrypt("url", "1648c388ed87847b"));
  2. System.out.println(AES.encrypt("username", "1648c388ed87847b"));
  3. System.out.println(AES.encrypt("password", "1648c388ed87847b"));

将加密后的结果,复制粘贴到配置文件中。

将项目进行打包,添加打包插件

  1. <plugins>
  2. <plugin>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-maven-plugin</artifactId>
  5. </plugin>
  6. <plugin>
  7. <groupId>org.apache.maven.plugins</groupId>
  8. <artifactId>maven-resources-plugin</artifactId>
  9. <version>3.1.0</version>
  10. </plugin>
  11. </plugins>

部署项目:java ‐jar xxxx.jar ‐‐mpw.key=你的16位随机秘钥

 乐观锁

 步骤:

数据表添加版本字段version

 在pojo类的属性上添加注解@Version @TableField()-自动填充策略

  1. @Version
  2. @TableField(fill = FieldFill.INSERT)//自动填充策略:插入、更新是自动填充
  3. private Integer version;

在springboot的配置类中添加OptimisticLockerInnerInterceptor

  1. @Bean
  2. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  3. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  4. //分页插件
  5. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  6. //乐观锁插件
  7. interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  8. return interceptor;
  9. }

进行测试:

  1. @Test
  2. void test_9(){
  3. // 线程1
  4. user user1 = userService.getById(7);
  5. // 线程2
  6. user user2=userService.getById(7);
  7. // 线程1 做出修改
  8. user1.setUsername("thread1");
  9. if (userService.updateById(user1)){
  10. System.out.println("线程1 更改成功");
  11. }
  12. // 线程2 做出修改
  13. if (!userService.updateById(user2)){
  14. System.out.println("线程2 更改失败");
  15. }
  16. }

附图(资料)

相关注解

 

 条件构造器的相关方法

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/201395
推荐阅读
相关标签
  

闽ICP备14008679号