在mybatis的mapper文件中使用IF函数的时候,莫名其妙的报错,但是在sql语句是正确的,可以在navcat中运行,但是在mapper文件中使用就是报错,查阅资料发现说什么情况的都有,有说缺少依赖,需要添加下面的依赖:
<!--必须使用0.9以上的版本-->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.4</version>
</dependency>
也有说可以在mapper接口中添加@SqlParser(filter = true)
注解,然后在配置文件中添加如下配置:
# 开启 SQL 解析缓存注解生效
mybatis-plus:
global-config:
sql-parser-cache: true
以前两种情况对于现在我处在的项目中不太适应,所以我使用的下面的方法,使用case when
作为if
的替换。
修改前的sql:
SELECT
IF( CAST( SFCZ AS SIGNED ) = 0, '已处置', '未处置' ) AS name,
COUNT( ID ) AS value
FROM
l_yjzh_yyzxjj
WHERE
is_deleted = 0
GROUP BY
SFCZ
修改后的sql:
SELECT
CASE SFCZ WHEN 0 THEN '已处置' ELSE '未处置' END AS name,
COUNT( ID ) AS value
FROM
l_yjzh_yyzxjj
WHERE
is_deleted = 0
GROUP BY
SFCZ
网友评论