如何在使用Oracle数据库的Spring/mybatis应用程序中设置默认模式?

3

作为一个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查找或系统环境属性来检索该值。

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

谢谢,

Eric

1个回答

7
据我所知,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;  

1
谢谢!不幸的是,这些信息对我之前正在处理的项目来说来晚了,但对于未来的案例将是非常宝贵的。 - Eric B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接