MyBatisPlus使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、MyBatisPlus使用前配置
    • 1. MyBatisPlus导入对应的依赖
    • 2.连接数据库
    • 3. 配置日志
  • 二、主键策略
  • 三、自动填充
  • 四、分页查询
  • 五、逻辑删除
  • 六、性能分析插件



提示:以下是本篇文章正文内容,下面案例可供参考

一、MyBatisPlus使用前配置

1. MyBatisPlus导入对应的依赖

代码如下 :

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis-plus -->
<!-- mybatis-plus 是自己开发,并非官方的! -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>

说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatisplus!版本的差异!

2.连接数据库

连接数据库!这一步和 mybatis 相同!(application.properties)

mysql 5 驱动不同 com.mysql.jdbc.Driver
mysql 8 驱动不同com.mysql.cj.jdbc.Driver、需要增加时区的配置

serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?
useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3. 配置日志

我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所以我们必须要看日志!
配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,你们就会喜欢上 MyBatis-Plus
(application.properties)

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

二、主键策略

数据库插入的id的默认值为:全局的唯一id(type = IdType.ID_WORKER)

我们需要配置主键自增:

public enum IdType {
AUTO(0), // 数据库id自增
NONE(1), // 未设置主键
INPUT(2), // 手动输入
ID_WORKER(3), // 默认的全局唯一id
UUID(4), // 全局唯一id uuid
ID_WORKER_STR(5); //ID_WORKER 字符串表示法
}

实体类主键Id字段上添加注解

 @TableId(type = IdType.AUTO)

三、自动填充

创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
需要自动化!

方式一:数据库级别(工作中不允许你修改数据库)
1、在表中新增字段 create_time, update_time
MyBatisPlus使用_第1张图片

方式二:代码级别
1、删除数据库的默认值、更新操作!
2、实体类字段属性上需要增加注解
3、编写处理器来处理这个注解即可!

创建的实体类

private Date createTime;
private Date updateTime;

在实体类上面添加注解

// 字段添加填充内容
@TableField(fill = FieldFill.INSERT)//INSERT时更新时间
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)//INSERT_UPDATE时更新时间
private Date updateTime;

编写处理器来处理这个注解 (新建handler包)

package com.kuang.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component // 一定不要忘记把处理器加到IOC容器中!
public class MyMetaObjectHandler implements MetaObjectHandler {
	// 插入时的填充策略
	@Override
	public void insertFill(MetaObject metaObject) {
		log.info("start insert fill.....");
		// setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject
		this.setFieldValByName("createTime",new Date(),metaObject);
		this.setFieldValByName("updateTime",new Date(),metaObject);
}
	// 更新时的填充策略
	@Override
	public void updateFill(MetaObject metaObject) {
		log.info("start update fill.....");
		this.setFieldValByName("updateTime",new Date(),metaObject);
	}
}

4、测试插入
5、测试更新、观察时间即可!

四、分页查询

分页在网站使用的十分之多!
1、原始的 limit 进行分页
2、pageHelper 第三方插件
3、MP 其实也内置了分页插件!

1、配置拦截器组件即可(新建config包)

// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

2、直接使用Page对象即可!

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

五、逻辑删除

物理删除 :从数据库中直接移除
逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1
管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!

1、在数据表中增加一个 deleted 字段
2、实体类中增加属性

@TableLogic //逻辑删除
private Integer deleted;

3、配置!(新建config包)

// 逻辑删除组件!
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
// 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

六、性能分析插件

我们在平时的开发中,会遇到一些慢sql。测试! druid,
作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间
MP也提供性能分析插件,如果超过这个时间就停止运行!
1、导入插件
记住,要在SpringBoot中配置环境为dev或者 test 环境!(application.properties)

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

2、测试使用!

/**
* SQL执行效率插件
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new
PerformanceInterceptor();
performanceInterceptor.setMaxTime(100); // ms设置sql执行的最大时间,如果超过了则不
执行
performanceInterceptor.setFormat(true); // 是否格式化代码
return performanceInterceptor;
}
@Test
void contextLoads() {
// 参数是一个 Wrapper ,条件构造器,这里我们先不用 null
// 查询全部用户
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}

使用性能分析插件,可以帮助我们提高效率!

新建config包

package com.kuang.config;

// 扫描我们的 mapper 文件夹
@MapperScan("com.kuang.mapper")
@EnableTransactionManagement
@Configuration // 配置类
public class MyBatisPlusConfig {

    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    // 分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return  new PaginationInterceptor();
    }

    // 逻辑删除组件!
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
    /**
     * SQL执行效率插件
     */
    @Bean
    @Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(100); //ms 设置sql执行的最大时间,如果超过了则不执行
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
}

你可能感兴趣的:(java汇总,Mybatis,mybatis)