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

解决方案:

1.增加sqlmap.properties
定义里面内容:全局变量
Java代码 收藏代码

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


2.修改sqlmap-config.xml
Java代码 收藏代码

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


3.运用到sqlmap
<!-- 查询 记录总数 -->
Java代码 收藏代码

<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>


需求:
Java代码 收藏代码

关于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 全是对象了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值