MyBatis-Plus 是一个强大的 MyBatis 增强工具,旨在简化数据库操作并提高开发效率。它提供了一系列简化数据库操作的 API,支持 CRUD 操作、分页、逻辑删除等功能。该工具适用于各种需要频繁数据库操作的项目,并能显著提高开发效率。
MyBatis-Plus简介 MyBatis-Plus是什么MyBatis-Plus 是一个 MyBatis 的增强工具,旨在简化 MyBatis 的操作,提高开发效率。它通过扩展 MyBatis 的原生功能,提供了一系列简化数据库操作的 API,使开发人员可以更加专注于业务逻辑的实现。
MyBatis-Plus的优势MyBatis-Plus 相较于 MyBatis 有以下优势:
- 简化CRUD操作:MyBatis-Plus 提供了一套完整的 CRUD 操作方法,开发人员无需手动编写 SQL 语句,只需要调用相应的方法即可完成数据库的增删改查操作。
- 内置CRUD和分页功能:MyBatis-Plus 内置了多种数据库的 CRUD 功能以及分页操作,极大地简化了开发流程。
- 强类型查询:提供了基于 Lambda 表达式的条件构造器,可以方便地构建复杂的查询条件。
- 逻辑删除:支持逻辑删除而不是物理删除,即通过设置标记字段来实现删除操作,从而不直接删除数据库中的记录。
- 自动填充和填充策略:支持创建和更新时自动填充字段的功能,如时间戳、UUID等。
- 性能优化:提供了连接池的配置支持,可以优化数据库的连接性能。
- 更多功能:除了以上功能外,MyBatis-Plus 还提供了条件构造器、分页、乐观锁、数据字典、代码生成器等功能,极大提高了开发效率。
MyBatis-Plus 可以应用于各种需要进行数据库操作的场景,尤其适合以下情况:
- 简化数据操作:适用于需要频繁进行数据库操作的项目,如在线商城、论坛、博客等。
- 提高开发效率:在快速开发或者敏捷开发场景下,使用 MyBatis-Plus 可以大幅提高开发效率。
- 复杂的业务逻辑:对于业务逻辑较为复杂的项目,MyBatis-Plus 提供的强类型查询功能可以更好地处理复杂的查询条件。
- 团队协作:在团队协作开发中,MyBatis-Plus 提供的代码生成器和内置功能可以减少重复性工作,提高代码的一致性和规范性。
在项目中引入 MyBatis-Plus 的依赖。这里以 Maven 为例,在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<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>
配置数据库连接
在项目的 application.yml
或 application.properties
文件中配置数据库连接信息:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: 123456
快速开始
创建实体类
定义实体类,MyBatis-Plus 依赖于 JPA 规范,因此实体类需要遵循 JPA 规范,如使用 @Table
注解指定表名, @Id
注解指定主键等:
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(value = "id", type = TableId.Type.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
// 构造方法、getter、setter省略
}
创建Mapper接口
在 MyBatis-Plus 中,Mapper 接口继承自 BaseMapper
接口,通过这个接口可以快速继承相应的 CRUD 方法:
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
配置MyBatis-Plus的核心配置
在 Spring Boot 项目中,MyBatis-Plus 的配置可以通过 mybatis-plus
相关的配置项完成。在 application.yml
或者 application.properties
文件中添加如下配置:
mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: com.example.demo.entity
global-config:
db-config:
id-type: auto
logic-delete-value: 1
logic-not-delete-value: 0
基本CRUD操作
增加数据
插入一条用户数据至数据库:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public void insertUser() {
User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("zhangsan@example.com");
this.save(user);
}
}
查询数据
查询用户数据,例如根据用户ID查询用户信息:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public User getUserById(Long id) {
return this.getById(id);
}
}
更新数据
更新用户信息,例如更新名字:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public void updateUser(Long id, String newName) {
User user = new User();
user.setId(id);
user.setName(newName);
this.updateById(user);
}
}
删除数据
删除用户信息,例如逻辑删除用户:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public void deleteUser(Long id) {
this.removeById(id);
}
}
标准查询操作
条件构造器使用
条件构造器 QueryWrapper
提供了一种方便的方法来构建复杂的查询条件,例如查询年龄大于20岁的用户:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public List<User> getUsersByAgeGreaterThan(int age) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", age);
return this.list(wrapper);
}
}
分页查询
MyBatis-Plus 提供了分页查询功能,通过 Page
对象传递页码和每页显示的条数来实现分页查询:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public IPage<User> getUsersByPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
return this.page(page, new QueryWrapper<>());
}
}
代码生成器使用
代码生成器配置
MyBatis-Plus 提供了代码生成器功能,用于自动生成实体类、Mapper 接口和 XML 文件等。配置代码生成器需要在 application.yml
或 application.properties
文件中添加如下配置:
mybatis-plus:
code-gen:
enable: true
package-info:
base-package: com.example.demo
mapper-package: com.example.demo.mapper
entity-package: com.example.demo.entity
auto-remove-output: true
auto-remove-old-mapper-xml: true
auto-remove-old-entity: true
auto-remove-old-pojo: true
auto-remove-old-vo: true
auto-remove-old-dto: true
auto-remove-old-service: true
auto-remove-old-service-impl: true
auto-remove-old-controller: true
auto-remove-old-vo-impl: true
auto-remove-old-dto-impl: true
自动生成代码
使用代码生成器自动生成代码,可以通过命令行或者 Spring Boot 应用程序中调用代码生成器接口来实现。
通过命令行生成代码
在项目中添加如下方法,用于生成代码:
package com.example.demo;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("yourname");
gc.setFileOverride(true);
gc.setActiveRecord(false);
gc.setEnableCache(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setMapper("mapper");
pc.setEntity("entity");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("user");
strategy.setController("UserController");
mpg.setStrategy(strategy);
mpg.execute();
}
}
通过Spring Boot应用程序生成代码
在 Spring Boot 应用程序中,可以通过调用代码生成器接口来生成代码:
package com.example.demo;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Autowired
private CodeGenerator codeGenerator;
public void run(String... args) throws Exception {
codeGenerator.generate();
}
}
package com.example.demo;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public void generate() {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("yourname");
gc.setFileOverride(true);
gc.setActiveRecord(false);
gc.setEnableCache(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setMapper("mapper");
pc.setEntity("entity");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("user");
strategy.setController("UserController");
mpg.setStrategy(strategy);
mpg.execute();
}
}
以上是关于 MyBatis-Plus 入门教程的详细步骤,从环境搭建到快速开始,再到基础操作与高级功能的使用,希望这些内容能帮助你快速掌握 MyBatis-Plus,提高开发效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章