Hibernate SpringMVC 多数据库支持

最近在思考,能否在一个spring mvn project中支持同时涉及的多个数据操作,比如现在project中含有一个mysql database:sampe_db, 这个数据库上有个mysql stored procedure :GetStocks,如果我想用hibernate执行这个数据库上的sp,可以使用:

Query query = session.createSQLQuery("CALL GetStocks(:stockCode)").setParameter("stockCode","ab");

而database.properties如下:

database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3308/sampe_db
database.username=root
database.password=root

但是目前项目有新的需求:

这个project需要连接多个数据库,sp也可能来至于多个database,所以一旦我们需要执行某个sp,我们首先需要去查询这个sp属于哪个数据库,然后再在这个数据库上面执行这个sp。

我所想到的方案:

在xml中,建立多个datasources,然后为每个datasource 建立一个session,根据索要调用的sp,找到对应的session然后执行sp

直觉告诉我:一定还会有更简单的办法。

在和同事简单的沟通后,他说再mysql workbench中,直接以call database.sp()的方式能够调用sp的,我感到很欣喜,我可能也能通过这种方法,轻松解决这个问题。


通过一段时间的研究,我发现,通过修改database的配置,果然能够在hibernate中实现以call databases.sp()的方式,

具体步骤:

1.移除database.url的数据库指定,如下:

database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3308//remove sampe_db
database.username=root
database.password=root

2.修改hibernate session语句(增加数据库名称前缀:

Query query = session.createSQLQuery("CALL sampe_db.GetStocks(:stockCode)").setParameter("stockCode","ab");


问题圆满解决

评论

© ftutor / Powered by LOFTER