如何使用Oracle DB在Spring / mybatis应用程序中设置默认架构?

时间:2012-08-14 15:08:31

标签: java oracle spring schema mybatis

来自mysql背景,我能够在连接URL中设置我想用于所有sql查询的默认模式名称。我现在有一个我需要访问的Oracle数据库。我知道我无法指定我想在URL中使用的模式,因为用户是正在使用的模式名称。

我意识到我可以使用一行SQL代码:

ALTER SESSION SET CURRENT_SCHEMA=default_schema

该项目使用mybatis 2.3.5作为我的SQL框架,但我对mybatis完全不熟悉。有没有一种简单的方法来配置mybatis来实现这一目标?我的应用程序是Spring 3应用程序,因此我使用Spring DataSourceTransactionManager来管理我的事务。我认为必须让管理员了解这一要求,以确保在创建新连接时发送命令。

我尝试在线搜索,但我发现大多数示例都在SqlMaps中的sql查询中包含了模式名称,我认为这是不好的做法。

在理想的世界中,模式名称将成为URL的一部分,以便我可以在不触及代码的情况下更改不同环境的模式名称(例如:dev,test,prod等)(即:仅配置在JNDI /应用程序服务器级别)。如果我可以使用Spring配置值来设置它,我仍然会很高兴我仍然可以使用JNDI查找或系统环境属性来检索值。

有人能指出我正确的方向吗?

谢谢,

埃里克

1 个答案:

答案 0 :(得分:3)

据我所知,Oracle中没有选项可以更改您的URL以连接到特定的用户架构。

1)mybatis :在开始操作之前,您可以将当前架构设置为应得的架构。您可以在属性文件中编写规范,并从该文件设置方法的参数。在这种情况下,您无需更改代码即可更改架构。

<update id="mySetSchemaMethod" parameterClass="String">
ALTER SESSION SET CURRENT_SCHEMA = ${schemaName}
</update>

2)触发器:如果仅对此特定Java应用程序使用此连接,则可以设置客户端事件触发器,以便设置CURRENT_SCHEMA。这次,您需要更改触发器以管理测试/产品更改。

CREATE OR REPLACE TRIGGER Set_Schema_On_Logon
  AFTER LOGON  
  ON MY_SCHEMA  
BEGIN  
  ALTER SESSION SET CURRENT_SCHEMA = MY_TEST_SCHEMA;  
END;