mybatis.configuration.variables
mybatis.configuration.variables是一个可自定义的全局变量,本篇以springboot项目为例说明问题,源码如下,部分省略:
package org.apache.ibatis.session;
public class Configuration {
protected Properties variables;
}
就是一个properties的属性配置对象,这个对象中的属性,是作为mybatis的全局变量出现的,可以在mapper.xml文件中直接引用。
如何定义
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.demo
configuration:
variables:
userId: 456132465
userName: 李四
mapper.xml中的使用
user_id = '${userId}'
user_name = '${userName}'
或者
<if test="'${userName}' != null and '${userName}' != ''">
/* 这样写也没有问题 */
</if>
需要加引号,数字类型的可以不用管, 但如果遇到属性值为中文,不加引号报错提示列找不到,这个问题不难理解, 弄明白了mybatis的#和$的区别就明白了。
如何修改
这样的值很多时候要作为系统配置文件出现,如果需要动态修改,在不重启项目的情况改变数据或业务:
package org.apache.ibatis.session;
import java.sql.Connection;
public interface SqlSessionFactory {
SqlSession openSession();
SqlSession openSession(boolean var1);
SqlSession openSession(Connection var1);
SqlSession openSession(TransactionIsolationLevel var1);
SqlSession openSession(ExecutorType var1);
SqlSession openSession(ExecutorType var1, boolean var2);
SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2);
SqlSession openSession(ExecutorType var1, Connection var2);
Configuration getConfiguration();
}
修改数据,需要从spring容器中获取到bean,可以用mybatis的SqlSessionFactory来获取。
@RestController
public class TestController {
@Autowired
private SqlSessionFactory sqlSessionFactory;
@GetMapping("/get")
public String get() {
org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
Properties variables = configuration.getVariables();
String userId= variables.getProperty("userId");
String userName= variables.getProperty("userName");
return "userId-> " + userId+ " userName-> " + userName;
}
@GetMapping("/set")
public String set(String userName) {
org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
Properties variables = configuration.getVariables();
variables.setProperty("userName", userName);
return "success";
}
}
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!我一定行!