ibatis,sql语句中,动态在表名前增加数据库名前缀的方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/james0818/article/details/83631358
解决方案:

1.增加sqlmap.properties
定义里面内容:全局变量

dbSchema1=cl4motdta.
dbSchema2=pbsec6m.
dbSchema3=cl4devdta.


2.修改sqlmap-config.xml
<!-- 数据库 方案名 配置文件装载 -->
<properties resource="com/biz/sqlmap.properties"/>


3.运用到sqlmap
<!-- 查询 记录总数 -->
<select id="queryUserAccreditTotal"
parameterClass="com.citicpru.euis.maintain.vo.EufgpkyVO"
resultClass="java.lang.Long">

select count(*) as total
from ${dbSchema1}eufgpky,${dbSchema2}asaepf
where userid = ae01
</select>



需求:

关于ibatis 的sql
---------------------------
谁碰到过 动态定义 数据库名的吗

select * from table
要改成
select * from database.table
动态定义 database

我这边的数据太变态了 在 多个数据库里面
关联查询。
加上测试环境、生产环境,那是N多库了
不想改sql哦,那累死的


请问怎么配置?怎么改?


--------------------
问题补充:
database 对于 oracle数据库来说,就是表空间;
对于 db2数据库来说,就是方案名--还是指的数据库名。
有些时候,虽然数据跟着用户走,但是为了区分测试数据还是正式数据,
我们都会定义相同用户但是不同的表空间;不会定义同一表空间多用户,这样dba用户查数据不方便。

这个改动有两种思路,拿下列sqlmap来说,
<!-- 根据 id 条件 查询实例. -->
<select id="queryEufgpkyVObyID"
parameterClass="java.lang.String"
resultClass="com.vo.EufgpkyVO">

select a.userid, b.ae02,
from ttdata.eufgpky a, ptdata.asaepf b
where a.userid = b.ae01
and <![CDATA[ a.userid = #id#]]>
</select>
现在要将 ttdata 和 ptdata 改成变量
1. 思路一:改配置文件,看能否定义统一的变量代替
2. 思路二:改parameterClass,改成对象,对象包含数据库名的属性。相当于vo继承一个globalDatabase类。

思路二代价太大,要改大量的sql和调用类、配置文件
这样的话,以后不存在
parameterClass="java.lang.String"
parameterClass="java.lang.Long" 类似这样的参数了

parameterClass 全是对象了。

展开阅读全文

没有更多推荐了,返回首页