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訪問多個數據庫步驟三:測試類