🍁 作者:知识浅谈,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 知识浅谈