首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mybatis-Flex各种查询,强烈建议收藏

Mybatis-Flex各种查询,强烈建议收藏

作者头像
知识浅谈
发布2025-05-16 16:43:53
发布2025-05-16 16:43:53
46300
代码可运行
举报
文章被收录于专栏:分享学习分享学习
运行总次数:0
代码可运行

故事起因:项目被迫使用mybatis-flex,很无语,这个用着真不方便,但是还是要用,既然要用,那就来吧,总结一下,给后来的兄弟避避坑

🎈基础的查询

在 MyBatis-Flex 的 BaseMapper 中,提供了如下的功能用于查询数据库的数据:

selectOneById(id):根据主键查询数据。 selectOneByEntityId(entity):根据实体主键查询数据,便于对复合主键实体类的查询。 selectOneByMap(whereConditions):根据 Map 构建的条件来查询数据。 selectOneByCondition(whereConditions):根据查询条件查询数据。 selectOneByQuery(queryWrapper):根据查询条件来查询 1 条数据。 selectOneByQueryAs(queryWrapper, asType):根据查询条件来查询 1 条数据。 selectOneWithRelationsByMap(whereConditions):根据 Map 构建的条件来查询 1 条数据。 selectOneWithRelationsByCondition(whereConditions):根据查询条件查询 1 条数据。 selectOneWithRelationsByQuery(queryWrapper):根据查询条件来查询 1 条数据。 selectOneWithRelationsByQueryAs(queryWrapper, asType):根据查询条件来查询 1 条数据。 selectListByIds(ids):根据多个主键来查询多条数据。 selectListByMap(whereConditions):根据 Map 来构建查询条件,查询多条数据。 selectListByMap(whereConditions, count):根据 Map 来构建查询条件,查询多条数据。 selectListByCondition(whereConditions):根据查询条件查询多条数据。 selectListByCondition(whereConditions, count):根据查询条件查询多条数据。 selectListByQuery(queryWrapper):根据查询条件查询数据列表。 selectListByQuery(queryWrapper, consumers):根据查询条件查询数据列表。 selectCursorByQuery(queryWrapper):根据查询条件查询游标数据,该方法必须在事务中才能正常使用,非事务下无法获取数据。 selectRowsByQuery(queryWrapper):根据查询条件查询 Row 数据。 selectListByQueryAs(queryWrapper, asType):根据查询条件查询数据列表,要求返回的数据为 asType。这种场景一般用在 left join 时,有多出了实体类本身的字段内容,可以转换为 dto、vo 等场景。 selectListByQueryAs(queryWrapper, asType, consumers):根据查询条件查询数据列表,要求返回的数据为 asType 类型。 selectListWithRelationsByQuery(queryWrapper):查询实体类及其 Relation 注解字段。 selectListWithRelationsByQueryAs(queryWrapper, asType):查询实体类及其 Relation 注解字段。 selectListWithRelationsByQueryAs(queryWrapper, asType, consumers):查询实体类及其 Relation 注解字段。 selectAll():查询全部数据。 selectAllWithRelations():查询全部数据,及其 Relation 字段内容。 selectObjectByQuery(queryWrapper):查询第一列返回的数据,QueryWrapper 执行的结果应该只有 1 列,例如:QueryWrapper.create().select(ACCOUNT.id).where(…); selectObjectByQueryAs(queryWrapper, asType):查询第一列返回的数据,QueryWrapper 执行的结果应该只有 1 列,例如:QueryWrapper.create().select(ACCOUNT.id).where(…); selectObjectListByQuery(queryWrapper):查询第一列返回的数据集合,QueryWrapper 执行的结果应该只有 1 列,例如:QueryWrapper.create().select(ACCOUNT.id).where(…); selectObjectListByQueryAs(queryWrapper, asType):查询第一列返回的数据集合,QueryWrapper 执行的结果应该只有 1 列,例如:QueryWrapper.create().select(ACCOUNT.id).where(…); selectCountByQuery(queryWrapper):查询数据量。 selectCountByCondition(whereConditions):根据条件查询数据总量

🎈基础的新增

insert(entity):插入实体类数据,不忽略 null 值。 insertSelective(entity):插入实体类数据,但是忽略 null 的数据,只对有值的内容进行插入。这样的好处是数据库已经配置了一些默认值,这些默认值才会生效。 insert(entity, ignoreNulls):插入实体类数据。 insertWithPk(entity):插入带有主键的实体类,不忽略 null 值。 insertSelectiveWithPk(entity):插入带有主键的实体类,忽略 null 值。 insertWithPk(entity, ignoreNulls):带有主键的插入,此时实体类不会经过主键生成器生成主键。 insertBatch(entities):批量插入实体类数据,只会根据第一条数据来构建插入的字段内容。 insertBatch(entities, size):批量插入实体类数据,按 size 切分。 insertOrUpdate(entity):插入或者更新,若主键有值,则更新,若没有主键值,则插入,插入或者更新都不会忽略 null 值。 insertOrUpdateSelective(entity):插入或者更新,若主键有值,则更新,若没有主键值,则插入,插入或者更新都会忽略 null 值。 insertOrUpdate(entity, ignoreNulls):插入或者更新,若主键有值,则更新,若没有主键值,则插入。

🎈基础的更新

update(entity):根据主键来更新数据,若实体类属性数据为 null,该属性不会更新到数据库。 update(entity, ignoreNulls):根据主键来更新数据到数据库。 updateByMap(entity, whereConditions):根据 Map 构建的条件来更新数据。 updateByMap(entity, ignoreNulls, whereConditions):根据 Map 构建的条件来更新数据。 updateByCondition(entity, whereConditions):根据查询条件来更新数据。 updateByCondition(entity, ignoreNulls, whereConditions):根据查询条件来更新数据。 updateByQuery(entity, queryWrapper):根据查询条件来更新数据。 updateByQuery(entity, ignoreNulls, queryWrapper):根据查询条件来更新数据。

🎈基础的删除

deleteById(id):根据主键删除数据。如果是多个主键的情况下,需要传入数组,例如:new Integer[]{100,101}。 delete(entity):根据实体主键来删除数据。相比deleteById(id),此方法更便于对复合主键实体类的删除。 deleteBatchByIds(ids):根据多个主键批量删除数据。 deleteBatchByIds(ids, size):根据多个主键批量删除数据。 deleteByMap(whereConditions):根据 Map 构建的条件来删除数据。 deleteByCondition(whereConditions):根据查询条件来删除数据。 deleteByQuery(queryWrapper):根据查询条件来删除数据。

🎈特殊查询

select … as

代码语言:javascript
代码运行次数:0
运行
复制
QueryWrapper query = new QueryWrapper()
    .select(
          ACCOUNT.ID.as("accountId")
        , ACCOUNT.USER_NAME)
    .from(ACCOUNT.as("a"));

select function(SQL 函数:像是max,min,sum等)

代码语言:javascript
代码运行次数:0
运行
复制
QueryWrapper query = new QueryWrapper()
        .select(
            ACCOUNT.ID,
            ACCOUNT.USER_NAME,
            max(ACCOUNT.BIRTHDAY),
            avg(ACCOUNT.SEX).as("sex_avg")
        ).from(ACCOUNT);

where 动态条件

代码语言:javascript
代码运行次数:0
运行
复制
boolean flag = false;
QueryWrapper queryWrapper = QueryWrapper.create()
    .select().from(ACCOUNT)
    .where(ACCOUNT.ID.ge(100).when(flag)) //flag为false,忽略该条件
    .and(ACCOUNT.USER_NAME.like("michael"));

where 使用 SQL 函数

代码语言:javascript
代码运行次数:0
运行
复制
QueryWrapper qw = QueryWrapper.create();
qw.select(USER.ID,
    USER.USER_ALIAS,
    USER.PASSWORD,
    USER.USER_NAME.as("userName"))
    .where(
           QueryMethods.abs(USER.ID).eq(1)
    )
    .from(USER);

怎么写SQL语句

代码语言:javascript
代码运行次数:0
运行
复制
//举个例子
qw.select(USER.ID,
    USER.USER_ALIAS,
    USER.PASSWORD,
    USER.USER_NAME.as("userName"))
    .where("user.user_name='知识浅谈' and user.age="+age); //age作为你定义的变量

怎么使用统计函数

代码语言:javascript
代码运行次数:0
运行
复制
QueryWrapper qw = QueryWrapper.create();
qw.select(QueryMethods.count(*))
    .from(USER)
    .groupBy(USER.SEX)

终极大招点这里

🍚总结

大功告成,撒花致谢🎆🎇🌟,关注我不迷路,带你起飞带你富。 Writted By 知识浅谈

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎈基础的查询
  • 🎈基础的新增
  • 🎈基础的更新
  • 🎈基础的删除
  • 🎈特殊查询
  • 🍚总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档