mybatisplus实现表两个字段比较和使用函数
在sql查询中,难免需要表字段自行比较和使用一些函数,所以写个笔记记录一下
表字段比较
要实现表字段a不等于表字段b,或者大于或者小于
sql写法:
select * from table where name1 <> name2;
mybatisplus中可以用ne实现,但是不能比较两个字段
ne(R column, Object val)
ne(boolean condition, R column, Object val)
例:ne("name", "老王")--->name <> '老王'
可以用apply拼接sql实现两个字段的比较
apply(String applySql, Object... params)
apply(boolean condition, String applySql, Object... params)
例: apply("id = 1")--->id = 1
例: apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
例:wrapper.select("princi", "time").apply("name1 <> name2");
注意事项:
该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的,反之会有!
使用函数
才开始也是百度了好久,最后发现直接写就能用
wrapper.select("princi", "avg( TIMESTAMPDIFF(MINUTE , create, update)) as time")
.apply("create <> update");
wrapper.select("princi", "case" +
"status when 5 then '已处理无效'" +
"when 0 then '正常告警待处理'" +
"when 1 then '阈值触发但未达到告警次数'" +
"when 2 then '恢复告警'" +
"when 3 then '已处理有效'" +
"when 4 then '处理中'" +
"end as alertStatus"
.apply("create <> update");
小计,自定义sql查询的结果如果实体类中没有这个字段可以增加一个
@TableField
private Integer count;
文章介绍了如何在MyBatisPlus中进行表字段的比较,如不等于、大于或小于操作,以及如何利用`apply`方法动态拼接SQL来实现。同时,展示了如何直接在查询中使用数据库函数,如平均时间差计算和CASE语句,以及如何处理自定义SQL查询结果中不存在于实体类的字段。
9万+

被折叠的 条评论
为什么被折叠?



