【mybatisplus两个表字段比较】

文章介绍了如何在MyBatisPlus中进行表字段的比较,如不等于、大于或小于操作,以及如何利用`apply`方法动态拼接SQL来实现。同时,展示了如何直接在查询中使用数据库函数,如平均时间差计算和CASE语句,以及如何处理自定义SQL查询结果中不存在于实体类的字段。

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值