MybatisPlus入门

缺乏、安全感 2022-12-17 04:22 250阅读 0赞

什么是MybatisPlus?

Mybatis是中国开发的一款基于mybatis优化的框架,具有非常好的应用场景, 荣获【 2019 年度开源中国最受欢迎的软件,开发工具类 TOP 1 】,它的开发理念是:为简化开发而生。目的是为了成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。官网链接:https://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 操作智能分析阻断,也可自定义拦截规则,预防误操作

使用步骤

1.导入依赖

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

2.定义持久层

  1. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  2. import com.gzgs.mybatis_plus.domain.User;
  3. import org.apache.ibatis.annotations.Mapper;
  4. @Mapper
  5. public interface UserMapper extends BaseMapper<User> {
  6. //无需再写任何代码
  7. }

完成这个之后可以看到,和以往使用mybatis相比,它实在是太方便了,我们不再需要书写持久层的大部分代码。

3.简单查询

  1. //测试查询
  2. @Test
  3. void testFindbyId(){
  4. User user = userMapper.selectById(1);
  5. System.out.println(user);
  6. }
  7. //测试批量查询
  8. @Test
  9. void test(){
  10. List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 5, 6));
  11. users.forEach(System.out::println);
  12. }
  13. //使用map进行查询
  14. @Test
  15. void testselectbyMap(){
  16. Map map=new HashMap();
  17. map.put("name","张三");
  18. List list = userMapper.selectByMap(map);
  19. list.forEach(System.out::println);
  20. }

4.分页查询

MybatisPlus为我们提供了一款分页查询的插件,想要使用这个分页查询,只需要如下几步。

1、配置拦截器组件即可

  1. // 分页插件
  2. @Bean
  3. public PaginationInterceptor paginationInterceptor() {
  4. return new PaginationInterceptor();
  5. }

2、直接使用Page对象即可

  1. // 测试分页查询
  2. @Test
  3. public void testPage(){
  4. // 参数一:当前页
  5. // 参数二:页面大小
  6. // 使用了分页插件之后,所有的分页操作也变得简单的!
  7. Page<User> page = new Page<>(2,5);
  8. userMapper.selectPage(page,null);
  9. page.getRecords().forEach(System.out::println);
  10. System.out.println(page.getTotal());
  11. }

在这里插入图片描述

性能分析插件

性能分析拦截器,用于输出每条 SQL 语句及其执行时间,MP也提供性能分析插件,如果超过这个时间就停止运行!我们可以使用这个性能分析插件来判断那些sql语句需要进行优化。

1、导入插件

  1. /**
  2. * SQL执行效率插件
  3. */
  4. @Bean
  5. @Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
  6. public PerformanceInterceptor performanceInterceptor() {
  7. PerformanceInterceptor performanceInterceptor = new
  8. PerformanceInterceptor();
  9. performanceInterceptor.setMaxTime(100); // ms设置sql执行的最大时间,如果超过了则不
  10. 执行
  11. performanceInterceptor.setFormat(true); // 是否格式化代码
  12. return performanceInterceptor;
  13. }

2、在配置文件中配置

  1. #设置开发环境
  2. spring.profiles.active=dev

3、直接使用

  1. @Test
  2. void contextLoads() {
  3. // 参数是一个 Wrapper ,条件构造器,这里我们先不用 null
  4. // 查询全部用户
  5. List<User> users = userMapper.selectList(null);
  6. users.forEach(System.out::println);
  7. }

在这里插入图片描述

代码生成器

MybatisPlus为我们提供了一款代码生成器AutoGenerator ,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

  1. package com.gzgs.mybatis_plus.domain;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.annotation.FieldFill;
  4. import com.baomidou.mybatisplus.annotation.IdType;
  5. import com.baomidou.mybatisplus.generator.AutoGenerator;
  6. import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
  7. import com.baomidou.mybatisplus.generator.config.GlobalConfig;
  8. import com.baomidou.mybatisplus.generator.config.PackageConfig;
  9. import com.baomidou.mybatisplus.generator.config.StrategyConfig;
  10. import com.baomidou.mybatisplus.generator.config.po.TableFill;
  11. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  12. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  13. import java.util.ArrayList;
  14. import static com.mysql.cj.conf.PropertyKey.serverTimezone;
  15. public class AutoEncoding {
  16. public static void main(String[] args) {
  17. // 需要构建一个 代码自动生成器 对象
  18. AutoGenerator mpg = new AutoGenerator();
  19. // 配置策略
  20. // 1、全局配置
  21. GlobalConfig gc = new GlobalConfig();
  22. String projectPath = System.getProperty("user.dir");
  23. gc.setOutputDir(projectPath + "/src/main/java");
  24. gc.setAuthor("sdl");
  25. gc.setOpen(false);
  26. gc.setFileOverride(false); // 是否覆盖
  27. gc.setServiceName("Service"); // 去Service的I前缀
  28. gc.setIdType(IdType.ID_WORKER);
  29. gc.setDateType(DateType.ONLY_DATE);
  30. gc.setSwagger2(true);
  31. mpg.setGlobalConfig(gc);
  32. //2、设置数据源
  33. DataSourceConfig dsc = new DataSourceConfig();
  34. dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL = false&useUnicode=true&characterEncoding=utf-8&serverTimezone = GMT%2B8");
  35. dsc.setDriverName("com.mysql.cj.jdbc.Driver");
  36. dsc.setUsername("root");
  37. dsc.setPassword("111111");
  38. dsc.setDbType(DbType.MYSQL);
  39. mpg.setDataSource(dsc);
  40. //3、包的配置
  41. PackageConfig pc = new PackageConfig();
  42. pc.setModuleName("test");
  43. pc.setParent("com.gzgs");
  44. pc.setEntity("entity");
  45. pc.setMapper("mapper");
  46. pc.setService("service");
  47. pc.setController("controller");
  48. mpg.setPackageInfo(pc);
  49. //4、策略配置
  50. StrategyConfig strategy = new StrategyConfig();
  51. strategy.setInclude("user"); // 设置要映射的表名
  52. strategy.setNaming(NamingStrategy.underline_to_camel);
  53. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  54. strategy.setEntityLombokModel(true); // 自动lombok;
  55. strategy.setLogicDeleteFieldName("deleted");
  56. // 自动填充配置
  57. TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
  58. TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
  59. ArrayList<TableFill> tableFills = new ArrayList<>();
  60. tableFills.add(gmtCreate);
  61. tableFills.add(gmtModified);
  62. strategy.setTableFillList(tableFills);
  63. // 乐观锁
  64. strategy.setVersionFieldName("version");
  65. strategy.setRestControllerStyle(true);
  66. strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
  67. mpg.setStrategy(strategy);
  68. mpg.execute(); //执行
  69. }
  70. }

点击运行之后即可生成代码!!

完整学习笔记已上传自码云:https://gitee.com/sun-dalin/mybatis\_plus.git

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MybatisPlus入门

    什么是MybatisPlus? Mybatis是中国开发的一款基于mybatis优化的框架,具有非常好的应用场景, 荣获【 2019 年度开源中国最受欢迎的软件,开发工具

    相关 MybatisPlus入门

    MyBatisPlus简介 1.项目肯定要访问数据操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板