package com.fastbee.framework.mybatis.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.toolkit.Db;
import com.fastbee.common.core.domain.PageParam;
import com.fastbee.common.core.domain.PageResult;
import com.fastbee.framework.mybatis.utils.MyBatisUtils;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
/**
* 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力
*
* 为什么继承 MPJBaseMapper 接口?支持 MyBatis Plus 多表 Join 的能力。
*/
public interface BaseMapperX extends BaseMapper {
default PageResult selectPage(PageParam pageParam, @Param("ew") Wrapper queryWrapper) {
// MyBatis Plus 查询
IPage mpPage = MyBatisUtils.buildPage(pageParam);
selectPage(mpPage, queryWrapper);
// 转换返回
return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
}
default T selectOne(String field, Object value) {
return selectOne(new QueryWrapper().eq(field, value));
}
default T selectOne(SFunction field, Object value) {
return selectOne(new LambdaQueryWrapper().eq(field, value));
}
default T selectOne(String field1, Object value1, String field2, Object value2) {
return selectOne(new QueryWrapper().eq(field1, value1).eq(field2, value2));
}
default T selectOne(SFunction field1, Object value1, SFunction field2, Object value2) {
return selectOne(new LambdaQueryWrapper().eq(field1, value1).eq(field2, value2));
}
default Long selectCount() {
return selectCount(new QueryWrapper());
}
default Long selectCount(String field, Object value) {
return selectCount(new QueryWrapper().eq(field, value));
}
default Long selectCount(SFunction field, Object value) {
return selectCount(new LambdaQueryWrapper().eq(field, value));
}
default List selectList() {
return selectList(new QueryWrapper<>());
}
default List selectList(String field, Object value) {
return selectList(new QueryWrapper().eq(field, value));
}
default List selectList(SFunction field, Object value) {
return selectList(new LambdaQueryWrapper().eq(field, value));
}
default List selectList(String field, Collection> values) {
return selectList(new QueryWrapper().in(field, values));
}
default List selectList(SFunction field, Collection> values) {
return selectList(new LambdaQueryWrapper().in(field, values));
}
default List selectList(SFunction leField, SFunction geField, Object value) {
return selectList(new LambdaQueryWrapper().le(leField, value).ge(geField, value));
}
/**
* 批量插入,适合大量数据插入
*
* @param entities 实体们
*/
default void insertBatch(Collection entities) {
Db.saveBatch(entities);
}
/**
* 批量插入,适合大量数据插入
*
* @param entities 实体们
* @param size 插入数量 Db.saveBatch 默认为 1000
*/
default void insertBatch(Collection entities, int size) {
Db.saveBatch(entities, size);
}
default void updateBatch(T update) {
update(update, new QueryWrapper<>());
}
default void updateBatch(Collection entities, int size) {
Db.updateBatchById(entities, size);
}
}