美文网首页
mybatis如何防止sql注入

mybatis如何防止sql注入

作者: x了个w | 来源:发表于2020-06-21 11:45 被阅读0次

    mybatis 启用了预编译功能

    MyBatis启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符“?”就可以了。因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。

    <select id="getBlogById" resultType="Blog" parameterType=”int”>
    SELECT id,title,author,content
    FROM blog
    WHERE id=#{id}
    </select>
    

    传入参数后,打印出执行的SQL语句,会看到SQL是这样的:
    SELECT id,title,author,content FROM blog WHERE id = ?

    底层实现原理

    MyBatis是如何做到SQL预编译的呢?其实在框架底层,是JDBC中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译。

    总结

    在项目中我们一般都会对sql的参数进行多重的限制,同时多提高代码的规范和质量,多使用预编译功能,这样才能更大程度去防范sql注入!

    相关文章

      网友评论

          本文标题:mybatis如何防止sql注入

          本文链接:https://www.haomeiwen.com/subject/gwioxktx.html