MybatisPlus的使用
MyBatis-Plus简介
MyBatis-Plus(简称MP)是在MyBatis的基础上研发的一套持久层框架,旨在简化数据库操作,提高开发效率。它不仅保留了MyBatis的所有优点,还提供了诸多便利功能和扩展特性,以下是MyBatis-Plus的主要特点和功能详解:
-
无侵入设计:
MyBatis-Plus的设计理念是无侵入式的增强,这意味着在使用MyBatis-Plus的同时,仍可以继续使用MyBatis的所有功能,开发者可以选择性地使用MP提供的增强特性。 -
自动CRUD:
MP提供了丰富的通用CRUD方法,比如插入、更新、删除、查询等,这些方法在BaseMapper接口中已经实现,只需要继承该接口,就可以免去大部分基本操作的SQL编写。 -
Lambda表达式支持:
支持Lambda语法,使得开发者可以更优雅地调用CRUD方法,代码更加简洁明了。 -
条件构造器:
提供了强大且易于使用的条件构造器,通过链式调用可以快速构建复杂的动态查询条件,避免硬编码SQL。 -
主键策略:
自动处理主键生成策略,包括雪花算法(Snowflake)等多种内置策略,并支持自定义主键生成器。 -
代码生成器:
提供了强大的代码生成工具,可以根据数据库表结构一键生成Entity、Mapper、Service、Controller等全套模板代码,极大提升了开发效率。 -
表关联映射:
支持一对一、一对多等表关联查询的注解和方法,简化了复杂关联查询的操作。 -
分页查询:
内置分页插件,支持非常简便的分页查询,无需编写复杂的SQL,只需简单调用Page对象即可实现分页功能。 -
性能优化:
包括批量插入、更新等针对性能的优化操作,同时支持二级缓存。 -
扩展性强:
MP预留了丰富的扩展接口,开发者可以根据需求定制自己的插件,例如逻辑删除、乐观锁、数据校验等功能。 -
配置简化:
MP通过Spring Boot Starter的形式,简化了MyBatis在Spring Boot环境中的配置,如数据源、事务管理等配置都可以通过Spring Boot的自动配置来实现。
总之,MyBatis-Plus通过一系列的实用功能大大提高了MyBatis在日常开发中的易用性和生产效率,成为众多Java项目中广泛采用的持久层框架之一。
MybatisPlus的使用
在MyBatis-Plus(以下简称MP)框架中,BaseMapper
和 IService
是为了简化常规CRUD操作而提供的抽象接口。
BaseMapper:
BaseMapper 是 MP 提供的基础Mapper接口,通过继承它,你可以快速实现对数据库的基本增删改查操作,而无需自己编写SQL语句或XML映射文件。
假设你有一个名为User
的实体类,你可以创建对应的UserMapper
如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
// 不需要额外添加任何方法,除非你需要实现一些特定的查询逻辑
}
BaseMapper已经内建了如下的基本CRUD方法:
- 插入(insert, insertOrUpdate, insertBatchSomeColumns 等)
- 删除(deleteById, deleteByMap, deleteBatchIds 等)
- 更新(updateById, update, updateAllColumnById 等)
- 查询(selectById, selectBatchIds, selectList, selectMaps, selectOne 等)
IService:
IService 是 MP 针对Service层设计的一个抽象接口,通过继承它,你可以快速实现Service层的接口规范。同样以User
为例,创建对应的UserService
:
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
// 这里可以根据业务需求扩展自定义的服务方法
}
当Service类实现了IService
之后,就已经具备了基础的CRUD功能。然后你可以创建一个ServiceImpl类来实现具体服务逻辑,注入UserMapper
:
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 可以在此处编写具体的业务逻辑
}
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@GetMapping("/test")
public void detail() {
UserDetailDto detail = userService.selectById(1L);
}
}
在ServiceImpl
中,通过继承ServiceImpl<T, ID>
类,其中泛型T代表实体类(这里是User
),ID代表实体类的主键类型,框架会自动注入对应的Mapper实例,从而在Service层调用BaseMapper中的方法执行数据库操作。
总结来说,使用BaseMapper
和IService
可以大幅减少重复的DAO层和Service层的编码工作,提高开发效率。只需关注业务逻辑的实现,而非基础的数据库操作。
MybatisPlus API
MybatisPlus支持lamada表达式
QueryWrapper<User> userQueryWrapper = new QueryWrapper<User>();
userQueryWrapper.lambda().select(User::getId,User::getUserName,User::getPhone);
userQueryWrapper.lambda().eq(User::getId,1L);
User user = userMapper.selectOne(userQueryWrapper);
更多API请参见 IService
接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!