SpringBoot——JPA访问MySql+多数据源配置(简单的单表增删改查使用)

一、JPA:使用JPA的好处在于,对于简单的单表增删改查,无需再数据库创建表,只需在工程的bean创建字段的实体类,就会自动创建表;同样,在对于繁琐的表结构查询时,使用JPA会麻烦很多,此时推荐大家使用mybatis表查询
1、创建started project工程
在这里插入图片描述
此时pom.xml相关的依赖包已自动配置完成,如创建工程未勾选jpa组件,则需手动在pom.xml文件添加依赖jpa包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2、在bean创建实体类的属性
在这里插入图片描述
3、创建接口的dao层,到这层时,只需继承JpaRepository就可以在数据库创建一张为Student的表
在这里插入图片描述

在Spring Data JPA中,只需要编写类似上面这样的接口就可实现数据访问

public interface StudentDao extends JpaRepository<Student, Integer>{
		Student findByStuName(String stuName);
}

4、在controller层中调用方法
在这里插入图片描述

@RestController
public class StudentController {
	
	@Autowired
	private StudentDao sd;
	
	@RequestMapping("fun")
	public Object fun() {
		Student name = sd.findByStuName("jackson");
		System.out.println(name);
		return name;
	}
}

5、访问url路径:http://localhost:8080/fun
在这里插入图片描述
二、多数据源配置
1、在application.yml文件中设置两个要链接的数据库配置,比如这样:
在这里插入图片描述

server:
  port: 8080
spring:
  application:
    name: Springboot-jpa
  datasource:
    one:
      driver-class-name: com.mysql.cj.jdbc.Driver
      password: root
      jdbc-url: jdbc:mysql://localhost:3306/local?serverTimezone=UTC
      username: root
    two:
      driver-class-name: com.mysql.cj.jdbc.Driver
      password: root
      jdbc-url: jdbc:mysql://localhost:3306/goods?serverTimezone=UTC
      username: root
  # Hibernate的DDL策略
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
    # 日志打印执行的SQL 
    show-sql: true

说明与注意:
1、多数据源配置的时候,设置一个数据源名称one和two来区分不同的数据源配置
2、数据源连接配置2.x和1.x的配置项是有区别的:2.x使用spring.datasource.secondary.jdbc-url,而1.x版本使用spring.datasource.secondary.url。如果你在配置的时候发生了这个报错java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.,那么就是这个配置项的问题。
2、单独建一个多数据源的配置类,比如下面这样:
在这里插入图片描述
通过@ConfigurationProperties可以知道这两个数据源分别加载了spring.datasource.one.和spring.datasource.two的配置。@Primary注解指定了主数据源,就是当我们不特别指定哪个数据源的时候,就会使用这个Bean真正差异部分在下面的JPA配置上。

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean(name = "oneDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource oneDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "twoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource twoDataSource() {
        return DataSourceBuilder.create().build();
    }
}

3、分别创建两个数据源的MyBatis配置。
one数据源的JPA配置:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactoryOne",
        transactionManagerRef="transactionManagerOne",
        basePackages= { "com.creatorblue.dao.one" }) //设置Repository所在位置
public class DataSourceOneConfig {
    
	@Autowired
    @Qualifier("oneDataSource")
    private DataSource oneDataSource;

    @Autowired
    private JpaProperties jpaProperties;
    @Autowired
    private HibernateProperties hibernateProperties;

    private Map<String, Object> getVendorProperties() {
        return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
    }

    @Primary
    @Bean(name = "entityManagerOne")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
    }

    @Primary
    @Bean(name = "entityManagerFactoryOne")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(oneDataSource)
                .packages("com.creatorblue.bean.one") //设置实体类所在位置
                .persistenceUnit("onePersistenceUnit")
                .properties(getVendorProperties())
                .build();
    }

    @Primary
    @Bean(name = "transactionManagerOne") 
    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { 
    	return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    }
}

说明与注意:
在使用JPA的时候,需要为不同的数据源创建不同的package来存放对应的Entity和Repository(dao),以便于配置类的分区扫描类名上的注解@EnableJpaRepositories中指Repository的所在位置,LocalContainerEntityManagerFactoryBean创建的时候,指定Entity所在的位置其他主要注意在互相注入时候,不同数据源不同配置的命名,基本就没有什么大问题了

4、two数据源的JPA配置:
与one的配置一致,只需改变相应的名称,一定要把two中的所有@primary全去掉

5、测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值