前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis Plus 的使用教程

Mybatis Plus 的使用教程

原创
作者头像
疯狂的KK
发布2023-03-26 12:03:37
4560
发布2023-03-26 12:03:37
举报
文章被收录于专栏:Java项目实战Java项目实战

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

安装

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

代码语言:txt
复制
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 中添加相关配置即可:

代码语言:txt
复制
yml
Copy code
mybatis-plus:
  # mapper 扫描路径
  mapper-locations: classpath*:mapper/**/*.xml
  # 实体扫描路径
  typeAliasesPackage: com.example.entity

基本使用

实体类

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

代码语言:txt
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

Mapper

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

代码语言:txt
复制
public interface UserMapper extends BaseMapper<User> {
}

增删改查

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

代码语言:txt
复制
@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 类来进行分页操作:

代码语言:txt
复制
@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 提供了自动填充的功能,可以在插入和更新操作中自动填充指定的字段,例如创建时间和修改时间:

代码语言:txt
复制
@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);
    }
}

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

代码语言:txt
复制
@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 还提供了多租户的功能,可以在多租户情况下自动过滤数据:

代码语言:txt
复制
@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;
    }
}

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

代码语言:txt
复制
@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 语句之前或之后进行拦截和处理:

代码语言:txt
复制
@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;
    }
}
代码语言:txt
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档