Mybatis设置全局变量及使用dom4j写入xml文件
来源:互联网 发布:桑蚕丝裙子淘宝网天猫 编辑:程序博客网 时间:2024/05/29 19:06
项目中,学姐提出了一个需求,想在网站登录时可以选择一个年份,项目中所有的数据都有这个年份的筛选,于是便想到挨个修改Mapper层SQL语句实在太麻烦,能不能给Mybatis设置一个全局变量来供所有的SQL使用,这样便能简单不少。(本博文并不是这个需求的解决方案,看完别骂街)
在mybatis的配置文件中,sqlSessionFactory节点下面添加一个节点
<property name="configLocation" value="classpath:mybatis-configuration.xml" />
然后在相同路径下添加mybatis-configuration.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties> <property name="graduateYear" value="2018"/> </properties></configuration>
然后可以在所有的mapper.xml文件中使用WHERE语句时使用这个参数,用${graduateYear}来调用,不同于其他参数#{变量名}
这样便是在mybatis设置全局变量的做法
但是,刚都说了要选择毕业年份,肯定不能将其写死,于是便需要通过外部程序写入xml配置文件中,找了好久找到了一个API叫做dom4j(dom for Java)来写入
先在pom.xml文件中添加以下jar依赖
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
然后在controller中添加以下代码
//获取当前文件路径(该文件为controller) String path = String.valueOf(getClass().getResource("/")); //因为使用的是IDEA,所以输出路径是项目文件夹中的target文件,但我并不想写入编译后的,所以分割字符串,获取项目路径 int index = path.indexOf("target"); //获取项目路径 String newPath = path.substring(6,index); //读取原xml文件 Document doc=new SAXReader().read(new File(newPath + "src/main/resources/mybatis-configuration.xml")); //获取根节点下的properties节点 Element propertiesElem = doc.getRootElement().element("properties"); //再获取properties节点下的property节点 Element propertyElem = propertiesElem.element("property"); //获取property节点的属性value Attribute graduateYear = propertyElem.attribute("value"); //将属性value的值设为year(year为定义的变量,从页面获取) graduateYear.setValue(year); //声明输出路径(与读路径相同,即修改源文件) FileOutputStream out =new FileOutputStream(newPath + "src/main/resources/mybatis-configuration.xml"); // 指定文本的写出的格式: OutputFormat format=OutputFormat.createPrettyPrint(); //漂亮格式:有空格换行 format.setEncoding("UTF-8"); //1.创建写出对象 XMLWriter writer=new XMLWriter(out,format); //2.写出Document对象 writer.write(doc); //3.关闭流 writer.close();
到此,写入功能完成。
再来看最初的那个需求,就是通过页面获取变量毕业年份,传入xml文件将其定义为全局变量在mapper里面使用,但是我发现,无论如何是行不通的
不管我写入的xml是变异后的classes文件夹中还是原文件中,mapper调用的常量始终是服务器启动时原文件中的值。所以说,所有的resources文件夹中的配置文件是在服务器启动的时候加载一次,之后始终不变,所以这个需求通过这个方法可能是不可行的。之后再找mybatis动态加载的方法也没有找到太好的,所以这个问题依然遗留,可能需要通过定义程序中的变量来挨个修改mapper了,体力活。
如果以后有新的发现,再来更新这篇博文。
- Mybatis设置全局变量及使用dom4j写入xml文件
- DOM4J 写入 XML 文件
- Dom4j-操作节点和属性及写入其他xml文件
- dom4j写入xml文件示例
- Dom4j方法写入XML文件
- 使用dom4j实现读取和写入xml文件
- dom4j解析xml和写入xml文件
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- dom4j 创建 并 写入 xml文件
- dom4j修改节点属性及写入文件
- 使用DOM4J解析xml文件开发步骤及例子
- 使用DOM4J解析xml文件开发步骤及例子
- Dom4J 写入xml
- dom4j写入XML例子
- dom4j 写入xml
- dom4j方式写入xml
- 使用dom4j操作xml文件!
- js 常用写法
- 使用数组判断它是不是回文数(例如12321是回文)
- 【sklearn】标准化
- python+scapy带界面抓包分析
- 南京邮电大学网络攻防平台逆向writeup之[WxyVM]
- Mybatis设置全局变量及使用dom4j写入xml文件
- 金蝶K3系统定制国际销售日报表
- 最大数字的函数
- 64位win7 使用tensorflow的classify_image进行物体识别
- Go中调用C的动态库与静态库
- this指向问题
- 关于commondBuff
- 增量式数字PID算法的Matlab实现
- Thread与Runnable的关系