Nội Dung Cơ Bản
1.1 Giới Thiệu và Cài Đặt
MyBatis Plus là công cụ nguồn mở Trung Quốc chưa được hỗ trợ mặc định trong IntelliJ IDEA. Khi tạo dự án Spring Boot, không chọn MyBatis để tránh xung đột thư viện. Thêm dependency:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
1.3 Phương Thức BaseMapper
Interface cung cấp các thao tác CRUD cơ bản:
public interface BaseMapper<T> {
int add(T entity); // Thêm bản ghi
int removeById(Serializable id); // Xóa theo ID
int changeById(@Param("et") T entity); // Cập nhật theo ID
Lion getById(Serializable id); // Truy vấn theo ID
List<Lion> getList(@Param("ew") Wrapper<T> queryWrapper); // Truy vấn có điều kiện
}
Ví Dụ Sử Dụng
// Thêm dữ liệu sư tử
Lion lion = new Lion();
lion.setName("Sư tử đực");
lion.setAge(4);
lionMapper.add(lion);
// Truy vấn theo điều kiện
LambdaQueryWrapper<Lion> query = new LambdaQueryWrapper<>();
query.gt(Lion::getAge, 3).lt(Lion::getWeight, 200);
List<Lion> lions = lionMapper.getList(query);
1.4 IService và ServiceImpl
Lớp dịch vụ bổ sung phương thức nghiệp vụ:
public interface LionService extends IService<Lion> {}
@Service
public class LionServiceImpl
extends ServiceImpl<LionMapper, Lion>
implements LionService {}
Phương Thức Chính
save(entity): Thêm bản ghi (gọi BaseMapper.insert)removeBatchByIds(): Xóa hàng loạt theo IDmodifyById(entity): Cập nhật theo IDgetPage(): Phân trang dữ liệu
1.6 Điều Kiện Động
String nameParam = null;
Integer minWeight = 150;
LambdaQueryWrapper<Lion> dynamicQuery = new LambdaQueryWrapper<>();
dynamicQuery
.like(nameParam != null, Lion::getName, nameParam)
.gt(minWeight != null, Lion::getWeight, minWeight);
1.8 Xóa Logic và Vật Lý
Cấu hình xóa logic trong application.yml:
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
Đánh dấu trường logic trong entity:
@TableLogic
private Integer deleted;
Chú Thích Quan Trọng
2.2 @TableId
Xác định trường khóa chính:
@TableId(value = "lion_id", type = IdType.AUTO)
private Long id;
2.3 @TableField
@TableField("lion_age")
private Integer age;
@TableField(exist = false) // Không ánh xạ vào CSDL
private String tempData;
2.5 Cấu Hình Phân Trang
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}