MybatisPlus是一款强大的Mybatis增强工具,提供了丰富的数据库操作功能和便捷的API,简化了开发人员的工作。本文将详细介绍MybatisPlus的各项特性和使用方法,帮助读者快速上手。文章涵盖了从依赖配置、实体类创建到基本CRUD操作、动态SQL使用及自定义扩展等内容,提供了详尽的示例代码和说明。
MybatisPlus简介
1.1 MybatisPlus是什么
MybatisPlus是一个Mybatis的增强工具,它在Mybatis的基础上提供了大量的便捷功能,简化了开发人员的编码工作。MybatisPlus追求简单、快速、优雅的开发体验,旨在快速、更优雅地完成CRUD操作。它内置了常用的数据库操作方法,支持Lambda语法,支持分页、动态SQL等特性。
1.2 MybatisPlus的优点
- 简单易用:MybatisPlus提供了大量的便捷方法,使得数据库操作变得简单且优雅。
- 高扩展性:MybatisPlus支持自定义逻辑删除、自定义填充策略等扩展功能,可以根据项目需求进行定制。
- 高性能:MybatisPlus使用了缓存、分页等特性,能够提高数据库操作的性能。
- 丰富的功能:支持多表联查、动态SQL、自定义SQL等高级功能。
- 强大的插件生态:MybatisPlus拥有丰富的插件和扩展,可以方便地集成第三方工具和服务。
1.3 MybatisPlus与Mybatis的区别
MybatisPlus是基于Mybatis的一套增强工具,而Mybatis是一个持久层框架,它支持自定义SQL、存储过程等数据库操作,提供了强大的灵活性和可配置性。MybatisPlus在Mybatis的基础上,提供了更加便捷的操作方式,例如:
- 内置的CRUD操作:MybatisPlus提供了大量的内置方法,如
save()
、updateById()
、deleteById()
等,使得数据库操作变得更加方便。 - 动态SQL:MybatisPlus支持动态SQL的构造,可以通过条件构造器轻松生成复杂的SQL语句。
- 分页插件:MybatisPlus内置了分页插件,可以方便地实现分页查询,而Mybatis则需要手动实现分页逻辑。
- 自定义扩展:MybatisPlus支持自定义逻辑删除、自定义填充策略等功能,而Mybatis则需要自行实现这些功能。
- 缓存:MybatisPlus提供了缓存功能,可以提高查询效率,而Mybatis则需要自行配置和管理缓存。
MybatisPlus快速入门
2.1 添加依赖
要使用MybatisPlus,首先需要在项目中添加相应的依赖。以下是Maven项目中的依赖配置:
<dependencies>
<!-- MybatisPlus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- MySQL驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!-- Spring Boot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2 配置MybatisPlus
接下来需要在Spring Boot的配置文件application.yml
中配置数据库连接信息和MybatisPlus相关配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.example.demo.entity # 实体类所在的包名
2.3 创建实体类
实体类是MybatisPlus进行数据库操作的基础。以下是一个简单的实体类示例:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
// 省略getters和setters方法
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;
}
}
基本CRUD操作
3.1 新增数据
MybatisPlus提供了save()
方法用于新增数据。以下是一个示例代码:
@Autowired
private UserMapper userMapper;
public void insertUser() {
User user = new User();
user.setName("张三");
user.setAge(25);
userMapper.insert(user);
}
3.2 查询数据
MybatisPlus提供了selectById()
方法用于查询单条数据。以下是一个示例代码:
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.selectById(id);
}
3.3 更新数据
MybatisPlus提供了updateById()
方法用于更新数据。以下是一个示例代码:
@Autowired
private UserMapper userMapper;
public void updateUser() {
User user = userMapper.selectById(1L);
user.setName("李四");
user.setAge(30);
userMapper.updateById(user);
}
3.4 删除数据
MybatisPlus提供了deleteById()
方法用于删除数据。以下是一个示例代码:
@Autowired
private UserMapper userMapper;
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
动态SQL使用
4.1 条件构造器
条件构造器允许你通过代码动态构建SQL语句。以下是一个使用条件构造器的示例:
@Autowired
private UserMapper userMapper;
public List<User> getUsersByCondition(Integer age, String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (age != null) {
queryWrapper.eq("age", age);
}
if (name != null) {
queryWrapper.like("name", name);
}
return userMapper.selectList(queryWrapper);
}
4.2 多表查询
MybatisPlus支持多表查询,可以使用select()
方法实现。以下是一个多表联查的示例:
@Autowired
private UserMapper userMapper;
public List<User> getUsersWithRoles() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("user.id", "user.name", "user.age", "role.name as roleName")
.leftJoin("role", "role")
.on("user.id = role.user_id");
return userMapper.selectList(queryWrapper);
}
4.3 分页查询
MybatisPlus内置了分页插件,可以方便地实现分页查询。以下是一个分页查询的示例:
@Autowired
private UserMapper userMapper;
public Page<User> getUsersPage(Integer currentPage, Integer pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
return userMapper.selectPage(page, new QueryWrapper<User>());
}
MybatisPlus自定义扩展
5.1 自定义逻辑删除
MybatisPlus支持自定义逻辑删除字段,可以通过@TableField
注解来指定逻辑删除的字段。以下是一个示例:
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableField(fill = FieldFill.INSERT)
@TableLogic
private Boolean deleted;
// 省略getters和setters方法
}
5.2 自定义填充策略
MybatisPlus提供了MetaObjectHandler
接口,可以通过实现该接口来自定义填充策略。以下是一个示例:
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue("createUser", "admin");
metaObject.setValue("createTime", new Date());
metaObject.setValue("updateUser", "admin");
metaObject.setValue("updateTime", new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateUser", "admin");
metaObject.setValue("updateTime", new Date());
}
}
5.3 自定义SQL注解
MybatisPlus支持自定义SQL注解,可以通过@Select
、@Update
等注解来自定义SQL语句。以下是一个示例:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user WHERE name LIKE %${name}%")
List<User> selectByName(String name);
}
``
通过上述示例,你可以看到MybatisPlus提供了丰富的功能和便捷的API,大大简化了数据库操作的开发工作。希望这些内容能够帮助你快速入门并掌握MybatisPlus的使用方法。如有进一步需求,可以参考官方文档或查看相关课程进行更深入的学习。