SpringBoot整合Mybatis-plus[超详细版]

2024-05-13 1057阅读

目录

一简介

1、什么是Mybatis-plus

2、特性

二、SpringBoot与Mybatis-plus整合之入门demo

1、引入pom

2、application.yml配置

3、主启动类

 4、测试

entity层

Mapper层

Service和ServiceImpl层

controller测试

三、Mybatis-plus核心注解

@TableName

@TableId

@TableField

@KeySequence  

 四、Mybatis-Plus之分页插件

1、config配置

2、 分页的使用

2.1、mybaits-plus自带的分页查询

2.2、自定义分页

2.2.1、自定义mapper接口

2.2.2、service实现自定义分页

五、Mybatis-plus逆向工程


一简介

1、什么是Mybatis-plus

Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。MyBatis 增强工具包,简化 CRUD 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。

官网:https://baomidou.com

2、特性

  • 无侵入: 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小: 启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

    二、SpringBoot与Mybatis-plus整合之入门demo

    依赖>配置>代码

    1、引入pom

            
                com.baomidou
                mybatis-plus-boot-starter
                3.5.1
            
    
            
                mysql
                mysql-connector-java
            
            
            
                com.alibaba
                druid-spring-boot-starter
                1.1.18
            

    SpringBoot整合Mybatis-plus[超详细版] 

    2、application.yml配置

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #日志
        map-underscore-to-camel-case: true  #开启驼峰命名
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        username: 自己的用户名
        password: 自己的密码
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/cardmanager

    3、主启动类

    @SpringBootApplication
    //注意:扫描包路径必须要精确到Mapper包,否则报异常
    @MapperScan(basePackages = "扫描自己的mapper路径")
    public class SpringBootThree {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootThree.class,args);
        }
    }

     4、测试

    entity层

    public class User {
        @TableId(type = IdType.AUTO)
        private Long id;
        private String name;
        private String password;
        private String username;
        public User() {
        }
        public User(Long id, String name, String password, String username) {
            this.id = id;
            this.name = name;
            this.password = password;
            this.username = username;
        }
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", password='" + password + '\'' +
                    ", username='" + username + '\'' +
                    '}';
        }
    }
    

    Mapper层

    BaseMapper是mybatis-plus设计的一个接口,里面包含了单表的CRUD,用起来非常方便.

    表示实体类

    @Repository
    public interface UserMapper  extends BaseMapper{
    }

    Service和ServiceImpl层

    IService和ServiceIMpl 是对BaseMapper的进一步封装,一般很少用。但是很方便。

    public interface UserService extends IService{
    }
    

     

    //impl层
    @Service
    public class UserServiceImpl extends ServiceImpl implements UserService {
        @Autowired
        UserMapper userMapper;
    }

    controller测试

    @Controller
    public class UserController {
     @Autowired
        UserService userService;
    @RequestMapping("/test")
        public String TestUser(@RequestParam("id") Long id){
         
            User user = userService.getById(id);
               System.out.print(user)
        }
    }

    好!到上述是一个SpringBoot整合Myabtisplus的入门小案例。接下来才是主要的部分

    三、Mybatis-plus核心注解

    @TableName

    • 描述:表名注解,标识实体类对应的表
    • 使用位置:实体类
      @TableName("user")
      public class User {
          @TableId(type = IdType.AUTO)
          private Long id;
          private String name;
          private String password;
          private String username;
      }
      属性描述
      value表名
      keepGlobalPrefix是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)
      resultMapxml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)

      以上的属性,只有value比较常用,其他的看看就行

      @TableId

      • 描述:主键注解
      • 使用位置:实体类主键字段
        @TableName("user")
        public class User {
            @TableId(type = IdType.AUTO)
            private Long id;
            private String name;
            private String password;
            private String username;
        }
        属性默认值描述
        value""主键字段名
        typeIdType.NONE制定主键类型

        IdType    

          一般都是数据库自增,或者就是自己设置主键id

        描述
        AUTO数据库 ID 自增
        NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
        ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
        ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

        @TableField

        • 描述:字段注解(非主键)
          @TableName("user")
          public class User {
              @TableId(type = IdType.AUTO)
              private Long id;
              @TableField("t_name")
              private String name;
              @TableField("t_pwd")
              private String password;
               @TableField("t_username")
              private String username;
                  
          //表示是否为数据库字段,在进行mybatis-plus封装的CRUD时,不会携带这个字段进行数据库的查询
              @TableField(exist=false)
                 //自定义类型
                  private Dept dept;
          }
          属性默认值描述
          value""数据库字段名
          existtrue是否为数据库表字段
          condition""字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s}
          update""字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)

          上述表格中,只有前两个最常用,其他的看看就行,一般不用

          @KeySequence  

          • 描述:序列主键策略 oracle
          • 属性:value、dbType
            属性默认值描述
            value""序列名
            dbTypeDbType数据库类型,未配置默认使用注入 IKeyGenerator 实现,多个实现必须指定

            好了,上述就是最常用的注解,如果想看更多前往官网地址:注解 | MyBatis-Plus (baomidou.com)

             四、Mybatis-Plus之分页插件

            1、config配置

            使用mybatis-plus的分页时,必须配置config,否者分页插件不生效

            @Configuration
            public class MyBaitsPlusConfig {
                    //配置分页插件
                    @Bean
                    public MybatisPlusInterceptor mybatisPlusInterceptor() {
                        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
                        //数据库类型是MySql,因此参数填写DbType.MYSQL
                        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
                        return interceptor;
                    }
            }

            2、 分页的使用

            2.1、mybaits-plus自带的分页查询

            @Service
            public class UserServiceImpl extends UserImpl implements UserService {
                @Autowired
                UserMapper userMapper;
                @Override
                public Page memberList(Integer pageNum, User user) {
                    /**
                        在查询之前实例化Page(当前页,每页显示的个数) 
                        page实体类创建完成之后,会将你查询出来的结果封装到里边的records属性中
                            使用getRecords()方法调用
                       */
                    Page page = new Page(pageNum,5);
                        //mybatis-plus自带的单表分页查询
                        /**
                        selectPage(P page, @Param(Constants.WRAPPER) Wrapper queryWrapper)
                            参数1:一个分页对象
                            参数2:表示分页查询的条件,如果没有可以为null
                    */
                     userMapper.selectPage(page, null);
                    /**-------带条件的分页查询-----
                     QueryWrapper queryWrapper =   new QueryWrapper();
                            queryWrapper.eq("数据库字段名称",对应传过来的实体类字段名称) //精准查询
                                            //模糊查询
                                        .like("数据库字段名称",对应传过来的实体类字段名称);
                      userMapper.selectPage(page, queryWrapper);
                        */
                    return page;
                }
            }

            2.2、自定义分页

            自定义分页的时候就涉及到了连表的查询,这个时候我们就要自己自定义分页!

            2.2.1、自定义mapper接口

            @Repository
            public interface UserMapper extends BaseMapper {
                //注意分页参数的分页,一定要在第一个参数
                Page userList(IPage page, @Param("user")User user);
            }
            //对应的xml文件自己写
            

            2.2.2、service实现自定义分页

            @Service
            public class UserServiceImpl extends UserImpl implements UserService {
                @Autowired
                UserMapper userMapper;
                @Override
                public Page memberList(Integer pageNum, User user) {
                    /**
                        在查询之前实例化Page(当前页,每页显示的个数) 
                        page实体类创建完成之后,会将你查询出来的结果封装到里边的records属性中
                            使用getRecords()方法调用
                       */
                    Page page = new Page(pageNum,5);
                     memberBrMapper.memberList(page, user);
                    return page;
                }
            }

            五、Mybatis-plus逆向工程

            #联合mybatisplus使用
            
                com.baomidou
                mybatis-plus-generator
                3.5.1
            
            
                org.freemarker
                freemarker
                2.3.31
            
            public class FastAutoGeneratorTest {
            public static void main(String[] args){
                FastAutoGenerator.create("jdbc:mysql://localhost:3306/自己的表名", 用户名, 密码)
                        .globalConfig(builder -> {
                            builder.author("wdc") // 设置作者
            //                        .enableSwagger() // 开启 swagger 模式
                                    .fileOverride() // 覆盖已生成文件
                                    
                                    .outputDir("D://springbootcards"); // 指定输出目录
                        })
                        .packageConfig(builder -> {
                            builder.parent("com.atdession") // 设置父包名
                                    .moduleName("springbootcards") // 设置父包模块名
                                        .entity("entity") //都是设置名称的
                                        .service("service")
                                        .serviceImpl("service.impl")
                                        .controller("controller")
                                        .mapper("mapper")
                                        .xml("mapper")
                                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://springbootcards")); // 设置mapperXml生成路径
                        })
                        .strategyConfig(builder -> {
                            builder.addInclude("user","dept"); // 设置需要生成的表名
                                 .serviceBuilder().formatServiceFileName("%sService");//设置去掉Service的前缀I
            //                        .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                        })
                        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                        .execute();
            }
            }

             

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]