MybatisPlus是一个强大的Mybatis增强工具,提供了包括CRUD操作、自动填充和高性能分页在内的多种便捷功能,极大地简化了数据库开发过程。本文将详细介绍MybatisPlus的安装配置、基本CRUD操作、自定义查询及自动填充等特性,帮助读者快速掌握MybatisPlus的使用方法。
MybatisPlus简介 MybatisPlus的基本概念MybatisPlus是一个基于Mybatis的增强工具,它提供了多种便捷操作,包括CRUD操作、分页插件等。MybatisPlus不仅简化了Mybatis的工作,还提升了开发效率。它支持所有Mybatis提供的查询方法,并在此基础上进行了功能扩展,使得开发过程更加简洁和高效。
MybatisPlus的优势和特点- 简化CRUD操作:MybatisPlus提供了丰富的CRUD操作方法,覆盖了大部分常见的数据库操作需求,减少了大量重复代码的编写。
- 高性能:MybatisPlus通过优化SQL执行效率,大大提高了数据库访问性能。
- 自动填充:支持创建时间和更新时间的自动填充,也支持自动填充其他字段。
- 分页插件:内置分页插件,可以非常方便地进行分页查询操作。
- 动态SQL:支持自定义SQL语句,可以根据需要灵活生成SQL逻辑。
- 简单的CRUD操作:通过简单的注解配置,就可以完成复杂的数据库操作逻辑。
- 相同点:MybatisPlus是基于Mybatis开发的,支持Mybatis的所有功能,例如基本的增删改查。
- 不同点:MybatisPlus在Mybatis的基础上进行了功能增强,提供了更加高效的开发体验。例如,自动填充、高性能分页插件等。
MybatisPlus可以通过Maven或Gradle的方式进行下载和引入。
Maven和Gradle的依赖配置对于Maven项目,需要在pom.xml
文件中添加MybatisPlus的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
对于Gradle项目,需要在build.gradle
文件中添加MybatisPlus的依赖:
dependencies {
implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3'
}
数据库连接配置
在Spring Boot项目中,通常会在application.yml
或application.properties
文件中进行数据库连接配置。以下是application.yml
中的一个示例:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root
以下是application.properties
中的一个示例:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
在配置完成后,MybatisPlus将自动扫描并加载相关的数据源配置。
基本CRUD操作 实体类的定义实体类是MybatisPlus中的数据模型,通常对应于数据库表。下面是一个简单的用户Entity的示例:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
@TableName("user")
public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
// Getter and Setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
CRUD操作的基本使用
MybatisPlus提供了多种方法来执行基本的CRUD操作。下文将展示增删改查的基本使用示例。
插入操作
User user = new User();
user.setName("张三");
user.setAge(18);
user.setEmail("[email protected]");
userMapper.insert(user);
查询操作
User user = userMapper.selectById(1L);
更新操作
User user = new User();
user.setId(1L);
user.setName("李四");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.updateById(user);
删除操作
userMapper.deleteById(1L);
批量插入操作
List<User> users = new ArrayList<>();
users.add(new User("张三", 18, "[email protected]"));
users.add(new User("李四", 20, "[email protected]"));
userMapper.insertBatch(users);
批量更新操作
List<User> users = new ArrayList<>();
users.add(new User(1L, "张三", 18, "[email protected]"));
users.add(new User(2L, "李四", 20, "[email protected]"));
userMapper.updateBatchById(users);
条件构造器的使用
MybatisPlus的条件构造器QueryWrapper
和UpdateWrapper
可以用来构建复杂的查询和更新条件。下面是一个使用QueryWrapper进行复杂查询的示例:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
queryWrapper.le("name", "张三");
List<User> users = userMapper.selectList(queryWrapper);
使用UpdateWrapper
进行复杂更新操作的示例:
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("age", 18);
updateWrapper.le("name", "张三");
userMapper.update(null, updateWrapper);
自定义查询
MybatisPlus自定义SQL查询
MybatisPlus支持自定义SQL查询,可以使用@Select
注解来完成自定义查询。
@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAge(@Param("age") int age);
使用Lambda表达式进行查询
Lambda表达式可以简化查询条件的编写,提高代码的可读性。以下是使用Lambda表达式进行查询的一个示例:
List<User> users = userMapper.lambdaQuery()
.eq(User::getAge, 18)
.le(User::getName, "张三")
.list();
复杂查询场景的处理
对于复杂的查询场景,可以通过组合多个条件来进行查询,例如多表关联查询等。
List<User> users = userMapper.lambdaQuery()
.eq(User::getAge, 18)
.le(User::getName, "张三")
.and(wrapper -> wrapper.eq(User::getEmail, "[email protected]"))
.list();
多表关联查询
这里提供一个多表关联查询的示例,使用@Select
注解和Lambda表达式。
@Select("SELECT * FROM user u JOIN order o ON u.id = o.user_id")
List<User> getUsersWithOrders();
List<User> users = userMapper.lambdaQuery()
.eq(User::getAge, 18)
.join(Order::getUserId, User::getId)
.list();
MybatisPlus的自动填充
创建时间、更新时间的自动填充
MybatisPlus内置了对创建时间和更新时间的自动填充功能。可以通过在实体类中加上@TableField(fill = FieldFill.INSERT)
或@TableField(fill = FieldFill.INSERT_UPDATE)
注解来实现。
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
@TableName("user")
public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
// Getter and Setter
}
其他字段的自动填充
除了创建时间和更新时间,MybatisPlus同样支持对其他字段的自动填充。例如,可以实现自己的字段填充策略。
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
@TableName("user")
public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Integer status;
// Getter and Setter
}
实际项目中的应用案例
在实际项目中,自动填充功能可以简化代码逻辑。例如,在插入新数据时,自动填充创建时间和更新时间;在更新数据时,仅更新更新时间。
User user = new User();
user.setName("张三");
user.setAge(18);
user.setEmail("[email protected]");
userMapper.insert(user);
在插入用户时,createTime
和updateTime
字段会被自动填充。
User user = new User();
user.setId(1L);
user.setName("李四");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.updateById(user);
在更新用户时,updateTime
字段会被自动更新。
MybatisPlus提供了内置的分页插件Page
,可以非常方便地进行分页查询操作。下面是一个分页查询的示例:
IPage<User> page = new Page<>(1, 10);
IPage<User> result = userMapper.selectPage(page, null);
分页查询的实际操作
通过Page
对象可以设置当前页和每页显示的数量。例如,查询第二页,每页显示10条记录:
IPage<User> page = new Page<>(2, 10);
IPage<User> result = userMapper.selectPage(page, null);
高级分页功能的配置
MybatisPlus的分页插件还支持配置一些高级功能,例如,可以通过Page
对象的setSearchCount
方法来控制是否查询总记录数。
IPage<User> page = new Page<>(1, 10);
page.setSearchCount(true);
IPage<User> result = userMapper.selectPage(page, null);
可以通过配置文件进行分页插件的详细配置,例如:
mybatis-plus.global-config.db-config.id-type=assign_id
mybatis-plus.global-config.db-config.id-type=assign_id
mybatis-plus.global-config.db-config.db-type=mysql
mybatis-plus.global-config.db-config.table-alias=true
mybatis-plus.global-config.db-config.log-visitor=true
mybatis-plus.global-config.db-config.id-type=auto
通过以上设置,可以更加灵活地控制分页查询行为,满足不同的业务需求。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章