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

 

 

 

你可能感兴趣的:(Hibernate)