james0818 发表于 2013-1-25 21:59:38

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

解决方案:

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">selectcount(*) as totalfrom${dbSchema1}eufgpky,${dbSchema2}asaepf   where userid = ae01 </select>


需求:
关于ibatis的sql --------------------------- 谁碰到过动态定义数据库名的吗 select * from   table 要改成 select * fromdatabase.table 动态定义 database 我这边的数据太变态了在 多个数据库里面 关联查询。 加上测试环境、生产环境,那是N多库了 不想改sql哦,那累死的 请问怎么配置?怎么改? --------------------问题补充:database 对于 oracle数据库来说,就是表空间;         对于db2数据库来说,就是方案名--还是指的数据库名。 有些时候,虽然数据跟着用户走,但是为了区分测试数据还是正式数据, 我们都会定义相同用户但是不同的表空间;不会定义同一表空间多用户,这样dba用户查数据不方便。 这个改动有两种思路,拿下列sqlmap来说, <!-- 根据 id 条件查询实例. --> <select id="queryEufgpkyVObyID"      parameterClass="java.lang.String"      resultClass="com.vo.EufgpkyVO">         selecta.userid, b.ae02,                from    ttdata.eufgpky a, ptdata.asaepf b          where   a.userid = b.ae01         and   <!]> </select> 现在要将 ttdata 和 ptdata 改成变量 1. 思路一:改配置文件,看能否定义统一的变量代替 2. 思路二:改parameterClass,改成对象,对象包含数据库名的属性。相当于vo继承一个globalDatabase类。 思路二代价太大,要改大量的sql和调用类、配置文件 这样的话,以后不存在 parameterClass="java.lang.String" parameterClass="java.lang.Long"类似这样的参数了 parameterClass 全是对象了。
页: [1]
查看完整版本: ibatis,sql语句中,动态在表名前增加数据库名前缀的方法