目录
一、简介
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 操作方法,非常方便我们操作
|
# 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
创建数据 库 创建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]'); |
# 数据库地址
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
# 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 {
}
* 1.公共的方法进行抽取,抽取到BaseMapper接口中,将用户操作的方法对象,转化为数据库能够识别的SQL语句
|
注意:
IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。
为了避免报错,可以在 mapper 层 的接口上添加 @Repository 注
@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 文件都不用编写!
要想主键自增需要配置如下主键策略
需要在创建数据表的时候设置主键自增
实体字段中配置 @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
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用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);
}
}
首先配置分页在配置类 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 = userMapper.selectPage(userPage, null);
如果返回结果想要 集合:
// 封装 页码和每页的记录数
Page userPage = new Page(1,3);
// 分页查询的方法
Page
@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
MybatisPlus分页查询就这么简单,直接两行搞定,不需要SQL因为BaseMapper帮你做了crud