MyBatis:如何将默认参数传递给每个查询
MyBatis: how to pass default parameter to every query
我正在开发一个 Spring 引导应用程序,我需要将默认参数传递给来自 table.
的每个 select 查询
这是为了获取一些以前加密的用户数据。
例如:
select
a.ID,
CAST(AES_DECRYPT(a.FIRST_NAME, SHA2(#{secretKey}, 512)) AS CHAR) FIRST_NAME,
CAST(AES_DECRYPT(a.LAST_NAME, SHA2(#{secretKey}, 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 注入攻击。
我正在开发一个 Spring 引导应用程序,我需要将默认参数传递给来自 table.
的每个 select 查询这是为了获取一些以前加密的用户数据。
例如:
select
a.ID,
CAST(AES_DECRYPT(a.FIRST_NAME, SHA2(#{secretKey}, 512)) AS CHAR) FIRST_NAME,
CAST(AES_DECRYPT(a.LAST_NAME, SHA2(#{secretKey}, 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 注入攻击。