【精简版】MyBatis-Plus学习笔记
⽂章⽬录
1、前⾔
该技术博客中内容,是关于B站楠哥教程的笔记总结,希望能为⼤家带来帮助,参考链接如下:
2、什么是MyBatis-Plus
它是国产的开源框架,中国⼈设计的,基于Mybatis。可以理解为在Mybatis框架的基础上进⾏⼆次封装。使得Mybatis框架使⽤更加⽅便。
核⼼功能就是:简化Mybatis开发,提⾼效率!
优点如下:
⽆侵⼊:只做增强不做改变,引⼊它不会对现有⼯程产⽣影响,如丝般顺滑
损耗⼩:启动即会⾃动注⼊基本 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 操作智能分析阻断,也可⾃定义拦截规则,预防误操作
3、MyBatis-Plus快速⼊门
3.1 准备⼯作
本次的Mybatis-Plus快速⼊门,我们使⽤SpringBoot + Mybatis-Plus⽅式,所以第⼀步操作我们需要创建⼀个SpringBoot项⽬,选中的依赖如下:
然后我们需要⼿动导⼊MyBatis-Plus依赖:
<!--MyBatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.p</version>
</dependency>
修改l⽂件:
spring:
datasource:
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8 username: root
password: root
# 打印⽇志信息
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
创建数据库mybatis,添加⼀张user表:
CREATE TABLE`user`(
`id`bigint(100)NOT NULL AUTO_INCREMENT,
`name`varchar(10)DEFAULT NULL,
`age`int(10)DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=5DEFAULT CHARSET=utf8
3.2 操作流程
3.2.1 根据user表创建实体类
package ity;
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
3.2.2 创建Mapper接⼝
package batisplus.mapper;
import apper.BaseMapper;
import ity.User;
public interface UserMapper extends BaseMapper<User>{
//BaseMapper接⼝中定义了许多操作数据(CRUD)的⽅法,我们可以直接调⽤
//该接⼝的实现类是动态⽣成的。只要程序运⾏就会动态⽣成对应的实现类对象【反射机制】}
3.2.3 进⾏测试
package batisplus.mapper;
import ity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.st.context.SpringBootTest;
import java.util.List;
@SpringBootTest//启动Spring容器,可以获取到容器中的bean
class UserMapperTest {
@Autowired
//依赖注⼊之前需要在启动类上进⾏包扫描操作:
//@MapperScan("batisplus.mapper"):将mapper接⼝的bean扫描到ioc容器中
private UserMapper mapper;
@Test
public void test(){
//查询user表中所有数据
List<User> users = mapper.selectList(null);
for(User user : users){
System.out.println(user);
}
}
}
控制台结果:
User(id=1, name=张三, age=20)
User(id=2, name=李四, age=21)
User(id=3, name=王五, age=22)
4、MyBatis-Plus 常⽤注解
4.1 @TableName
作⽤:映射数据库中的表名
思考⼀个问题,我们使⽤Mybatis-Plus框架的过程中,程序如何知道我们想要查哪张表的数据呢?其实是通过类名查的,框架会⾃动查实体类对应的表。
那么当我们的实体类名和表名不⼀致时,再次运⾏程序⼀定会报错。这时候我们就可以使⽤@TableName注解进⾏映射,代码如下:package ity;
import batisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")//参数为表名
public class Account {
private Long id;
private String name;
private Integer age;
}
4.2 @TableId
作⽤:
1. value:映射主键字段
2. type:设置主键类型(主键⽣成策略)
AUTO:主键⾃增,开发者⽆需赋值
NONE(默认):设置主键,通过雪花算法实现
INPUT:主键需要开发者⼿动赋值,如果没有⼿动赋值,则通过⾃增⽅式赋值
ASSIGN_ID:主键类型为Long、Integer、String,通过雪花算法⾃动赋值
ASSIGN_UUID:主键的数据类型为String,⾃动⽣成UUID进⾏赋值
package ity;
import batisplus.annotation.IdType;
import batisplus.annotation.TableField;
import batisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
//@TableId(type = IdType.ASSIGN_ID)
/
/@TableId(type = IdType.AUTO)
//@TableId(type = IdType.INPUT)
//@TableId(type = IdType.ASSIGN_UUID)
private Long id;
private String name;
private Integer age;
}
4.3 @TableField
作⽤:
1. value:映射⾮主键字段
2. exist:表⽰该字段是否为数据库字段。如果实体类中的成员变量在数据库中没有对应的字段,则可以使⽤exist设置为false
3. select:表⽰是否查询该字段,设置为false就不会查询
4. fill:表⽰是否⾃动填充,将对象存⼊数据库的时候,由MP⾃动给某些字段赋值,例如:create_time,update_time
给表添加两个字段:create_time,update_time
给实体类添加两个成员变量
package ity;
import batisplus.annotation.FieldFill;
import batisplus.annotation.TableField;
import batisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
@Data
public class User {
@TableId
private Long id;
@TableField(value ="name", select =false)
private String title;
private Integer age;
@TableField(exist =false)
private String gender;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
创建⾃动填充处理器
package batisplus.handler;
import handlers.MetaObjectHandler;
import org.flection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject){
springboot推荐算法this.setFieldValByName("createTime",new Date(), metaObject);
this.setFieldValByName("updateTime",new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject){
this.setFieldValByName("updateTime",new Date(), metaObject);
}
}
4.4 @Version
作⽤:标记乐观锁,通过version字段来保证数据的安全性,当修改数据时,会把version作为条件,当条件成⽴时才会修改成功
1. ⾸先给user表添加字段version,默认值为1
2. 给实体类添加成员变量version,并添加@Version
package ity;
import batisplus.annotation.FieldFill;
import batisplus.annotation.TableField;
import batisplus.annotation.TableId;
import batisplus.annotation.Version;
import lombok.Data;
import java.util.Date;
@Data
public class User {
@TableId
private Long id;
@TableField(value ="name", select =false)
private String title;
private Integer age;
@TableField(exist =false)
private String gender;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
}
3. 注册配置类
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论