MyBatisPlus是一个基于MyBatis的增强工具,旨在简化数据库操作并提升开发效率。它提供了多种便捷功能,如CRUD操作、条件构造器、分页插件和代码生成器等。MyBatisPlus不仅保留了MyBatis的所有特性,还增加了许多实用的新功能,使得数据库操作更加简单和高效。
MyBatisPlus简介 什么是MyBatisPlusMyBatisPlus是基于MyBatis的一个增强工具,旨在简化并提升MyBatis的使用体验。它通过提供一系列简洁的API接口,使得数据库操作更为便捷,同时也支持Lambda表达式,极大地方便了操作。MyBatisPlus保留了MyBatis的所有特性,并新增了更多功能。
MyBatisPlus的优势- 无侵入性:MyBatisPlus不改变MyBatis原有的开源协议,不修改MyBatis的源代码,以插件形式进行扩展。
- 简单:提供的CRUD操作更加简单,提供了一系列简洁的API接口,可以大幅度地减少开发人员的工作量。
- 增强支持:提供了包括分页插件、性能分析插件等在内的多种插件,使得开发人员可以根据需要选择合适的插件来增强功能。
- 支持Lambda表达式:支持Lambda表达式进行数据库操作,使得开发人员可以使用Lambda表达式来操作数据库,提高了开发效率。
- 代码生成器:提供了代码生成的功能,可以生成Mapper接口、实体类、Service接口以及Service实现类,使得开发人员可以更加方便地使用MyBatisPlus进行数据库操作。
- 性能优化:提供了一系列的性能优化功能,包括缓存、连接池等,使得开发人员可以更加方便地使用MyBatisPlus进行数据库操作。
MyBatisPlus基于MyBatis,提供了大量的扩展功能,如分页插件、性能分析插件等,同时也提供了代码生成器等便捷工具。MyBatisPlus是MyBatis的一个扩展,而不是替代品,它扩展了MyBatis的功能,使得开发人员可以更加方便地使用MyBatis进行数据库操作。
MyBatisPlus环境搭建 引入MyBatisPlus依赖在使用MyBatisPlus前,需要在项目的pom.xml文件中添加MyBatisPlus的依赖。以下是添加MyBatisPlus依赖的示例代码:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
配置MyBatisPlus相关配置文件
MyBatisPlus支持多种配置方式,包括XML配置文件和Java配置方式。在Spring Boot项目中,我们通常使用Java配置方式来配置MyBatisPlus。以下是一个简单的配置示例:
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.IdType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.Properties;
public class MyBatisPlusGenerator {
public static void main(String[] args) {
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL)
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8")
.setUsername("root")
.setPassword("password");
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java")
.setAuthor("yourname")
.setOpen(false)
.setFileOverride(true)
.setIdType(IdType.AUTO)
.setBaseResultMap(true);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example")
.setEntity("entity")
.setMapper("mapper")
.setXml("mapper/xml")
.setService("service")
.setServiceImpl("service/impl")
.setController("controller");
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setEntityLombokModel(true)
.setRestControllerStyle(true)
.setInclude("user")
.setNaming(NamingStrategy.underline_to_camel)
.setTablePrefix("t_")
.setDbColumnUnderline(true);
// 生成器配置
AutoGenerator mpg = new AutoGenerator();
mpg.setDataSource(dsc)
.setGlobalConfig(gc)
.setPackageInfo(pc)
.setStrategy(strategy)
.setCfg(new CfgConfig().setFileOverride(true));
mpg.execute();
}
}
创建数据库连接
在Spring Boot项目中,可以通过配置application.yml
文件来创建数据库连接。以下是一个简单的数据库连接配置示例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: com.example.entity
global-config:
db-config:
id-type: AUTO
table-underline: true
基本CRUD操作
MyBatisPlus简化了CRUD操作,使得开发人员可以更加方便地进行数据库操作。接下来,我们将详细介绍插入数据、查询数据、更新数据以及删除数据的操作。
插入数据插入数据是数据库操作中最基本的操作之一。MyBatisPlus提供了简洁的API接口来插入数据。以下是一个插入数据的示例:
- 定义实体类:
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
private Long id;
private String name;
private Integer age;
// Getters and Setters
}
- 定义Mapper接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
- 插入数据:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void insertUser() {
User user = new User();
user.setName("John");
user.setAge(25);
userMapper.insert(user);
System.out.println("插入数据成功");
}
}
查询数据
查询数据是数据库操作中最常见的操作之一。MyBatisPlus提供了多种查询方法,例如根据主键查询、条件查询等。以下是一个查询数据的示例:
- 根据主键查询:
public User getUserById(Long id) {
return userMapper.selectById(id);
}
- 条件查询:
public List<User> getUsersByAge(Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return userMapper.selectList(queryWrapper);
}
更新数据
更新数据是数据库操作中常见的操作之一。MyBatisPlus提供了多种更新方法,例如根据主键更新、条件更新等。以下是一个更新数据的示例:
- 根据主键更新:
public void updateUserById(Long id, Integer age) {
User user = new User();
user.setId(id);
user.setAge(age);
userMapper.updateById(user);
}
- 条件更新:
public void updateUserByAge(Integer oldAge, Integer newAge) {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("age", oldAge).set("age", newAge);
userMapper.update(null, updateWrapper);
}
删除数据
删除数据是数据库操作中常见的操作之一。MyBatisPlus提供了多种删除方法,例如根据主键删除、条件删除等。以下是一个删除数据的示例:
- 根据主键删除:
public void deleteUserById(Long id) {
userMapper.deleteById(id);
}
- 条件删除:
public void deleteUserByAge(Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
userMapper.delete(queryWrapper);
}
MyBatisPlus条件构造器
MyBatisPlus提供了条件构造器来构建复杂的查询条件。通过条件构造器,可以方便地构建各种复杂的查询条件,从而提高开发效率。
使用条件构造器构建复杂查询条件构造器提供了多种方法来构建复杂的查询条件。以下是一个使用条件构造器构建复杂查询的示例:
- 构建基本查询条件:
public List<User> getUsersByCondition(Integer age, String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age).like("name", name);
return userMapper.selectList(queryWrapper);
}
- 构建更复杂的查询条件:
public List<User> getUsersByComplexCondition(Integer age, String name, Boolean isActive) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age)
.like("name", name)
.eq("is_active", isActive);
return userMapper.selectList(queryWrapper);
}
动态SQL的应用
MyBatisPlus支持动态SQL的应用,可以根据条件动态地构建SQL语句。以下是一个使用动态SQL的应用示例:
- 定义Mapper接口:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> selectList(@Param("age") Integer age, @Param("name") String name);
}
- 构建动态SQL:
public List<User> getUsersByDynamicCondition(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);
}
MyBatisPlus分页插件
MyBatisPlus提供了分页插件,使得开发人员可以更加方便地实现分页查询。通过分页插件,可以简化分页查询的实现过程,提高开发效率。
集成分页插件在Spring Boot项目中,可以通过配置来集成MyBatisPlus的分页插件。以下是一个简单的配置示例:
- 在Spring Boot配置文件中启用分页插件:
mybatis-plus:
pagination:
enabled: true
- 在Spring Boot启动类中添加分页插件:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
使用分页插件实现分页查询
MyBatisPlus的分页插件提供了简洁的API接口来实现分页查询。以下是一个使用分页插件实现分页查询的示例:
- 定义Mapper接口:
public interface UserMapper extends BaseMapper<User> {
List<User> selectPage(Page<User> page, QueryWrapper<User> queryWrapper);
}
- 实现分页查询:
public List<User> getUsersByPage(Integer currentPage, Integer pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
List<User> users = userMapper.selectPage(page, queryWrapper);
return users;
}
MyBatisPlus常用注解
MyBatisPlus提供了一系列的注解来简化数据库操作。以下是一些常用的注解及其使用场景和示例。
常用注解介绍- @TableField:用于定义实体类中的字段与数据库字段的映射关系。
- @TableName:用于定义实体类对应的数据库表名。
- @TableId:用于定义实体类中的主键字段。
- @TableLogic:用于定义逻辑删除字段。
- @TableField(exist = false):表示该字段不在数据库中存在,主要用于动态插入字段。
- @TableField(fill = FieldFill.INSERT):表示该字段在插入时自动填充,例如插入时自动填充当前时间。
- @TableField(fill = FieldFill.INSERT_UPDATE):表示该字段在插入和更新时自动填充。
- @TableField
import com.baomidou.mybatisplus.annotation.TableField;
public class User {
private Long id;
@TableField("user_name")
private String name;
private Integer age;
// Getters and Setters
}
- @TableName
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user_info")
public class UserInfo {
private Long id;
private String name;
private Integer age;
// Getters and Setters
}
- @TableId
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@TableId(value = "user_id", type = IdType.AUTO)
private Long id;
- @TableLogic
import com.baomidou.mybatisplus.annotation.TableLogic;
@TableLogic
private Boolean deleted;
- @TableField(exist = false)
import com.baomidou.mybatisplus.annotation.TableField;
@TableField(exist = false)
private String token;
- @TableField(fill = FieldFill.INSERT)
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
- @TableField(fill = FieldFill.INSERT_UPDATE)
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
以上就是关于MyBatisPlus的入门教程,通过本教程,你可以快速掌握MyBatisPlus的基本使用方法,包括环境搭建、CRUD操作、条件构造器、分页插件以及常用注解的使用。希望本教程能够帮助你更好地理解和使用MyBatisPlus。