微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MyBatis:如何将默认参数传递给每个查询

如何解决MyBatis:如何将默认参数传递给每个查询

我正在开发一个 Spring Boot 应用程序,我需要向表中的每个选择查询传递一个认参数。

这是为了获取一些以前加密的用户数据。

例如:

select
         a.ID,CAST(AES_DECRYPT(a.FirsT_NAME,SHA2(#{secretKey},512)) AS CHAR) FirsT_NAME,CAST(AES_DECRYPT(a.LAST_NAME,512)) AS CHAR) LAST_NAME,USERNAME,PASSWD,b.ID ID_ROLE,b.NAME ROLE_NAME
       from users a join
       roles b on a.ID_ROLE = b.ID
       where
        USERNAME = #{username,jdbcType=VARCHAR} 

我正在使用 mybatis-spring 库,其中 sqlSessionfactorybean 以这种方式配置

sqlSessionfactorybean sessionFactory = new sqlSessionfactorybean();
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:sqlmaps/*.xml"));
        sessionFactory.setDataSource(ds);
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.getvariables().put("secretKey","my secret key");        
        configuration.setCallSettersOnNulls(true);
        sessionFactory.setConfiguration(configuration);
        return sessionFactory;

但是“secretKey”没有传递给查询

实现这一目标的正确方法是什么?

谢谢。

解决方法

#{} 用于引用参数及其属性。
要引用变量,您需要使用 ${}

由于 ${}string substitution,它必须用单引号括起来,您有责任转义字符串中的特殊字符,例如 '

SHA2('${secretKey}',512)

请注意,当 secretKey 是用户提供的字符串时,不建议使用此解决方案,因为它容易受到 SQL 注入攻击。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?