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

    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

     

  • 相关阅读:
    [转]中英文停止词表(stopword)
    [转]Memcached常用命令及使用说明
    Java导出excel并下载功能
    Java List 汉字进行排序
    Tengine笔记3:Nginx的反向代理和健康状态检查
    Tengine笔记2:通过IP、域名、端口实现虚拟主机
    Tengine笔记1:安装Tengine和Tengine说明
    Linux学习笔记6-Linux根目录下各个目录的作用
    Linux学习笔记5-搭建内网Yum源
    Python学习笔记10-Python MysqlHelper ,MySql 辅助类
  • 原文地址:https://www.cnblogs.com/babietongtianta/p/2727079.html
Copyright © 2011-2022 走看看