JAVA数据库操作二(多个数据库操作+Spring data + jpa)
2017-01-03 19:00
676 查看
缺的文件请参考上一篇文章http://blog.csdn.net/makefriend7/article/details/53941458
本文我们将主要实现同时操作两个数据库,(oracle 和mysql)
当然为了展示技巧,本文将以java配置为主
首先是daoContext.xml的内容
好吧。其实有用的就两行。
oralce的配置文件就MyConfig 内容如下
这两个配置文件一出,大部分的工作就完成啦。
作为测试。我们分别定义表MyEntity在 oracle中,表MySqlEntity在mysql中
MySqlEntity的内容如下
测试嘛。就随便弄俩个数据库操作
oracle 的
mysql的
最后就是测试用的MyService
本文我们将主要实现同时操作两个数据库,(oracle 和mysql)
当然为了展示技巧,本文将以java配置为主
首先是daoContext.xml的内容
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <bean class = "db.MyConfig"/> <bean class = "mysqldb.MySqlConfig"/> </beans>
好吧。其实有用的就两行。
oralce的配置文件就MyConfig 内容如下
package db; import com.mysql.cj.jdbc.MysqlDataSource; import oracle.jdbc.pool.OracleDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import javax.sql.DataSource; import java.sql.SQLException; @Configuration @EnableJpaRepositories(basePackages = "db", entityManagerFactoryRef="entityManagerFactoryOracle", transactionManagerRef="transactionManagerOracle" ) public class MyConfig { @Bean public DataSource dataSourceOracle() throws SQLException { OracleDataSource dataSource = new OracleDataSource(); dataSource.setUser("abc"); dataSource.setPassword("abc"); dataSource.setURL("jdbc:oracle:thin:@192.168.1.2:1521:orcl"); dataSource.setImplicitCachingEnabled(true); dataSource.setFastConnectionFailoverEnabled(true); return dataSource; } @Bean public HibernateJpaVendorAdapter jpaVendorAdapterOracle() { HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); adapter.setDatabase(Database.ORACLE); adapter.setShowSql(true); adapter.setGenerateDdl(false); return adapter; } @Bean(name = "entityManagerFactoryOracle") public LocalContainerEntityManagerFactoryBean entityManagerFactoryOracle() throws SQLException{ LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); emf.setDataSource(dataSourceOracle()); emf.setPersistenceUnitName("myPersistence1"); emf.setJpaVendorAdapter(jpaVendorAdapterOracle()); emf.setPackagesToScan("entity"); return emf; } @Bean(name="transactionManagerOracle") public JpaTransactionManager transactionManagerOracle() throws SQLException{ JpaTransactionManager txManager = new JpaTransactionManager(entityManagerFactoryOracle().getObject()); return txManager; } }mysql的配置文件如下
package mysqldb; import com.mysql.cj.jdbc.MysqlDataSource; import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.Transactional; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; @Configuration @EnableJpaRepositories(basePackages = "mysqldb", entityManagerFactoryRef="entityManagerFactoryMySql", transactionManagerRef="transactionManagerMySql" ) public class MySqlConfig { @Bean public DataSource dataSourceMySql() throws SQLException { MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUser("abc"); dataSource.setPassword("abc"); dataSource.setURL("jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"); return dataSource; } @Bean public HibernateJpaVendorAdapter jpaVendorAdapterMySql() { HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); adapter.setDatabase(Database.MYSQL); adapter.setShowSql(true); adapter.setGenerateDdl(true); return adapter; } @Bean(name = "entityManagerFactoryMySql") public LocalContainerEntityManagerFactoryBean entityManagerFactoryMySql() throws SQLException{ LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); emf.setDataSource(dataSourceMySql()); emf.setPersistenceUnitName("myPersistence2"); emf.setJpaVendorAdapter(jpaVendorAdapterMySql()); emf.setPackagesToScan("mysqlentity"); return emf; } @Bean(name="transactionManagerMySql") public JpaTransactionManager transactionManagerMySql() throws SQLException{ return new JpaTransactionManager(entityManagerFactoryMySql().getObject()); } }
这两个配置文件一出,大部分的工作就完成啦。
作为测试。我们分别定义表MyEntity在 oracle中,表MySqlEntity在mysql中
package entity; import javax.persistence.*; import java.math.BigDecimal; @Entity public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "prooduct_id_seq") @SequenceGenerator(name="prooduct_id_seq", sequenceName = "PRODUCT_ID_SEQ", allocationSize = 100) private Integer id; @Version private Integer version; private String testString; private BigDecimal testNumber; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getTestString() { return testString; } public void setTestString(String testString) { this.testString = testString; } public BigDecimal getTestNumber() { return testNumber; } public void setTestNumber(BigDecimal testNumber) { this.testNumber = testNumber; } }
MySqlEntity的内容如下
package mysqlentity; import javax.persistence.*; import java.math.BigDecimal; @Entity public class MySqlEntity { @Id @Column(name = "id", nullable = false, length = 64) private Integer id; @Version private Integer version; private String testString; private BigDecimal testNumber; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getTestString() { return testString; } public void setTestString(String testString) { this.testString = testString; } public BigDecimal getTestNumber() { return testNumber; } public void setTestNumber(BigDecimal testNumber) { this.testNumber = testNumber; } }
测试嘛。就随便弄俩个数据库操作
oracle 的
package db; import entity.MyEntity; import org.springframework.data.jpa.repository.JpaRepository; import java.math.BigDecimal; import java.util.List; public interface MyEntityRepository extends JpaRepository<MyEntity, Long> { List<MyEntity> findByVersion(Integer version); }
mysql的
package mysqldb; import entity.MyEntity; import mysqlentity.MySqlEntity; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MySqlEntityRepository extends JpaRepository<MySqlEntity, Long> { List<MySqlEntity> findByVersion(Integer version); }
最后就是测试用的MyService
package service; import db.MyEntityRepository; import entity.MyEntity; import mysqldb.MySqlEntityRepository; import mysqlentity.MySqlEntity; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; public class MyService { @Autowired public MyEntityRepository myEntityRepository; @Autowired public MySqlEntityRepository mySqlEntityRepository; public String processCommand(String anything) { String str = "hello"; List<MyEntity> myEntityList = myEntityRepository.findAll(); List<MyEntity> myEntityList2 = myEntityRepository.findByVersion(3); List<MySqlEntity> myEntityList3 = mySqlEntityRepository.findAll(); return str; } }怎么样?代码都跑起来了吧。。很容易就实现了JAVA同时操作两个数据库,下一篇将介绍如何操作ES
相关文章推荐
- JAVA操作数据库一(Spring data jpa)
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3
- 在spring Boot中使用Spring-data-jpa操作数据库
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1
- Spring data jpa操作数据库
- SpringBoot入门(三)--数据库操作&&Spring-data-jpa的使用
- Spring Boot 使用 Spring Data JPA 操作数据库
- SpringBoot项目 使用Sprin Data Jpa 操作数据库
- SpringBoot项目 使用Sprin Data Jpa 实现数据库的 增 ,删, 改, 查操作
- 在spring Boot中使用Spring-data-jpa操作数据库
- • Spring Boot 进 阶- 数 据 访 问-使用spring-data-jpa 操作数据库
- 利用Java反射解决Spring Data JPA繁琐更新操作
- SpringBoot学习(五)操作数据库Spring-Data-JPA
- SpringBoot第二讲利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- SpringBoot第二讲 利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作
- spring data jpa 实体类中字段不与数据库表映射 ORA-00904 标识符无效
- Spring Data Jpa 实体类自动创建数据库表失败解决
- springboot JPA操作数据库
- Spring Data Jpa 查询操作的基本实现(Spring Data Jpa 2)