Mybatis Plus 的使用教程

举报
赵KK日常技术记录 发表于 2023/06/30 23:58:30 2023/06/30
【摘要】 Mybatis Plus 是 Mybatis 的增强工具,在 Mybatis 的基础上进行了封装,简化了操作,提高了效率。下面就来介绍一下 Mybatis Plus 的使用教程,以及一些高级知识点和代码示例。安装Mybatis Plus 的安装非常简单,只需要在 Maven 中添加依赖即可:xmlCopy code<dependency> <groupId>com.baomidou</...

Mybatis Plus 是 Mybatis 的增强工具,在 Mybatis 的基础上进行了封装,简化了操作,提高了效率。下面就来介绍一下 Mybatis Plus 的使用教程,以及一些高级知识点和代码示例。

安装

Mybatis Plus 的安装非常简单,只需要在 Maven 中添加依赖即可:

xml
Copy code
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.1</version>
</dependency>

配置

Mybatis Plus 的配置也非常简单,只需要在 application.yml 或 application.properties 中添加相关配置即可:

yml
Copy code
mybatis-plus:
  # mapper 扫描路径
  mapper-locations: classpath*:mapper/**/*.xml
  # 实体扫描路径
  typeAliasesPackage: com.example.entity

基本使用

实体类

首先,我们需要定义一个实体类,可以使用 Lombok 来简化代码:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

Mapper

接下来,我们需要定义一个 Mapper 接口,可以继承 Mybatis Plus 的 BaseMapper 接口,这样就可以自动获得一些基础的增删改查方法:

public interface UserMapper extends BaseMapper<User> {
}

增删改查

定义好实体类和 Mapper 接口后,我们就可以进行基本的增删改查操作了:

@Autowired
private UserMapper userMapper;
@Test
public void insert() {
    User user = User.builder()
            .name("Tom")
            .age(18)
            .email("tom@example.com")
            .build();
    userMapper.insert(user);
    System.out.println(user);
}
@Test
public void update() {
    User user = userMapper.selectById(1L);
    user.setName("Jerry");
    userMapper.updateById(user);
}
@Test
public void delete() {
    userMapper.deleteById(1L);
}
@Test
public void select() {
    User user = userMapper.selectById(1L);
    System.out.println(user);
    List<User> userList = userMapper.selectList(null);
    System.out.println(userList);
}

分页查询

Mybatis Plus 还提供了分页查询的功能,可以使用 Page 类来进行分页操作:

@Test
public void selectPage() {
    Page<User> page = new Page<>(1, 2);
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda().ge(User::getAge, 18);
    IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);
    System.out.println(userIPage.getRecords());
    System.out.println(userIPage.getTotal());
}

高级使用

自动填充

Mybatis Plus 提供了自动填充的功能,可以在插入和更新操作中自动填充指定的字段,例如创建时间和修改时间:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    }
}

在实体类中需要指定需要填充的字段:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

多租户

Mybatis Plus 还提供了多租户的功能,可以在多租户情况下自动过滤数据:

@Component
public class MyTenantLineHandler implements TenantLineHandler {
    @Override
    public Expression getTenantId() {
        return new LongValue(1L);
    }
    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }
    @Override
    public boolean ignoreTable(String tableName) {
        return false;
    }
}

在实体类中需要指定租户字段:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName(value = "user")
public class User implements Serializable {
    private static final long serialVersionUID=1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableField(value = "tenant_id")
    private Long tenantId;
}

SQL 注入器

Mybatis Plus 还提供了 SQL 注入器的功能,可以在执行 SQL 语句之前或之后进行拦截和处理:

@Component
public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        methodList.add(new MyInsertBatch());
        return methodList;
    }
}
public class MyInsertBatch extends InsertBatchSomeColumn {
    @Override
    public String getSqlStatement(Wrapper wrapper) {
        String sqlStatement = super.getSqlStatement(wrapper);
        return sqlStatement.replace("VALUES", "VALUES (${et.age}, #{et.name}, #{et.email}, now(), now())");
    }
}

总结

以上就是 Mybatis Plus 的使用教程和一些高级知识点的介绍和代码示例。Mybatis Plus 简化了 Mybatis 的操作,提高了效率,非常适合在企业级项目中使用。

分享

Regenerate response

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。