0 0

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

如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) 都需要加入差不多的逻辑.
不知除了这一处理方式外,还有没其他更好的方法?
2015年1月18日 22:10

6个答案 按时间排序 按投票排序

0 0

采纳的答案

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

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

2015年1月20日 15:43
1 0

isnull和isempty标签

2015年1月19日 10:02
0 0

你的sql语句加上标签试试,要确保in 后面不为null

2016年11月29日 10:24
0 0

1 在service层判断参数list是否是null或者长度为0,这样就不调用dao层了
2 sql的写法
<select id="getUsersByIds" resultType="User">
        SELECT
       *
        FROM user
        <if test="idList!=null">
               WHERE id in
            <foreach collection="idList" item="item" index="index"
                 separator="," open="(" close=")">
            #{item}
        </foreach>
            </if>
      
    </select>

2015年10月08日 11:49
0 0

where后面的条件 可以加一个 1=1;
例如
select * from table_a where 1=1
<c:if test='判断表达式'>
    and id in () ;
</c:if>

2015年9月18日 17:20
0 0

切面编程(AOP)应该可以解决这个问题,题主试试

2015年9月16日 15:00

相关推荐

    Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么.txt|Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么.txt

    Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么答案 Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么答案

    springMVC整合MyBatis+sql文件

    分页查询是数据库操作中常见的一种优化手段,MyBatis支持动态SQL,可以方便地编写分页查询的SQL语句,配合SpringMVC传递参数,实现数据的分页展示。 关于分页查询,开发者通常会定义一个Page对象,包含当前页数、每...

    mybatis兼容sql.pdf

    在IT行业中,数据库的兼容性是一个常见的挑战,尤其是在使用ORM框架如MyBatis时。MyBatis是一个优秀的Java持久层框架,它允许开发者编写声明式的SQL映射,从而避免了JDBC代码的繁琐。然而,当面临从Oracle到MySQL...

    mybatis兼容sql.docx

    在IT行业中,数据库的兼容性是一个常见的挑战,尤其是在使用ORM框架如MyBatis时。Oracle和MySQL之间的语法差异使得在单个项目中同时支持两者成为一项艰巨的任务。在描述的场景中,开发团队最初的设计过度依赖Oracle...

    Mybatis排序无效问题解决.doc

    在这个例子中,当`sortInfo`参数为`empno desc`时,最终执行的SQL语句将是: ```sql SELECT * FROM employees ORDER BY empno desc ``` 这样就可以正确地对`employees`表中的数据进行降序排序了。 #### 注意事项 ...

    Spring+MyBatis+MySql+hibernate校验所须jar包

    通常包含mysql-connector-java.jar,这是JDBC驱动,允许Java程序通过JDBC API与MySQL交互,执行SQL语句,获取查询结果等。 "Hibernate校验所须jar包"可能指的是Hibernate Validator,它是JSR-303/JSR-349规范的参考...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    1. **安全性**:虽然MyBatis的动态SQL机制在一定程度上减少了SQL注入的风险,但仍然需要对用户输入进行严格的校验和处理。 2. **性能考量**:过度复杂的动态SQL可能会导致性能下降,尤其是在大量数据处理的情况下。...

    mybatisPlugin2.92

    1. SQL日志增强:MyBatis Plugin可以拦截并记录执行的SQL语句,包括参数和执行时间,这对于调试和性能优化非常有帮助。开发者可以通过这些日志快速定位问题,了解数据库操作的效率。 2. 自动导入:在编写Mapper XML...

    面向MyBatis程序的SQL注入攻击及防御策略.pdf

    在本文中还提到了一些防御措施,如确保开发过程中遵循安全编码规范,比如使用占位符和参数化查询来避免直接将用户输入拼接到SQL语句中。此外,Web应用系统中的安全等级制度和对请求参数的严格校验,也是防止SQL注入...

    防止sql注入解决方案

    预编译语句在执行前会先编译,然后多次执行时只需替换参数,这不仅提高了性能,还能有效防止SQL注入。使用预编译语句时,SQL语句的结构是固定的,只有参数是可以改变的。例如,在Java中,可以这样使用...

    使用XSD校验Mybatis的SqlMapper配置文件的方法(2)

    在本篇内容中,我们将深入探讨如何使用XSD(XML Schema Definition)来校验Mybatis的SqlMapper配置文件。在前一篇文章中,我们可能已经学习了初步的方法,但本文将介绍更具体的步骤和策略,以确保配置文件的正确性和...

    Security_By_Default:MyBatis框架下SQL注入解决方案.pdf

    在当今的信息安全领域中,SQL注入攻击作为一种常见的安全威胁,一直困扰着许多使用MyBatis等ORM框架的开发团队。MyBatis作为一款流行的Java持久层框架,广泛应用于京东、阿里、美团等公司的项目中。由于其灵活性和...

    java持久层框架mybatis防止sql注入的方法

    总结来说,MyBatis通过预编译的PreparedStatement有效地防止了大部分SQL注入攻击,但开发者仍需谨慎对待`${}`的使用,并在必要时进行额外的输入验证和过滤,以确保应用的安全性。在编写MyBatis的映射语句时,优先...

    springboot登陆注册 有数据库 mybatis mysql 有格式校验

    9. **Repository层**:Repository层是MyBatis与数据库交互的部分,通过定义Mapper接口和XML配置文件,实现SQL的编写和执行。 10. **异常处理**:为了提供良好的用户体验,需要对可能出现的错误情况进行异常处理。...

    使用XSD校验Mybatis的SqlMapper配置文件的方法(1)

    本文将基于对SqlSessionFactoryBean的重构,介绍如何使用XSD来校验Mybatis的SqlMapper配置文件。 首先,我们需要了解SqlSessionFactoryBean的角色。它是Spring与Mybatis集成的关键组件,负责创建SqlSessionFactory...

    MyBatis-3.4.5官网下载

    在3.4.5版本中,MyBatis可能还增强了日志支持,使开发者能够更方便地追踪和调试SQL执行过程。它通常兼容各种流行的日志框架,如Log4j、Logback等,便于开发者根据项目需求选择合适的日志记录方案。 最后,MyBatis的...

    idea下的mybatis plugin

    如果发现潜在的错误,如拼写错误、未使用的参数或无效的SQL结构,IDEA会立即给出提示,帮助开发者及时修复问题,减少调试时间。 跳转功能是IDEA MyBatis插件的一大亮点。在Mapper接口中,你可以直接右键点击方法并...

Global site tag (gtag.js) - Google Analytics