快速开始

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

    1. int result = 0;
    2. // 初始化 User 对象
    3. User user = new User();
    4. // 插入 User (插入成功会自动回写主键到实体类)
    5. user.setName("Tom");
    6. result = userMapper.insert(user);
    7. // 更新 User
    8. user.setAge(18);
    9. result = userMapper.updateById(user);
    10. // 查询 User
    11. User exampleUser = userMapper.selectById(user.getId());
    12. // 查询姓名为‘张三’的所有用户记录
    13. new EntityWrapper<User>().eq("name", "张三")
    14. );
    15. // 删除 User
    16. 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 操作,极大的减少的开发负担。

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

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

    以上操作,等价于

    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)

    我们如何使用 AR 模式?

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

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

    基本CRUD

    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();

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