一个项目中hibernate框架下配置多个数据库
来源:互联网 发布:淘宝差评拦截在哪设置 编辑:程序博客网 时间:2024/05/21 14:04
hibernate框架下配置多个数据库
当我们在同一个项目中需要同时连接多个数据库时,在hibernate框架下的我们可以通过配置多个sessionFactory与多个连接池配置实现获取不同数据库的连接session对象。
初始化hibernate的sessionFactory
通过spring全注解方式初始化hibernate
配置如下:
@Beanpublic DataSource druidDataSourceForMySQL() { DruidDataSource database = new DruidDataSource(); database.setDriverClassName(environment.getProperty("jdbc.mysql.driverClassName")); database.setUrl(environment.getProperty("jdbc.mysql.url")); database.setUsername(environment.getProperty("jdbc.mysql.username")); database.setPassword(environment.getProperty("jdbc.mysql.password")); database.setDefaultAutoCommit(false); database.setTimeBetweenEvictionRunsMillis(3600000); database.setMinEvictableIdleTimeMillis(3600000); database.setInitialSize(1); return database; }@Bean(name = "sessionFactory")@Profile("mysql_develop")public LocalSessionFactoryBean sessionFactoryForMySQL() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); // 设置数据源 sessionFactory.setDataSource(druidDataSourceForMySQL()); // 设置entity所在包,用于自动扫描 sessionFactory.setPackagesToScan(new String[]{"com.hcicloud.sap.model"}); // 设置Hibernate的配置属性 Properties props = new Properties(); props.setProperty("hibernate.dialect", environment.getProperty("hibernate.mysql.dialect")); props.setProperty("hibernate.default_schema", environment.getProperty("hibernate.mysql.default_schema")); props.setProperty("hibernate.show_sql", environment.getProperty("hibernate.show_sql")); props.setProperty("hibernate.format_sql", environment.getProperty("hibernate.format_sql")); props.setProperty("hibernate.hbm2ddl.auto", environment.getProperty("hibernate.hbm2ddl.auto")); props.setProperty("hibernate.use_sql_comments", environment.getProperty("hibernate.use_sql_comments"));props.setProperty("hibernate.connection.deferPrepares", "false"); props.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EhCacheProvider"); props.setProperty("hibernate.jdbc.batch_size", environment.getProperty("hibernate.jdbc.batch_size")); props.setProperty("hibernate.jdbc.fetch_size", environment.getProperty("hibernate.jdbc.fetch_size")); // 强制Hibernate按照被更新数据的主键,为SQL更新排序。这么做将减少在高并发系统中事务的死锁。 props.setProperty("hibernate.order_updates", "true"); // session在事务完成后将被自动清洗(flush) props.setProperty("hibernate.transaction.flush_before_completion", "true"); props.setProperty("hibernate.query.substitutions", environment.getProperty("hibernate.query.substitutions")); props.setProperty("hibernate.default_batch_fetch_size", environment.getProperty("hibernate.default_batch_fetch_size")); // 为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取 props.setProperty("hibernate.max_fetch_depth", environment.getProperty("hibernate.max_fetch_depth")); props.setProperty("hibernate.generate_statistics", environment.getProperty("hibernate.generate_statistics")); props.setProperty("hibernate.bytecode.use_reflection_optimizer", environment.getProperty("hibernate.bytecode.use_reflection_optimizer")); props.setProperty("hibernate.cache.use_second_level_cache", "true"); props.setProperty("hibernate.cache.use_query_cache", "true"); props.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.EhCacheRegionFactory"); props.setProperty("net.sf.ehcache.configurationResourceName", environment.getProperty("hibernate.net.sf.ehcache.configurationResourceName")); props.setProperty("hibernate.cache.use_structured_entries", environment.getProperty("hibernate.cache.use_structured_entries")); sessionFactory.setHibernateProperties(props); return sessionFactory;}
注入sessionFactory
通过如让的配置我们获取了指定连接池的sessionFactory
在我们编写的hibernateDao中通过@Autowired与@Qualifier(byName)将sessionFactory进行加载获取session对象
代码如下:
@Autowired@Qualifier("sessionFactory")public void setSessionFactory(final SessionFactory sessionFactory) { this.sessionFactory = sessionFactory;}
获取session对象
不同的数据库配置不同的hibernateDao类,在操作不同的数据库时,直接继承指定的hibernateDao即可。
通过getSession方法获取session对象进行查询:
public Session getSession() { return sessionFactory.getCurrentSession();}getSession().create... 获取criteria 获取HQL查询对象 获取sqlQuery对象
阅读全文
0 0
- 一个项目中hibernate框架下配置多个数据库
- hibernate配置多个数据库
- 关于ssh 框架 applicationContext.xml文件中配置hibernate数据库出现的一个小问题
- Hibernate操作数据库的3个准备和七个步骤,以及在SSH框架中Hibernate的配置。
- Hibernate如何配置操作多个数据库
- Hibernate如何配置操作多个数据库
- IIS中配置多个项目在同一个域名下
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- Spring+Hibernate框架下MySql读写分离,主从数据库配置
- ssh框架中,hibernate配置多个数据源的报表模块
- 一个服务器下配置多个项目,输入域名就能访问项目
- Hibernate配置第一个项目
- Hibernate 配置多个数据库 多个SessionFactory
- ASP.Net MVC 框架下项目中个目录作用
- 类与对象第一题
- java语言程序设计 第七章(7.21、7.35)
- HDU4778
- Linux 静态库、动态库的创建和使用,环境变量初识。
- 洛谷 1542 快递包裹
- 一个项目中hibernate框架下配置多个数据库
- 动态代理由浅入深
- recovery display
- 【51Nod1122】机器人走方格 V4
- 开启mysql服务
- 第七单元笔记整理
- 【对象数组+静态数据成员+静态成员函数+...】面向对象程序设计(B)——第二次作业
- 贝叶斯决策 实例
- 学习堆的配置参数(最大堆和初始堆的设置)