posts - 495,  comments - 11,  trackbacks - 0

          Hibernate訪問多個數據庫的設計思路:利用 Hibernate中config = new Configuration().configure(configFile);可以加載不同數據庫配置信息的原理,編寫一個數據庫操作類,再編寫一個數據庫管理程序[map],將加載的數據庫連接實例put早數據庫管理程序中,具體實現見下面:

          Hibernate訪問多個數據庫步驟一:hibernate配置文件

          localhost.cfg.xml

          1. < ?xml version="1.0" encoding="utf-8"?>
          2. < !DOCTYPE hibernate-configuration
          3. ???? PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
          4. ???? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
          5. < hibernate-configuration>
          6. ????< session-factory >
          7. ??< !-- local connection properties -->
          8. ??< property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bookshop?zeroDateTimeBehavior=convertToNull< /property>
          9. ??< property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver< /property>
          10. ??< property name="hibernate.connection.username">root< /property>
          11. ??< property name="hibernate.connection.password">12345678< /property>
          12. ??< !-- property name="hibernate.connection.pool_size">< /property -->
          13. ??< !-- dialect for MySQL -->
          14. ????????< property name="dialect">org.hibernate.dialect.MySQLDialect< /property>
          15. ????????< property name="hibernate.show_sql">true< /property>
          16. ????????< property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory< /property>????????
          17. ????????< property name="hbm2ddl.auto">update< /property>
          18. ?????< mapping resource="org/jskyme/data/local/po/Shop.hbm.xml"/>
          19. ????< /session-factory>
          20. < /hibernate-configuration>

          data_server.cfg.xml

          1. < ?xml version="1.0" encoding="utf-8"?>
          2. < !DOCTYPE hibernate-configuration
          3. ???? PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
          4. ???? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
          5. < hibernate-configuration>
          6. ????< session-factory >
          7. ??< !-- local connection properties -->
          8. ??< property name="hibernate.connection.url">jdbc:mysql://192.168.0.10:3306/bookshop?zeroDateTimeBehavior=convertToNull< /property>
          9. ??< property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver< /property>
          10. ??< property name="hibernate.connection.username">root< /property>
          11. ??< property name="hibernate.connection.password">12345678< /property>
          12. ??< !-- property name="hibernate.connection.pool_size">< /property -->
          13. ??< !-- dialect for MySQL -->
          14. ????????< property name="dialect">org.hibernate.dialect.MySQLDialect< /property>
          15. ????????< property name="hibernate.show_sql">true< /property>
          16. ????????< property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory< /property>????????
          17. ????????< property name="hbm2ddl.auto">update< /property>
          18. ?????< mapping resource="org/jskyme/data/local/po/Shop.hbm.xml"/>
          19. ????< /session-factory>
          20. < /hibernate-configuration>

          Hibernate訪問多個數據庫步驟二:數據庫訪問類:

          數據庫管理類:DataBaseManager

          1. package org.jskyme.hibernate.util;
          2. import java.util.HashMap;
          3. public class DataBaseManager extends HashMap {
          4. private static final long serialVersionUID = 6491666983237498097L;
          5. private static DataBaseManager inst = new DataBaseManager();
          6. public static DataBaseManager getInst() {
          7. ??return inst;
          8. }
          9. public SessionManager get(Object key) {
          10. ??return (SessionManager) super.get(key);
          11. }
          12. @Override
          13. public Object put(Object key, Object value) {
          14. ??return super.put(key, value);
          15. }
          16. public static void setInst(DataBaseManager inst) {
          17. ?? DataBaseManager.inst = inst;
          18. }
          19. }

          Hibernate連接數據庫操作類:

          1. package org.jskyme.hibernate.util;
          2. import java.util.List;
          3. import org.hibernate.Criteria;
          4. import org.hibernate.Query;
          5. import org.hibernate.SQLQuery;
          6. import org.hibernate.Session;
          7. import org.hibernate.SessionFactory;
          8. import org.hibernate.Transaction;
          9. import org.hibernate.cfg.Configuration;
          10. public final class SessionManager {
          11. private Configuration config;
          12. private SessionFactory sessionFactory;
          13. private Session session;
          14. public Criteria createCriteria(Class persistentClass) {
          15. ??return session.createCriteria(persistentClass);
          16. }
          17. private void buildSession() {
          18. ?? sessionFactory = config.buildSessionFactory();
          19. ?? session = sessionFactory.openSession();
          20. }
          21. public SessionManager(String configFile) {
          22. ?? config = new Configuration().configure(configFile);
          23. ?? buildSession();
          24. }
          25. public Session getSession() {
          26. ??return session;
          27. }
          28. public void save(Object obj) {
          29. ?? Transaction tx = session.beginTransaction();
          30. ?? session.save(obj);
          31. ?? tx.commit();
          32. }
          33. public Object load(Class clas, Integer priId) {
          34. ??return session.get(clas, priId);
          35. }
          36. public Query findbyhql(String hql) {
          37. ??return session.createQuery(hql);
          38. }
          39. public List pageSizeByhql(String hql) {
          40. ??return findbyhql(hql).list();
          41. }
          42. public SQLQuery findbysql(String sql) {
          43. ??return session.createSQLQuery(sql);
          44. }
          45. public void update(Object obj) {
          46. ?? Transaction tx = session.beginTransaction();
          47. ?? session.saveOrUpdate(obj);
          48. ?? tx.commit();
          49. }
          50. public void delete(Class clas, Integer inte) {
          51. ?? session.delete(load(clas, inte));
          52. }
          53. public void delete(Object obj) {
          54. ?? session.delete(obj);
          55. }
          56. public void deletebyhql(String hql) {
          57. ?? Query query = session.createQuery(hql);
          58. ?? query.executeUpdate();
          59. }
          60. public Query createQuery(String hql) {
          61. ??return session.createQuery(hql);
          62. }
          63. }

          Hibernate訪問多個數據庫步驟三:測試類

          1. package org.jskyme.data.test;
          2. import junit.framework.TestCase;
          3. import org.hibernate.Query;
          4. import org.jskyme.hibernate.util.DataBaseManager;
          5. import org.jskyme.hibernate.util.SessionManager;
          6. public class DataBaseManagerTest extends TestCase {
          7. DataBaseManager dbm = DataBaseManager.getInst();
          8. public void testDatabase() {
          9. ?? setDatabase();
          10. ?? SessionManager tempSess = dbm.get("dataLocal");
          11. ?? Query query = tempSess.createQuery("from?? Shop");
          12. ?? query.list();
          13. ??
          14. ?? SessionManager tempSess27 = dbm.get("dateManage");
          15. ?? Query query27 = tempSess27.createQuery("from Shop");
          16. ?? query27.list();
          17. }
          18. private void setDatabase() {
          19. ?? SessionManager dateManageLocal = new SessionManager("localhost.cfg.xml");
          20. ?? SessionManager dateManage27 = new SessionManager("data_server.cfg.xml");
          21. ?? dbm.put("dateManage", dateManage27);
          22. ?? dbm.put("dataLocal", dateManageLocal);
          23. }
          24. }
          posted on 2009-07-03 13:51 jadmin 閱讀(72) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 仙桃市| 罗山县| 富蕴县| 沧州市| 洱源县| 高碑店市| 长治县| 西丰县| 辽宁省| 高邑县| 滦南县| 玉树县| 绥德县| 遂宁市| 福清市| 太原市| 娄底市| 株洲市| 长泰县| 墨竹工卡县| 伽师县| 宜昌市| 灵武市| 集贤县| 麟游县| 青田县| 湘阴县| 水富县| 翁牛特旗| 高台县| 七台河市| 灵川县| 旬邑县| 金昌市| 门源| 蒲城县| 思南县| 陇西县| 定安县| 东源县| 昌乐县|