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

75 篇文章 3 订阅
36 篇文章 0 订阅

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主
📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习
💒 公众号:知识浅谈
🔥 微信:zsqtcyl 联系我领取福利


故事起因:项目被迫使用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

QueryWrapper query = new QueryWrapper()
    .select(
          ACCOUNT.ID.as("accountId")
        , ACCOUNT.USER_NAME)
    .from(ACCOUNT.as("a"));

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

QueryWrapper query = new QueryWrapper()
        .select(
            ACCOUNT.ID,
            ACCOUNT.USER_NAME,
            max(ACCOUNT.BIRTHDAY),
            avg(ACCOUNT.SEX).as("sex_avg")
        ).from(ACCOUNT);

where 动态条件

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 函数

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语句

//举个例子
qw.select(USER.ID,
    USER.USER_ALIAS,
    USER.PASSWORD,
    USER.USER_NAME.as("userName"))
    .where("user.user_name='知识浅谈' and user.age="+age); //age作为你定义的变量

怎么使用统计函数

QueryWrapper qw = QueryWrapper.create();
qw.select(QueryMethods.count(*))
    .from(USER)
    .groupBy(USER.SEX)

终极大招点这里

🍚总结

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

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识浅谈

您的支持将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值