设为首页 加入收藏

TOP

hibernate动态多数据库(一)
2015-07-24 10:23:18 来源: 作者: 【 】 浏览:0
Tags:hibernate 动态 数据库
最近老师给了一个任务,需求是这样的
服务器A上有一张表,里面存放了若干个服务器的信息,表的字段包括:
    private int id;
    private String serverName;
    private String host;
    private String userName;
    private String passWord;
我们要通过读取A 数据库上的服务器信息,去对应的数据库里获得数据。

首先咱们分析一下这个问题,多数据库对hibernate来说不是难事,网上资料有很多,例如:
Hibernate访问多个数据库
但是网上的大多数例子都和上面那篇博客一样,是事先知道有几个数据库,每个库的信息,然后手动产生xml。

可是我们的需求是,在程序运行的时候才知道到底有几个数据库。
事先产生xml的路是走不通的。

这时,我想能不能每次我在对服务器A里面的那张表进行增删改的时候,用dom4j的方式自动产生xml?
最后的结论是太复杂。 舍弃。

难道hibernate就只能从xml开始?
当然不,还可以从hibernate.properties开始嘛。
properties和xml都是文件嘛,说了等于没说。

不,难道亲们忘了,java.util.Properties这个类么?
请参考 Hibernate入门 :不使用hibernate.cfg.xml


上面面有一个东西我比较不爽
//创建映射(只需要指定Class对象,自动搜索映射文件)
如果hibernate与spring配合使用
    
        
            
        
        
            
                com.core.model
            
        
    
还可以有packagesToScan这个属性扫描一下。
现在 只能一个一个加addClass了。

ok现在我们来看看代码
再hibernate得使用中,我们会抽象出UtilDAO这个类。
package com.core.dao;

@Component
public class UtilDAO extends HibernateDaoSupport {
    protected void initDao() {
        // do nothing
    }

    public void save(Object transientInstance) {
        try {
            getHibernateTemplate().save(transientInstance);
            // log.debug("save successful");
        } catch (RuntimeException re) {
            // log.error("save failed", re);
            throw re;
        }
    }
    
    public void update(Object transientInstance) {
        try {
            getHibernateTemplate().update(transientInstance);
            // log.debug("save successful");
        } catch (RuntimeException re) {
            // log.error("save failed", re);
            throw re;
        }
    }
    public List findAllList(String entity){
        try {
            String queryString = null;
            queryString = "from "+entity;
            return getHibernateTemplate().find(queryString);
        } catch (RuntimeException re) {
            // log.error("find by property name failed", re);
            throw re;
        }
    }
    
    public void delete(Object transientInstance){
        try {
            getHibernateTemplate().delete(transientInstance);
            // log.debug("save successful");
        } catch (RuntimeException re) {
            // log.error("save failed", re);
            throw re;
        }
    }
   
    @Resource
    public void setSessionFactory0(SessionFactory sessionFactory){  
        super.setSessionFactory(sessionFactory);  
    }
}
看最后一个方法setSessionFactory0,将我们用Properties类生成的sessionFactory注入即可。

我们实现多数据库查询的方法如下:
    @SuppressWarnings("unchecked")
    public String getTreeFromRemote(){
        UtilDAO _utilDAO=new UtilDAO();
        JSONArray ja=new JSONArray();
        List servers=(List) utilDAO.findAllList("Server");  //Server就是最开始说的那个Server
        for (Server server : servers) {
            _utilDAO=Hibernate3WithoutConfig.getUtilDAO(server);
            ja.add(getAPPTree(_utilDAO,server.getServerName()));
        }
        System.out.println("_________");
        System.out.println(ja);
        return SUCCESS;
    }
在数据库中,我们有一个Server表。

如下:

\


至于getAPPTree,就不给大家演示了,已经有了utildao了,而且这个utildao就是server.getServerName()对应的那个数据库的dao 剩下的事情还需要我说嘛?
对了 还有一个:
Hibernate3WithoutConfig.java
public static UtilDAO getUtilDAO(Server s){
        Properties p = new Properties();
        p.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
        p.put("hibernate.connection.url", "jdbc:mysql://"+s.getHost()+"/WG?useUnicode=true&characterEncoding=UTF-8");
        p.put("hibernate.connection.username", s.getUserName());
        p.put("hibernate.connection.password", s.getPassWord());
        p.put("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
        p.put("hiberna
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇bcp sqlcmd bulkinsert中unicode.. 下一篇Spring访问数据库(oracle)配置

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)