zoukankan      html  css  js  c++  java
  • 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 

    import java.util.HashMap;         
     publicclass DataBaseManager extends HashMap {
         private staticfinallong 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) {
             returnsuper.put(key, value);
         }
         publicstaticvoid setInst(DataBaseManager inst) {
             DataBaseManager.inst = inst;
         }
     }  

     Hibernate连接数据库操作类:

     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访问多个数据库步骤三:测试类

     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);    
         }  
     }  


  • 相关阅读:
    HTML Window.document对象
    HTML JavaScript的DOM操作
    HTML 运算符、类型转换
    HTML JavaScript简介
    js对象学习
    理解MySQL数据库覆盖索引
    mysql 索引2
    mysql 索引
    Extjs 使用图标字体来美化按钮)
    MySql数据类型问题
  • 原文地址:https://www.cnblogs.com/xuhn/p/2711468.html
Copyright © 2011-2022 走看看