本文将详细介绍如何在实际项目中使用MyBatis Plus进行数据库操作,包括快速搭建开发环境、基本的CRUD操作、条件构造器的使用、分页插件配置以及多数据源的支持,帮助你全面掌握MyBatis Plus项目实战。
MyBatis Plus简介 MyBatis Plus是什么MyBatis Plus是一个MyBatis的增强工具,旨在简化MyBatis的开发过程。它提供了一系列简单易用的扩展方法,使得开发人员可以更高效地进行数据库操作。MyBatis Plus基于MyBatis的核心功能,对数据库的相关操作进行了封装,简化了开发者的操作流程,同时增加了许多便捷的功能,如条件构造器、分页插件等。它支持单表操作,同时支持多数据源配置,使得应用更加灵活。
MyBatis Plus的优势MyBatis Plus相比MyBatis,主要优势体现在以下几个方面:
- 快速开发:MyBatis Plus提供了一系列的CRUD方法,简化了开发流程,使得开发者可以专注于业务逻辑的实现,而无需过多关注底层的数据库操作细节。
- 简化操作:MyBatis Plus提供了一系列的链式调用方法,使得数据库的查询、插入、更新和删除等操作变得简单且直观。例如,通过
save
和updateById
方法,可以直接对数据库中的记录进行增删改操作。 - 强大的条件构造器:MyBatis Plus提供了一个强大的条件构造器,可以方便地构造复杂的查询条件,支持链式调用,简化了复杂的SQL查询。
- 分页插件:MyBatis Plus内置了分页插件,支持自定义分页策略,简化了分页查询的操作,提高了开发效率。
- 多数据源支持:MyBatis Plus支持多数据源配置,可以灵活配置不同的数据源,满足复杂的项目需求。
在开始使用MyBatis Plus之前,需要准备开发环境和相关配置。以下是开发环境的基本要求:
- Java开发环境:确保已安装Java开发环境,Java版本建议使用Java 8及以上版本。
- IDE:推荐使用IntelliJ IDEA或Eclipse等IDE,这些IDE提供了便捷的开发功能,如代码补全、调试等。
- 数据库:安装并配置MySQL数据库,版本建议使用MySQL 5.7及以上。
- Maven:Maven是Java项目的构建工具,用于管理项目依赖及构建流程。
在项目的pom.xml
文件中添加MyBatis Plus的相关依赖,示例如下:
<dependencies>
<!-- Spring Boot Starter Data MyBatis -->
<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.27</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- 其他依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
数据库连接配置
在application.yml
或application.properties
文件中配置数据库连接信息,示例如下:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis_plus_db?useUnicode=true&characterEncoding=utf8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
实战第一步:基本CRUD操作
创建实体类
在项目中创建实体类,例如一个User
实体类,定义id
和name
两个属性,以及相应的getter和setter方法,示例如下:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
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;
}
}
创建Mapper接口
在项目中创建对应实体类的Mapper接口,示例如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
基本的增删改查操作
接下来,通过Mapper接口实现对数据库的基本CRUD操作。下面展示一些示例代码:
插入数据
插入一条新的用户记录:
User user = new User();
user.setName("John Doe");
user.setAge(30);
userMapper.insert(user);
查询数据
查询用户记录:
// 根据id查询用户
User user = userMapper.selectById(1L);
// 查询所有用户
List<User> users = userMapper.selectList(null);
更新数据
更新用户记录:
User user = new User();
user.setId(1L);
user.setName("Jane Doe");
user.setAge(25);
userMapper.updateById(user);
删除数据
删除用户记录:
userMapper.deleteById(1L);
实战第二步:条件构造器使用
条件构造器基本用法
MyBatis Plus提供了一个强大的条件构造器QueryWrapper
,可以方便地构建复杂的查询条件。以下是一些基本示例:
简单查询
查询所有用户:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
List<User> users = userMapper.selectList(queryWrapper);
按条件查询
查询年龄大于30岁的用户:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 30);
List<User> users = userMapper.selectList(queryWrapper);
复杂查询条件构建
动态构建查询条件:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe").and(wrapper ->
wrapper.gt("age", 30).or().lt("age", 18)
);
List<User> users = userMapper.selectList(queryWrapper);
实战第三步:分页插件与自定义SQL
分页插件配置与使用
MyBatis Plus内置了分页插件,支持自定义分页策略。以下是配置和使用示例:
分页插件配置
在application.yml
或application.properties
中配置分页插件:
mybatis-plus:
pagination:
enabled: true
分页查询
进行分页查询:
Page<User> page = new Page<>(1, 10); // 从第一页开始,每页10条记录
IPage<User> users = userMapper.selectPage(page, null);
long total = users.getTotal(); // 获取总记录数
List<User> records = users.getRecords(); // 获取当前页的记录列表
手动编写与执行自定义SQL
MyBatis Plus支持自定义SQL语句的执行,以下是示例代码:
创建自定义SQL
定义自定义的SQL:
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAge(@Param("age") int age);
}
执行自定义SQL
执行自定义的SQL查询:
List<User> users = userMapper.selectByAge(30);
实战第四步:MyBatis Plus多数据源配置
多数据源配置详解
MyBatis Plus支持多数据源配置,可以灵活配置不同的数据源。以下是配置示例:
在application.yml
配置多个数据源
spring:
multiple-datasources:
datasource1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1
username: root
password: 123456
datasource2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2
username: root
password: 123456
配置多数据源的MyBatis Plus
@Configuration
public class DataSourceConfig {
@Bean(name = "ds1")
@ConfigurationProperties(prefix = "spring.multiple-datasources.datasource1")
public DataSource ds1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "ds2")
@ConfigurationProperties(prefix = "spring.multiple-datasources.datasource2")
public DataSource ds2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("ds1") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("ds2") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public AbstractRoutingDataSource routingDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setMasterDataSource(masterSqlSessionFactory().getConfiguration().getDataSource());
dynamicDataSource.setTargetDataSources(createDataSourceMap());
return dynamicDataSource;
}
private Map<Object, Object> createDataSourceMap() {
Map<Object, Object> map = new HashMap<>();
map.put("ds1", masterSqlSessionFactory().getConfiguration().getDataSource());
map.put("ds2", slaveSqlSessionFactory().getConfiguration().getDataSource());
return map;
}
}
多数据源环境下MyBatis Plus的使用
在多数据源环境下使用MyBatis Plus,需要配置动态数据源,并在Mapper接口中指定数据源。以下是示例代码:
动态选择数据源
定义一个动态选择数据源的类:
public class DynamicDataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
public static String getDataSourceType() {
return contextHolder.get();
}
public static void clearDataSourceType() {
contextHolder.remove();
}
}
使用动态数据源的Mapper
在Mapper接口中指定数据源:
public interface UserMapper extends BaseMapper<User> {
@DataSource("ds1")
List<User> selectFromDs1(@Param("name") String name);
}
查询指定数据源的数据
执行查询操作时指定数据源:
DynamicDataSourceContextHolder.setDataSourceType("ds1");
List<User> users = userMapper.selectFromDs1("John Doe");
DynamicDataSourceContextHolder.clearDataSourceType();
``
通过以上步骤,可以在多数据源环境下灵活使用MyBatis Plus,提高应用的灵活性和可扩展性。