MyBatis-Plus教程深入介绍了这一在MyBatis基础上简化了的ORM框架,旨在提升开发效率。文章从快速入门开始,涵盖安装、配置、基础操作、动态SQL及常用功能,如多条件查询与逻辑删除、自动填充字段和多数据库支持。最后提供了实战案例和优化建议,适合初学者系统学习并掌握MyBatis-Plus的使用。
MyBatis-Plus 是一个在 MyBatis 基础上简化了的 ORM 框架,它提供了一套丰富的 CRUD 操作接口和一些高级功能,如动态 SQL、分页查询、多数据库支持等,使得在日常的 Java 项目开发中能够快速构建出高效、灵活的数据访问逻辑。
选择 MyBatis-Plus 的原因主要在于它能显著提升开发效率。相较于 MyBatis,MyBatis-Plus 提供了更简洁的 API 和更多的默认功能,减少了开发者需要手动编写的代码量。此外,它遵循的是一种更加直观和易于理解的编程风格,有助于提高代码的可读性和可维护性。
首先,你需要将 MyBatis-Plus 添加到你的项目中。如果你使用的是 Maven,可以在 pom.xml
文件中添加如下依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency>
在 MyBatis-Plus 配置中,你通常不需要做太多配置,因为框架提供了默认的配置。但你可能需要根据项目需求进行一些自定义,比如设置全局配置类:
@Configuration public class MyBatisPlusConfig implements GlobalConfig { @Bean public MybatisPlusAutoConfiguration mybatisPlusAutoConfiguration() { return new MybatisPlusAutoConfiguration(); } @Override public GlobalConfig initGlobalConfig() { return GlobalConfig.initGlobalConfig(); } }
假设你有一个 User
表,包含 id
, name
, 和 email
字段。为了创建相应的数据库操作,你需要在对应的实体类上添加注解,并配置对应的mapper接口:
// User.java 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 String email; // 省略 getter 和 setter 方法 }
// UserMapper.java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { }
在 User
实体类的接口中,你可以使用 MyBatis-Plus
提供的 API 来执行 CRUD 操作:
import com.baomidou.mybatisplus.extension.service.IService; public interface UserService extends IService<User> { User addUser(User user); User queryUserById(Long id); int updateUser(User user); int deleteUserById(Long id); }
使用 PageHelper
或 PageInfo
可以实现分页查询:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Override public Page<User> addUserAndQueryUser(Long pageNum, Long pageSize, String orderBy) { Page<User> page = new Page<>(pageNum, pageSize); return baseMapper.insertUserAndQueryUser(page, orderBy); } }
多条件查询可以通过 lambda
表达式来实现,并结合 eq
、ne
等方法:
List<User> queryUsersByConditions(User user, Boolean isDelete);
逻辑删除可以通过 @TableLogic
注解并配置对应的策略来实现:
// User.java (with @TableLogic) import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; @TableLogic(value = "0", delval = "1") @TableName("user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; @TableLogic private boolean deleted; }
MyBatis-Plus 通过使用 LambdaWhere
、LambdaQueryWrapper
等工具类来构建动态 SQL 表达式,允许开发者灵活地添加、删除、修改 SQL 查询条件。
动态 SQL 可以通过 lambdaQuery
或 lambdaQueryWrapper
方法结合条件构造器实现:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.PageHelper; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Override public List<User> getUsersByFilter(User user) { QueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getName, user.getName()); queryWrapper.orderByDesc(User::getId); return baseMapper.selectList(queryWrapper); } }
@TableFill
注解用于自动填充字段,例如填充创建时间、更新时间等:
import com.baomidou.mybatisplus.annotation.TableFill; import com.baomidou.mybatisplus.annotation.TableField; @TableFill(fill = "create_time", fieldStrategy = FieldStrategy.UPDATE) public class User { // ... }
配置多数据源:
spring.datasource.url1=... spring.datasource.username1=... spring.datasource.password1=... spring.datasource.url2=... spring.datasource.username2=... spring.datasource.password2=... mybatis-plus.global-config.map-underscore-to-camel-case=true mybatis-plus.global-config.jdbc-type=UNKNOWN mybatis-plus.global-config.configuration.map-underscore-to-camel-case=true
提供批量插入、更新、删除的 API,并默认支持事务管理:
int count = userMapper.batchInsertOrUpdate(new List<User>(), 100);
将 MyBatis-Plus 添加到项目中,并配置数据库连接,运行项目以验证集成效果。
解决在实际项目中可能出现的冲突、性能瓶颈等问题,如优化查询效率、处理并发控制等。
通过调整 SQL 语句、优化数据库结构、使用缓存策略等方式,提高系统的响应速度和处理能力。