Hibernate访问多个数据库

本文描述Hibernate访问多个数据库的操作步骤。思路就是,利用Hibernate可以加载不同数据库配置信息的原理,编写一个数据库操作类,再编写一个数据库管理程序[map],将加载的数据库连接实例put早数据库管理程序中。

Hibernate访问多个数据库的设计思路:利用 Hibernate中config = new Configuration().configure(configFile);可以加载不同数据库配置信息的原理,编写一个数据库操作类,再编写一个数据库管理程序[map],将加载的数据库连接实例put早数据库管理程序中,具体实现见下面:

Hibernate访问多个数据库步骤一:hibernate配置文件

localhost.cfg.xml

 

< ?xml version="1.0" encoding="utf-8"?> 
< !DOCTYPE hibernate-configuration  
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"  
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
 
< hibernate-configuration> 
    < session-factory > 
 
  < !-- local connection properties --> 
  < property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bookshop?zeroDateTimeBehavior=convertToNull< /property> 
  < property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver< /property> 
  < property name="hibernate.connection.username">root< /property> 
  < property name="hibernate.connection.password">12345678< /property> 
  < !-- property name="hibernate.connection.pool_size">< /property --> 
 
  < !-- dialect for MySQL --> 
        < property name="dialect">org.hibernate.dialect.MySQLDialect< /property> 
 
        < property name="hibernate.show_sql">true< /property> 
        < property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory< /property>          
        < property name="hbm2ddl.auto">update< /property> 
 
     < mapping resource="org/jskyme/data/local/po/Shop.hbm.xml"/> 
    < /session-factory> 
< /hibernate-configuration> 

  data_server.cfg.xml

< ?xml version="1.0" encoding="utf-8"?> 
 
< !DOCTYPE hibernate-configuration  
 
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"  
 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
 
< hibernate-configuration> 
 
    < session-factory > 
 
  < !-- local connection properties --> 
 
  < property name="hibernate.connection.url">jdbc:mysql://192.168.0.10:3306/bookshop?zeroDateTimeBehavior=convertToNull< /property> 
 
  < property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver< /property> 
 
  < property name="hibernate.connection.username">root< /property> 
 
  < property name="hibernate.connection.password">12345678< /property> 
 
  < !-- property name="hibernate.connection.pool_size">< /property --> 
 
  < !-- dialect for MySQL --> 
 
        < property name="dialect">org.hibernate.dialect.MySQLDialect< /property> 
 
        < property name="hibernate.show_sql">true< /property> 
 
        < property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory< /property>          
 
        < property name="hbm2ddl.auto">update< /property> 
 
     < mapping resource="org/jskyme/data/local/po/Shop.hbm.xml"/> 
 
    < /session-factory> 
 
< /hibernate-configuration> 

  

Hibernate访问多个数据库步骤二:数据库访问类:

数据库管理类:DataBaseManager

package org.jskyme.hibernate.util;  
 
import java.util.HashMap;  
 
public class DataBaseManager extends HashMap {  
 private static final long serialVersionUID = 6491666983237498097L;  
 private static DataBaseManager inst = new DataBaseManager();  
 
 public static DataBaseManager getInst() {  
  return inst;  
 }  
 
 public SessionManager get(Object key) {  
  return (SessionManager) super.get(key);  
 }  
 
 @Override  
 public Object put(Object key, Object value) {  
  return super.put(key, value);  
 }  
 
 public static void setInst(DataBaseManager inst) {  
  DataBaseManager.inst = inst;  
 }  
   
}  

  Hibernate连接数据库操作类:

 

package org.jskyme.hibernate.util;  
 
import java.util.List;  
 
import org.hibernate.Criteria;  
import org.hibernate.Query;  
import org.hibernate.SQLQuery;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  
 
public final class SessionManager {  
 private Configuration config;  
 
 private SessionFactory sessionFactory;  
 
 private Session session;  
 
 public Criteria createCriteria(Class persistentClass) {  
  return session.createCriteria(persistentClass);  
 }  
 
 private void buildSession() {  
  sessionFactory = config.buildSessionFactory();  
  session = sessionFactory.openSession();  
 }  
 
 public SessionManager(String configFile) {  
  config = new Configuration().configure(configFile);  
  buildSession();  
 }  
 
 public Session getSession() {  
  return session;  
 }  
 
 public void save(Object obj) {  
  Transaction tx = session.beginTransaction();  
  session.save(obj);  
  tx.commit();  
 }  
 
 public Object load(Class clas, Integer priId) {  
  return session.get(clas, priId);  
 }  
 
 public Query findbyhql(String hql) {  
  return session.createQuery(hql);  
 }  
 
 public List pageSizeByhql(String hql) {  
  return findbyhql(hql).list();  
 }  
 
 public SQLQuery findbysql(String sql) {  
  return session.createSQLQuery(sql);  
 }  
 
 public void update(Object obj) {  
  Transaction tx = session.beginTransaction();  
  session.saveOrUpdate(obj);  
  tx.commit();  
 }  
 public void delete(Class clas, Integer inte) {  
  session.delete(load(clas, inte));  
 }  
 
 public void delete(Object obj) {  
  session.delete(obj);  
 }  
 
 public void deletebyhql(String hql) {  
  Query query = session.createQuery(hql);  
  query.executeUpdate();  
 }  
 
 public Query createQuery(String hql) {  
  return session.createQuery(hql);  
 }  
 
}  

  Hibernate访问多个数据库步骤三:测试类

 

package org.jskyme.data.test;  
 
import junit.framework.TestCase;  
 
import org.hibernate.Query;  
import org.jskyme.hibernate.util.DataBaseManager;  
import org.jskyme.hibernate.util.SessionManager;  
 
public class DataBaseManagerTest extends TestCase {  
 DataBaseManager dbm = DataBaseManager.getInst();  
 
 public void testDatabase() {  
  setDatabase();  
  SessionManager tempSess = dbm.get("dataLocal");  
  Query query = tempSess.createQuery("from  Shop");  
  query.list();  
    
  SessionManager tempSess27 = dbm.get("dateManage");  
  Query query27 = tempSess27.createQuery("from Shop");  
  query27.list();  
 }  
 
 private void setDatabase() {  
  SessionManager dateManageLocal = new SessionManager("localhost.cfg.xml");  
  SessionManager dateManage27 = new SessionManager("data_server.cfg.xml");  
  dbm.put("dateManage", dateManage27);  
  dbm.put("dataLocal", dateManageLocal);  
 
 }  
}  

  

原文转自 http://developer.51cto.com/art/200907/133239.htm

 

 

 

posted @ 2012-10-17 08:19  巴别塔  阅读(532)  评论(0编辑  收藏  举报