MybatisPlus--基础入门!真滴方便

目录

一、简介

2.特性

二、入门

1.创建springboot 项目(点击查看如何创建 )

注意:引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题

2.数据准备

3.配置application.yml

4.代码

BaseMapper<>很重要!它封装了常用的 CRUD 操作

5.创建 测试类

三、主键策略&自动填充

1.自增策略

要想影响所有实体的配置,可以设置全局主键配置

2.自动填充

项目结构展示(还没写完)

三、MybatisPlus分页查询

 以下是完整的测试代码:


一、简介

Mybatis-Plus简称 MP 是一个mybatis的增强工具,在mybatis的基础上只做增强,不做改变,为简化开发 提高效率而生,MP 提供了代码生成器,可以一键生成controller service mapper model mapper.xml 代码,同时 提供丰富的CRUD 操作方法,非常方便我们操作

2.特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

  • 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

二、入门

1.创建springboot 项目(点击查看如何创建 )

# pom 文件 


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.10.RELEASE
         
    
    com.zhp
    sbdemo1
    0.0.1-SNAPSHOT
    sbdemo1
    sbdemo1
    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
        
			mysql
			mysql-connector-java
			runtime
		
		
        
            org.projectlombok
            lombok
            true
        


        
       
			com.baomidou
			mybatis-plus-boot-starter
			3.4.2
		


		
		
			com.baomidou
			mybatis-plus-generator
			3.3.2
		
		
		
			org.apache.velocity
			velocity
			1.7
		
		
		
		
			com.baomidou
			mybatis-plus-extension
			3.4.2
		


    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

注意:引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题

2.数据准备

创建数据 库  创建User 表

DROP TABLE IF EXISTS user;

CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) );

其对应的数据库 Data 脚本如下:

DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, '[email protected]'), (2, 'Jack', 20, '[email protected]'), (3, 'Tom', 28, '[email protected]'), (4, 'Sandy', 21, '[email protected]'), (5, 'Billie', 24, '[email protected]');

3.配置application.yml

# 数据库地址
datasource:
  url: localhost:3306/java

spring:
  #  profiles:
  #    active: dev
  #数据库的配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${datasource.url}?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    username: root
    password: 123456

#mp的配置
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: 1
      logic-not-delete-value: 0
      id-type: auto  # 设置全局主键自增

  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl        #  查看sql输出日志
    map-underscore-to-camel-case: true              # 驼峰命名规范   stu_name stuName
  mapper-locations: classpath:mapper/*.xml   # 指定映射文件所在位置
  #  指定别名设置的包
  type-aliases-package: com.zhp.sbdemo1.pojo

# 查看sql语句的日志
logging:
  level:
    com.zhp.sbdemo1.mapper: debug
server:
  port: 8888

4.代码

# 1.启动类
#启动类添加 @MapperScan 注解  ,扫描mapper 包下的接口

/**
 * 这类也算是 配置类
 *
 * @SpringBootConfiguration
 * @EnableAutoConfiguration
 *
 * 1.添加mp依赖
 * 2.在 application.yml 中配置
 * 3.创建mapper 继承BaseMapper接口,这个接口封装了常用的增删改查方法,可以直接调用
 * */
@SpringBootApplication  // 忽略数据源的自动配置
@MapperScan("com.zhp.sbdemo1.mapper")
public class Sbdemo1Application {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }

}

#2.实体类  在pojo 下 创建User.java  使用lombok 简化代码
@Data
public class User {
    //@TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

#3. 创建mapper 包  创建UserMapper 接口 UserMapper.java
@Repository
public interface UserMapper extends BaseMapper {
}

BaseMapper<>很重要!它封装了常用的 CRUD 操作

* 1.公共的方法进行抽取,抽取到BaseMapper接口中,将用户操作的方法对象,转化为数据库能够识别的SQL语句
* 2.通过userMapper查找父级接口BaseMapper
* 3.根据BaseMapper查找泛型对象User对象
* 4.根据user对象查找指定的注解@TableName,获取表名,默认是匹配和实体类名字一样的表,
//@TableName("t_users")     // 指定插入到哪个表,不写就自动映射到数据库中与实体类名字相同的表中


* 5.根据user对象的属性,动态获取表中的字段
* 6.在获取字段的同时,获取属性的值,最后进行SQL的拼接
* 7.MP将拼接好的SQL交给Mybatis框架处理执行

注意:

IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。

为了避免报错,可以在 mapper 层 的接口上添加 @Repository 注

5.创建 测试类

@SpringBootTest
class UserMapperTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList() {

        //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
        //所以不填写就是无任何条件
        List users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}    

通过以上几个简单的步骤,我们就实现了 User 表的 基本查询 功能,甚至连 XML 文件都不用编写!

三、主键策略&自动填充

1.自增策略

要想主键自增需要配置如下主键策略

  • 需要在创建数据表的时候设置主键自增

  • 实体字段中配置 @TableId(type = IdType.AUTO)

// 使用 数据库的 自增策略       默认是 IdType.ID_WORKER    雪花算法生成的id
@TableId(type = IdType.AUTO)      
private Long id;

要想影响所有实体的配置,可以设置全局主键配置

application.yml中添加
#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto

2.自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:

1.数据库表中添加自动填充字段

在User表中添加datetime类型的新的字段 create_time、update_time

2.实体上添加注解

@Data public class User { ......

@TableField(fill = FieldFill.INSERT) // 添加时 赋值 private Date createTime;

//@TableField(fill = FieldFill.UPDATE) 修改时 赋值

@TableField(fill = FieldFill.INSERT_UPDATE) // 添加 和 修改 都会赋值

private Date updateTime;

}

3.实现元对象处理器接口 注意:不要忘记添加 @Component 注解

@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("insert info ......");
        // 添加时填充
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
        // 添加 乐观锁的  默认值是 1
        this.setFieldValByName("version", 1, metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("update info ......");
        this.setFieldValByName("updateTime", new Date(), metaObject);

    }
}

项目结构展示(还没写完)

MybatisPlus--基础入门!真滴方便_第1张图片

MybatisPlus--基础入门!真滴方便_第2张图片

 

三、MybatisPlus分页查询

首先配置分页在配置类 MybatisPlusConfig 

@EnableTransactionManagement
@Configuration
@MapperScan("com.zhp.sbdemo1.mapper")
public class MybatisPlusConfig {

    // 配置这个拦截器 可以帮助我们实现 乐观锁、分页等功能
    @Bean
    public MybatisPlusInterceptor optimisticLockerInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加分页拦截器  --- 分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);

        // 添加乐观锁拦截器 --- 乐观锁插件
        OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor = new OptimisticLockerInnerInterceptor();

        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor);

        return interceptor;
    }

  

}

在controller方法中,先写上: Page userPage = new Page<>(1,3);

 如果返回结果想要 对象:userPage = userMapper.selectPage(userPage, null);

 如果返回结果想要 集合

 // 封装 页码和每页的记录数
        Page userPage = new Page(1,3);
        // 分页查询的方法
        Page> page1 = userMapper.selectMapsPage(userPage, null);

 以下是完整的测试代码:

 @Test
    // 结果封装为 实体类对象 方式
// 结果为:   [User(id=1, name=小萝卜, password=123456), User(id=2, name=小溪, password=123, User(id=3, name=张小溪, password=222)]
    public void testSelectPage(){
        // 封装 页码和每页的记录数
        Page userPage = new Page<>(1,3);
        // 分页查询的方法
        userPage = userMapper.selectPage(userPage, null);
        List records = userPage.getRecords();
        System.out.println(records);
    }

    @Test
    // 结果封装为 键值(map) 方式
//  结果为: [{password=123456, name=小萝卜, id=1}, {password=123, name=小溪, id=2}, {password=222, name=张小溪, id=3}]
    public void testSelectMapsPage(){
        // 封装 页码和每页的记录数
        Page userPage = new Page(1,3);
        // 分页查询的方法
        Page> page1 = userMapper.selectMapsPage(userPage, null);
        List> records = page1.getRecords();
        System.out.println(records);
    }

MybatisPlus分页查询就这么简单,直接两行搞定,不需要SQL因为BaseMapper帮你做了crud

你可能感兴趣的:(Java,mybatis,java,spring,mybatisplus)