mybatis全局变量的应用详解

本文介绍了MyBatis中的全局变量`configuration.variables`的使用,包括如何在SpringBoot项目中定义和在Mapper.xml中引用。示例展示了如何在不重启项目的情况下,通过SqlSessionFactory动态修改这些变量,并提供了修改和获取变量值的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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";
    }
}

不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!我一定行!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峰晨朴朴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值