mybatisplus中必须学会使用的几个类:
ServiceImpl<M extends BaseMapper,T> implements IService< T>
这个类封装了baseMapper sqlHelper, T 为绑定数据库的实体类,内部通过反射拿到@tableName 的注解数据库表,以此实现数据库相关操作,内部主要方法:

boolean saveOrUpdate(T entity)
boolean saveOrUpdateBatch(Collection<T> entityList)
boolean removeById(Serializable id)
boolean removeByIds(Collection<? extends Serializable> idList)
boolean removeByMap(Map<String, Object> columnMap)
boolean remove(Wrapper<T> queryWrapper)
boolean updateById(T entity)
boolean update(Wrapper<T> updateWrapper)
boolean updateBatchById(Collection<T> entityList, int batchSize)

T getOne(Wrapper<T> queryWrapper)
T getById(Serializable id)
List<T> listByIds(Collection<? extends Serializable> idList)
List<T> listByMap(Map<String, Object> columnMap)
T getOne(Wrapper<T> queryWrapper)
List<T> list()
List<T> list(Wrapper<T> queryWrapper)

int count()
int count(Wrapper<T> queryWrapper)

<E extends IPage<T>> E page(E page)
<E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper)

LambdaQueryChainWrapper<T> lambdaQuery()
LambdaUpdateChainWrapper<T> lambdaUpdate()

boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper)

LambdaQueryWrapper qWrapper = Wrappers.lambdaQuery()
对应查询方法 getOne list remove等

LambdaUpdateWrapper uWrapper = Wrappers.lambdaUpdate()
对应更新方法 update
uWrapper.set方法设置修改的内容
如updateWrapper.set(User::getAge, newAge);

再很多场景下,数据库操作时需要添加一些条件,上面的 getOne , remove, update, list , count , page等都有添加查询条件的支持,通过lambda 方式获取查询语句,调用service中对应的方法

/**
* 可用的条件如下
* eq:等于  ne:不等于
* gt:大于 ge:大于等于
* lt:小于 le:小于等于
* like:模糊查询 notLike:非模糊查询
* in:在某个范围内 notIn:不在某个范围内
* isNull:为空 isNotNull:不为空
* 
*/
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>();
//或者使用 queryWrapper = Wrappers.lambdaQuery(User.class)
//查询名字 ==a 且 年龄 <18 的列表
queryWrapper.eq(User::getName, "a").ne(User::getAge, 18);
List<User> users = list(queryWrapper);


//更新email
LambdaUpdateWrapper<User> updateWrapper = Wrappers.lambdaUpdate(User.class);     
updateWrapper.in(User::getAge, 32).ne(User::getArea, "wuhan").set(User::getEmail, "xxx");
return update(updateWrapper);

Page< T>
分页加载需要设置的一个内部参数整合类,主要属性有
current:当前页码。表示查询第几页的数据,从 1 开始计数。
size:每页显示的记录数。表示每页包含多少条数据。
total:总记录数。表示符合条件的记录总数,通常在查询结果中由数据库返回。
pages:总页数。表示总共有多少页,通常在查询结果中由数据库返回。
List< T > records:当前页的记录列表。表示当前页包含的数据记录。保存获取的list类,这字段可以手动设置,或许有从其他来源的对象需要page一起记录返回的,可以通过setRecords方法
List< OrderItem > orders:排序字段。表示查询结果按照哪些字段进行排序,可以指定升序(ASC)或降序(DESC)
常用构造函数
Page(long current, long size)
Page(long current, long size, long total)

// 创建分页对象,第一个参数是当前页码,第二个参数是每页显示的记录数
Page<User> page = new Page<>(1, 10);
// 添加排序条件,这里按照创建时间降序排列
page.addOrder(OrderItem.desc("age"));
//分页加载 按照年龄降序,查询名字中包含 熊 字的
LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(User.class).like(StrUtil.isNotEmpty('熊'), User::getName, '熊').orderByDesc(User::getAge);
return page(page, queryWrapper).records;
//page方法返回 page<T> 的对象,需要的list<T> 数据在对象的records中

完整的service示例

@Service
public class UserInfoService extends ServiceImpl<UserInfoMapper, UserInfo> {

    public UserInfo getByUserId(Long userId) {
        LambdaQueryWrapper<UserInfo> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(UserInfo::getUserId, userId);

        return getOne(queryWrapper);
    }

    public Page<UserInfo> findPage(Long userId,
                                     Boolean realNameAuthed,
                                     Page<UserInfo> page) {
        page.addOrder(OrderItem.desc("user_id"));
        LambdaQueryWrapper<UserInfo> queryWrapper = Wrappers.lambdaQuery(UserInfo.class)
                .eq(Objects.nonNull(userId), UserInfo::getUserId, userId)
                .eq(Objects.nonNull(realNameAuthed), UserInfo::getRealNameAuthed, realNameAuthed);
        return page(page, queryWrapper);
    }

    public List<UserInfo> getUnAuthUsers() {
        LambdaQueryWrapper<UserInfo> queryWrapper = Wrappers.lambdaQuery(User.class)
                .eq(UserInfo::getRealNameAuthed, false)
                .select(UserInfo::getId);
        List<UserInfo> list = list(queryWrapper);
        if (CollectionUtils.isEmpty(list)) {
            return Collections.emptyList();
        }
        Set<Long> userIds = list.stream().map(UserInfo::getId).collect(Collectors.toSet());
        return list(Wrappers.lambdaQuery(UserInfo.class).in(UserInfo::id, userIds).isNotNull(UserInfo::getPhone));
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐