Mybatis-Plus笔记

学习目标:Mybatis-Plus

  • 掌握mybatis-Plus内容

学习内容:

  • 引入依赖:
<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus-boot-starter</artifactId>
		<version>3.0.5</version>
</dependency>
  • 配置数据库信息:application.properties
#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus
spring.datasource.username=root
spring.datasource.password=root
  • 继承接口:mybatis中,mapper一般为一个接口对应一个xml文件,使用mybais-plus无需xml文件,接口继承BaseMapper即可,需添加泛型
import com.atguigu.mpdemo1010.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
// BaseMapper中封装了常用的各种增删改查方法,不用再写,直接用即可
}
  • MapperScan注解:
    @Mapper注解:
    作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
    添加位置:接口类上面
    如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan
    @MapperScan
    作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
    添加位置:是在Springboot启动类上面添加,
@SpringBootApplication
@MapperScan("com.atguigu.mpdemo1010.mapper")//指定接口所在的包,即可自动生成实现类
public class Mpdemo1010Application {

    public static void main(String[] args) {
        SpringApplication.run(Mpdemo1010Application.class, args);
    }

}
  • 单元测试:
@SpringBootTest
@MapperScan("com.atguigu.mpdemo1010.mapper")
public class Mpdemo1010ApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void contextLoads() {

        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }

}
  • sql日志:在application.properties文件中加如下配置即可输出具体sql执行日志
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

sql日志

  • mybatis-plus添加记录时,无需设置主键,自动添加19位主键id
  • 如何设置主键生成策略?
    答:在实体字段中添加配置:@TableId(type = idType.AUTO)
    idType.AUTO:自动增长
    IdType.ID_WORKER:Mybatis-plus自带策略,会生成19位的值,数字类型使用这种策略,比如lang
    IdType.ID_WORKER_STR:Mybatis-plus自带策略,生成19位的值,类型是字符串
    IdType.INPUT:不自动生成,需手动设置
    IdType.NONE:无策略,需手动设置
    IdType.UUID:生成随机的唯一值
    在这里插入图片描述
  • 自动填充功能:一般时间等信息无需手动设置,自动填充即可
    • 表添加字段
    • 实体类添加属性
    • 需自动填充的属性添加注解
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
  • 创建功能类
 @Repository
public class MyMetaObjectHandler implements MetaObjectHandler {

    //MP实现一个添加操作,这个方法会执行
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
  • 乐观锁:解决更新丢失问题
    • 表中加version字段
    • 实体类加version字段,并添加@Version注解
    • 配置乐观锁插件即可实现乐观锁功能
    • 需要先查询,在修改
    @Test
    public void testLocker() throws InterruptedException {
        User user = userMapper.selectById(1524362490937421825L);
        user.setAge(100);
        int i = userMapper.updateById(user);
        System.out.println("修改了" + i + "条数据");
    }
  • 分页查询:PageHelper/MP自带分页
    • 配置分页插件
    • 编写分页代码
      • 直接newPage对象,传入两个参数,当前页和每页记录条数
      • 调用MP的方法即可实现分页功能
	/**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

//测试代码
@Test
    public void testPage(){
        //两个参数:当前页,每页展示记录条数
        Page objectPage = new Page(3,3);
        //两个参数:page对象,条件
        userMapper.selectPage(objectPage,null);
        System.out.println(objectPage.getCurrent());//当前页
        System.out.println(objectPage.getRecords());//每页数据list集合
        System.out.println(objectPage.getSize());//每页显示记录数
        System.out.println(objectPage.getTotal());//总记录数
        System.out.println(objectPage.getPages());//总页数
        
        System.out.println(objectPage.hasNext());//是否有下一页
        System.out.println(objectPage.hasPrevious());//是否有上一页
    }
  • 逻辑删除:删除分为物理删除和逻辑删除

    • 物理删除:真实删除,将对应的数据从数据库中删除,之后查询不到这条被删除的数据
    • 逻辑删除:假删除,将对应的数据中,是否被删除字段的状态修改为“被删除状态”,在数据库中该条记录仍存在。
  • 逻辑删除实现步骤

    • 在数据库表中添加删除状态字段
    • 实体类添加对应属性并添加@TableLogic注解
    • 添加逻辑删除插件
    • application.properties配置文件添加配置判断节点值为几表示状态(一般默认即可(0=不删除,1=删除),不用添加,可在配置文件修改)
  • 性能分析:用于输出每条sql语句及其执行时间,一般在开发环境中使用,若超过指定时间则停止运行,有助于发现问题

    • 在配置类中加性能分析插件
    • 在application.properties文件中设置生效环境
  • MP实现条件查询:一般使用QueryWrapper实现条件查询
    在这里插入图片描述

    • 创建QueryWrapper对象
    • 通过对象设置条件
    • 一般第一个参数是String类型的,表示字段名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值