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