Mybatis Plus 的使用教程

2023-03-26 12:03:37 浏览数 (2)

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

0 人点赞