
本文共 4310 字,大约阅读时间需要 14 分钟。
MyBatis Plus 开源框架介绍
MyBatis Plus 是一个由国内开发人员基于 MyBatis 框架开发的开源工具框架。它的核心理念是“在 MyBatis 的基础上只做增强不做改变”,旨在简化开发流程,提高开发效率。与传统的 ORM 工具(如 JPA)类似,MyBatis Plus 提供了通用的 CRUD 方法和灵活的条件构造能力,使得开发者能够以更高效的方式处理数据库操作。
核心功能概述
MyBatis Plus 的主要功能可以分为以下几个方面:
支持通用 CRUD 操作
MyBatis Plus 提供了一个通用的 CRUD 操作接口,开发者只需定义 Mapper 接口并继承BaseMapper
即可无需编写任何接口方法或配置文件,直接调用通用的增删改查方法。 灵活的条件构造器
通过EntityWrapper
类,开发者可以轻松构造复杂的 SQL 语句,支持排序、分组、条件拼接等高级查询功能。 强大的代码生成器
MyBatis Plus 提供了灵活的代码生成功能,支持策略配置和全局配置,能够根据需求自定义生成 Mapper 接口和实体类。Spring Boot 与 MyBatis Plus 整合
Spring Boot 与 MyBatis Plus 的整合非常简单,因为 MyBatis Plus 是基于 MyBatis 框架设计的。以下是整合的主要步骤:
修改 pom.xml 文件
在项目依赖管理中添加 MyBatis Plus 的相关依赖。以下是一个示例:com.baomidou mybatis-plus 2.3
配置 application.properties
开启 MyBatis Plus 的驼峰到下划线映射功能,确保属性名和字段名能够正确对应:mybatis-plus.configuration.map-underscore-to-camel-case = true
创建数据库表
定义一个用户表,例如:CREATE TABLE user ( id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键', name VARCHAR(30) DEFAULT NULL COMMENT '姓名', age INT(11) DEFAULT NULL COMMENT '年龄', address_id BIGINT(20) DEFAULT NULL COMMENT '家庭住址id', create_time DATETIME DEFAULT NULL COMMENT '创建时间') ENGINE=INNODB CHARSET=UTF8;
创建实体类
使用 Lombok 的@Data
注解生成 getter 和 setter 方法,并定义对应的字段: @Datapublic class User { private Long id; private String name; private Integer age; private Long addressId; private Date createTime;}
定义 Mapper 接口
在 DAO 层创建与 User 表对应的 Mapper 接口,并继承 MyBatis Plus 的BaseMapper
: public interface UserMapper extends BaseMapper{}
启用扫描注解
在主应用类中添加@MapperScan
注解,配置 Mapper 接口的扫描路径: @MapperScan("org.example.dao")@SpringBootApplicationpublic class MyBatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MyBatisPlusApplication.class, args); }}
编写测试类
编写一个测试类,验证 MyBatis Plus 的 CRUD 和条件构造功能是否正常:@RunWith(SpringRunner.class)@SpringBootTestpublic class MyBatisPlusDemoApplicationTests { @Resource private UserMapper userMapper; @Test public void selectTest() { Listusers = userMapper.selectList(null); users.forEach(System.out::println); }}
常用 CRUD 操作示例
MyBatis Plus 提供了丰富的 CRUD 操作方法,以下是常用操作的示例:
插入操作
通过insert
方法插入新记录: User user = new User();user.setAge(3);user.setAddressId(10L);user.setCreateTime(new Date());userMapper.insert(user);System.out.println("用户id为:" + user.getId());
更新操作
使用updateById
方法按 ID 更新记录: User user = new User();user.setId(1L);user.setAge(13);userMapper.updateById(user);
查询操作
-
根据 ID 查询单条记录:
User user = userMapper.selectById(1L);
-
根据条件查询单条记录:
User user = new User();user.setId(1L);userMapper.selectOne(user);
-
根据条件查询多条记录:
Map
columnMap = new HashMap<>();columnMap.put("age", 13);List users = userMapper.selectByMap(columnMap); -
批量查询多条记录:
List
idList = new ArrayList<>();idList.add(1L);idList.add(2L);List users = userMapper.selectBatchIds(idList);
删除操作
-
根据 ID 删除记录:
userMapper.deleteById(1L);
-
根据条件删除记录:
Map
columnMap = new HashMap<>();columnMap.put("age", 18);userMapper.deleteByMap(columnMap); -
批量删除记录:
List
idList = new ArrayList<>();idList.add(1);idList.add(2);userMapper.deleteBatchIds(idList);
条件构造器功能示例
MyBatis Plus 提供了丰富的条件构造器,能够满足多种复杂查询需求。以下是常用条件构造器的示例:
allEq 方法
-
全部等于指定值:
allEq({ id: 1, name: "老王", age: null })
-
可选参数控制是否包含 IS NULL:
allEq({ id: 1, name: "老王", age: null }, false)
eq、ne、gt 等基本条件
-
等于:
eq("name", "老王")
-
不等于:
ne("name", "老王")
-
大于:
gt("age", 18)
-
大于等于:
ge("age", 18)
范围条件
-
BETWEEN:
between("age", 18, 30)
-
NOT BETWEEN:
notBetween("age", 18, 30)
LIKE 和 NOT LIKE
-
LIKE:
like("name", "王")
-
NOT LIKE:
notLike("name", "王")
高级条件组合
-
OR 和 AND 的嵌套使用:
eq("id", 1).or().eq("name", "老王")
-
条件组合:
and(i -> i.eq("name", "李白").ne("status", "活着"))
排序和分组
-
分组:
groupBy("id", "name")
-
排序:
orderByAsc("id", "name")
SQL 语句拼接
-
自定义 SQL:
mysqlMapper.getAllList(Wrappers.
lambdaQuery().eq(MysqlData::getGroup, 1)); -
使用注解方式:
@Select("select * from mysql_data ${ew.customSqlSegment}")List
getAllList(@Param(Constants.WRAPPER) Wrapper wrapper); -
XML 配置:
注意事项
- 条件构造器的使用需要谨慎,尤其是
last
方法,避免多次调用导致 SQL 注入风险。 - MyBatis Plus 提供了灵活的配置方式,开发者可以根据项目需求进行定制和优化。
发表评论
最新留言
关于作者
