快速开始

简单示例(传统)

假设我们已存在一张 User 表,且已有对应的实体类 User,实现 User 表的 CRUD 操作我们需要做什么呢?

  1. /** User 对应的 Mapper 接口 */
  2. public interface UserMapper extends BaseMapper<User> { }

以上就是您所需的所有操作,甚至不需要您创建XML文件,我们如何使用它呢?

基本CRUD

  1. // 初始化 影响行数
  2. int result = 0;
  3. // 初始化 User 对象
  4. User user = new User();
  5. // 插入 User (插入成功会自动回写主键到实体类)
  6. user.setName("Tom");
  7. result = userMapper.insert(user);
  8. // 更新 User
  9. user.setAge(18);
  10. result = userMapper.updateById(user);
  11. // 查询 User
  12. User exampleUser = userMapper.selectById(user.getId());
  13. // 查询姓名为‘张三’的所有用户记录
  14. List<User> userList = userMapper.selectList(
  15. new EntityWrapper<User>().eq("name", "张三")
  16. );
  17. // 删除 User
  18. result = userMapper.deleteById(user.getId());

以上是基本的 CRUD 操作,当然我们可用的 API 远不止这几个,我们提供了多达 17 个方法给大家使用,可以极其方便的实现单一、批量、分页等操作,接下来我们就来看看 MP 是如何使用分页的。

分页操作

  1. // 分页查询 10 条姓名为‘张三’的用户记录
  2. List<User> userList = userMapper.selectPage(
  3. new Page<User>(1, 10),
  4. new EntityWrapper<User>().eq("name", "张三")
  5. );

如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作,极大的减少的开发负担。

有人也许会质疑:这难道不是通用 Mapper 么?别急,咱们接着往下看。

现有一个需求,我们需要分页查询 User 表中,年龄在18~50之间性别为男且姓名为张三的所有用户,这时候我们该如何实现上述需求呢?

传统做法是 Mapper 中定义一个方法,然后在 Mapper 对应的 XML 中填写对应的 SELECT 语句,且我们还要集成分页,实现以上一个简单的需求,往往需要我们做很多重复单调的工作,普通的通用 Mapper 能够解决这类痛点么?

用 MP 的方式打开以上需求

  1. // 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录
  2. List<User> userList = userMapper.selectPage(
  3. new Page<User>(1, 10),
  4. new EntityWrapper<User>().eq("name", "张三")
  5. .eq("sex", 0)
  6. .between("age", "18", "50")
  7. );

以上操作,等价于

  1. SELECT *
  2. FROM sys_user
  3. WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50')
  4. LIMIT 0,10

Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与EW类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率。

简单示例(ActiveRecord)

ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以我们也在 AR 道路上进行了一定的探索,喜欢大家能够喜欢,也同时欢迎大家反馈意见与建议。

我们如何使用 AR 模式?

  1. @TableName("sys_user") // 注解指定表名
  2. public class User extends Model<User> {
  3. ... // fields
  4. ... // getter and setter
  5. /** 指定主键 */
  6. @Override
  7. protected Serializable pkVal() {
  8. return this.id;
  9. }
  10. }

我们仅仅需要继承 Model 类且实现主键指定方法 即可让实体开启 AR 之旅,开启 AR 之路后,我们如何使用它呢?

基本CRUD

  1. // 初始化 成功标识
  2. boolean result = false;
  3. // 初始化 User
  4. User user = new User();
  5. // 保存 User
  6. user.setName("Tom");
  7. result = user.insert();
  8. // 更新 User
  9. user.setAge(18);
  10. result = user.updateById();
  11. // 查询 User
  12. User exampleUser = user.selectById();
  13. // 查询姓名为‘张三’的所有用户记录
  14. List<User> userList1 = user.selectList(
  15. new EntityWrapper<User>().eq("name", "张三")
  16. );
  17. // 删除 User
  18. result = t2.deleteById();

分页操作

  1. // 分页查询 10 条姓名为‘张三’的用户记录
  2. List<User> userList = user.selectPage(
  3. new Page<User>(1, 10),
  4. new EntityWrapper<User>().eq("name", "张三")
  5. ).getRecords();

复杂操作

  1. // 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录
  2. List<User> userList = user.selectPage(
  3. new Page<User>(1, 10),
  4. new EntityWrapper<User>().eq("name", "张三")
  5. .eq("sex", 0)
  6. .between("age", "18", "50")
  7. ).getRecords();

AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对应的方法,类似于语法糖。

通过以上两个简单示例,我们简单领略了 Mybatis-Plus 的魅力高效率值得注意的一点是:我们提供了强大的代码生成器,可以快速生成各类代码,真正的做到了即开即用