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 全是对象了。 

你可能感兴趣的:(ibatis)