MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
一般的springboot开发 pojo-mapper-service-controller 引入mybatis-plus则不同,不用再编写繁琐的crud代码和
新建springboot项目,其中的maven配置
<dependencies>
<!-- 数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
编写配置文件连接数据库 application.properties
# Mysql 8比5多了个配置 serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
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
在idea中连接数据库
根据数据库编写pojo类
编写mapper包 UserMapper接口 要继承BaseMapper<泛型类对象,编写哪个类的接口就写那个类名>
(重要)在主函数中添加Mapperscan扫描mapper包
测试类
由于UserMapper接口继承了BaseMapper类,就可以用其中的方法
结果
注意其中没有编写任何一条sql语句
配置日志
输出
-----------------------------------------------------------------------------------------------------------------------
插入
主键生成策略
分布式系统唯一id生成 :https://blog.youkuaiyun.com/lianghecai52171314/article/details/120875656
(上面id自动生成的原因)
Twitter的snowflake算法(雪花算法)
MyBatisPlus主键自动赋值使用的是这个算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
配置主键自增方式(数据库表中一定要设置主键自增,不然会报错)
在实体类中添加注解 默认为ID_WORKER
IdType为枚举类,字段对应的表示如下
-----------------------------------------------------------------------------------------------------------------------
更新
此处setID要写需要更新的那个id位置。所有的sql都是自动动态配置的。
自动填充
阿里巴巴开发手册规定:所有数据库表要有:gmt_create创建时间 gmt_modified 修改时间 需要自动化实现
方式一:数据库级别(工作中无法用,一般不允许操作数据库)
1、在表中新增字段
2、再次测试插入方法,需要在实体类添加这两个字段
现在更新时间会自动地改变
方式二:代码级别
1、 把之前写的数据库全去掉,只留下两个字段名字,通过代码方式改变时间
2、要加入注解
3、编写处理器来处理注解
4、测试插入修改时间,发现都自动更新了
-----------------------------------------------------------------------------------------------------------------------
查询
条件查询要使用selectByMap(map); 把要查询的条件放进一个map集合中进行查询。map集合中key是数据库的字段,value是查询条件。
-----------------------------------------------------------------------------------------------------------------------
分页查询
配置拦截器插件
这是3.0版本的,3.4版本更新了,详情去官网查看
会在分页查询前,先查询总数。
-----------------------------------------------------------------------------------------------------------------------
删除
逻辑删除
物理删除:从数据库中直接移除
逻辑删除:在数据库中没有被移除,而是通过一个变量让它失效,查询不到
加个字段delete,逻辑删除时,让delete= 1,默认为0,查询时带deleted条件查询,deleted is not 1
应用场景:管理员可以看见用户删除的数据,数据库中还在,但是用户查询不到了
1、数据库中添加字段
2、在实体类中添加字段和注解
3、在config中添加插件
4、在application.properties中配置
5、测试
逻辑删除语法和普通删除一样,但是本质是更新操作,数据库执行语句是update,数据库记录不会消失。
现在已经查询不到了,查询时候回自动拼接delete条件,根据properties中设置的值查询