MyBatis-Plus入门
作者:互联网
2026-03-26
1、ORM框架理解
ORM(Object-Relational Mapping)对象关系映射:将Java程序中的对象与数据库表之间的关系进行映射。
ORM 框架的主要目的是让开发者能够以面向对象的方式来操作数据库,从而减少了直接使用 SQL 语句所带来的复杂性和潜在错误。
2、MyBatis-Plus
MyBatis-Plus = MyBatis + 增强工具包
- 只做增强,不做改变
- 与MyBatis完全兼容
- 简化开发,提升效率
- 内置通用CRUD操作
- 支持多种数据库
- 提供丰富的扩展功能
2.1 MyBatis-Plus特性
- 无侵入性:不会影响现有MyBatis项目,替换依赖,原有MyBatis代码完全兼容
- 自动CRUD
- 条件构造器:以面向对象的方式构建查询条件
QueryWrapper:用于查询操作的条件构造器
UpdateWrapper:用于更新操作的条件构造器
LambdaQueryWrapper:基于Lambda表达式的查询条件构造器
核心方法:
eq(): 等于
ne(): 不等于
gt(): 大于
ge(): 大于等于
lt(): 小于
le(): 小于等于
like(): 模糊匹配
in(): IN查询
orderByAsc() / orderByDesc(): 排序
- 代码生成器:自动生成Entity、Mapper、Service、Controller代码
- 自动填充:自动填充创建时间、更新时间等字段
- 乐观锁:防止并发更新的数据冲突
3、Maven项目中搭建MyBatis-Plus环境
3.1 更新pom.xml依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plusartifactId>
<version>3.5.3version>
dependency>
3.2 创建配置文件mybatis-config.xml
"1.0" encoding="UTF-8" ?>
configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
settings>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
databaseIdProvider>
<mappers>
<package name="com.hospital.mapper"/>
mappers>
configuration>
3.3 创建工具类MyBatisPlusUtil
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class MyBatisPlusUtil1 {
//配置数据源(HikariCP)
public static DataSource dataSource(){
HikariDataSource dataSource = new HikariDataSource();
//从jdbc.properties中读取配置
Properties props = loadJdbcProperties();
dataSource.setJdbcUrl(props.getProperty("jdbc.url"));
dataSource.setUsername(props.getProperty("jdbc.username"));
dataSource.setPassword(props.getProperty("jdbc.password"));
dataSource.setDriverClassName(props.getProperty("jdbc.driver"));
// 完整的连接池配置
dataSource.setMaximumPoolSize(20);
dataSource.setMinimumIdle(5);
dataSource.setConnectionTimeout(30000);
dataSource.setIdleTimeout(600000);
dataSource.setMaxLifetime(1800000);
dataSource.setPoolName("HospitalHikariCP");
return dataSource;
}
private static Properties loadJdbcProperties(){
Properties props = new Properties();
try {
InputStream is = MyBatisPlusUtil1.class.getClassLoader().getResourceAsStream("jdbc.properties");
if (is != null) {
props.load(is);
} else {
//使用默认值
props.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/hospital_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true");
props.setProperty("jdbc.username", "root");
props.setProperty("jdbc.password", "123456");
props.setProperty("jdbc.driver", "com.mysql.cj.jdbc.Driver");
}
}catch (IOException e){
throw new RuntimeException("加载jdbc.properties失败", e);
}
return props;
}
//配置SqlSessionFactory(普通maven项目中,需要手动创建)
public static SqlSessionFactory sqlSessionFactory() throws Exception{
//使用 MybatisSqlSessionFactoryBean(这是 MyBatis-Plus 推荐的)
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
//设置数据源
factoryBean.setDataSource(dataSource());
//创建MybatisConfiguration,由于这里使用配置文件mybatis-config.xml,省略
// MybatisConfiguration configuration = new MybatisConfiguration();
// 设置mybatis-plus.xml文件位置
factoryBean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("mybatis-config.xml"));
//配置拦截器
factoryBean.setPlugins(mybatisPlusInterceptor());
// 设置mapper.xml文件位置(如果有),也可在配置文件中设置
// factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
//手动注册mapper,使用配置文件,在配置文件中设置
// configuration.addMapper(UserMapper.class);
// factoryBean.setConfiguration(configuration);
return factoryBean.getObject();
}
//配置MyBatis-Plus插件(分页,乐观锁等)
public static MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//乐观锁插件
// interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
3.4 完全使用MyBatis-Plus的配置方式
使用MyBatis配置文件时,要注意和MyBatis-Plus工具类避免配置冲突
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.hospital.mapper.UserMapper;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;
//完全使用MyBatis-Plus的配置方式
public class MyBatisPlusUtil {
/**
* 获取 SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() throws Exception {
System.out.println("=== 创建 SqlSessionFactory ===");
// 1. 创建数据源
DataSource dataSource = createDataSource();
// 2. 使用 MybatisSqlSessionFactoryBean(这是 MyBatis-Plus 推荐的)
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 3. 创建 MybatisConfiguration
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setLogImpl(StdOutImpl.class);
// 4. 关键:设置配置
factoryBean.setConfiguration(configuration);
// 5. 关键:创建并配置 MyBatis Plus 拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
factoryBean.setPlugins(interceptor);
// 6. 关键:设置全局配置
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
factoryBean.setGlobalConfig(globalConfig);
// 7. 关键:设置实体类包
factoryBean.setTypeAliasesPackage("com.hospital.entity");
// 8. 关键:手动注册 Mapper
configuration.addMapper(UserMapper.class);
// 9. 构建 SqlSessionFactory
return factoryBean.getObject();
}
/**
* 创建数据源
*/
private static DataSource createDataSource() {
Properties props = loadProperties();
HikariConfig config = new HikariConfig();
config.setJdbcUrl(props.getProperty("jdbc.url"));
config.setUsername(props.getProperty("jdbc.username"));
config.setPassword(props.getProperty("jdbc.password"));
config.setDriverClassName(props.getProperty("jdbc.driver"));
// 连接池配置
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
config.setPoolName("HospitalHikariCP");
return new HikariDataSource(config);
}
/**
* 加载配置文件
*/
private static Properties loadProperties() {
Properties props = new Properties();
try (InputStream is = MyBatisPlusUtil.class.getClassLoader()
.getResourceAsStream("jdbc.properties")) {
if (is != null) {
props.load(is);
System.out.println("加载配置文件成功");
} else {
// 使用默认值
props.setProperty("jdbc.url",
"jdbc:mysql://localhost:3306/hospital_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true");
props.setProperty("jdbc.username", "root");
props.setProperty("jdbc.password", "123456");
props.setProperty("jdbc.driver", "com.mysql.cj.jdbc.Driver");
System.out.println("使用默认数据库配置");
}
} catch (Exception e) {
throw new RuntimeException("加载jdbc.properties失败", e);
}
return props;
}
}
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
拒绝硬编码!利用 Java SPI 打造一个可插拔的代码解析器
03/29
给 Spring Boot 接口加了幂等保护:Token 机制 + 结果缓存,一个注解搞定
03/29
一站式了解接口防刷(限流)的基本操作
03/29
ThreadForge v1.1.0 发布:让 Java 并发更接近 Go 的开发体验
03/28
各版本JDK对比:JDK 21 特性详解
03/28
JVM 内存溢出排查
03/28
LangChain4j Prompt 提示词工程
03/28
彻底重绘Spring Boot性能版图,资源占用缩减80%
03/28
百度智能云模型接入
03/28
CompletableFuture深度解析:异步编程与任务编排的实现
03/28
AI精选
