程序员技能分享

使用Mybatis执行sql时如何统一校验输入参数?

如dao方法有:
void batchInsert(List<User> userList);
List<User> getUsersByIds(List<Long> idList);
void deleteUsersByids(List<Long> idList);

我想若输入参数为空(list.isEmpty()),就不要往下执行sql了,直接返回.否则的话会有错误sql出现,如:
mysql> select * from user where id in () ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘)’ at line 1

跟踪源码发现,可以在SqlSesisonTemplate(org.mybatis.spring.SqlSesisonTemplate)中进行处理,如selectList,可以添加如下的逻辑:
if(parameter instanceof List){
if(((List) parameter).isEmpty()){
List<E> result =  new ArrayList<>();
return result;
}
}

但是需要在其他方法中(如insert update delete) 都需要加入差不多的逻辑.
不知除了这一处理方式外,还有没其他更好的方法?

 

方法1、创建自定义注解,然后再写一个Mybatis拦截器,拦截 查询相关方法,如果发现 输入参数有自定义注解,并且参数为Null,则直接返回空

方法2、在Service层 对参数做判断,如果参数为空,直接返回,不需要调用DAO层查询

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址