Spring Boot—8、SQL数据库

项目代码地址:


Spring 框架中使用 JDBCTemplate完成“对象关系映射”的技术

1. 配置数据源

javax.sql.Datasource传统上使用URL以及一些凭据建立数据库连接

1.1. 嵌入式数据库支持

使用内存嵌入式数据库开发应用程序,但是内存数据库不支持持久存储。
Spring Boot可以自动配置嵌入式H2HSQLDerby数据库,无需提供任何连接URL,只需要包含要使用的嵌入式数据库的构建依赖库

1.2. 连接到生产数据库

可以使用DataSource池自动配置生产数据库连接。Spring Boot自动选择特定实现:

  1. 如果HikariCP可用,使用
  2. 否则,如果Tomcat DataSource池可用,使用
  3. 如果两者都不可用,使用Commons DBCP2,如果可用。

如果使用spring-boot-starter-jdbcspring-boot-starter-data-jpa,默认添加HikariCP依赖
可以使用spring.datasource.type指定连接池类型
如果在Tomcat容器中运行应用程序,默认提供tomcat-jdbc

使用spring.datasource.*属性控制Datasource配置:

spring:
	datasource:
		url: jdbc:mysql://localhost/test //必须要指定,否则自动配置默认数据库
		username: dbuser
		password: dbpass
		driver-class-name: com.mysql.jdbc.Driver

1.3. 连接到JNDI数据源

spring.datasource.jndi-name属性可作为spring.datasource.url/username/password属性的替代,以从特定的JNDI位置访问DataSource:

spring:
	datasource:
		jndi-name: java:jboss/datasources/customers

2. 使用JDBCTemplate

Spring的JdbcTemplate和NamedParameterJdbcTemTemplate类是自动配置的,可以使用@Autowire引入使用:
参考文档:Spring Boot JDBCTemplate

3. JPA和Spring Data JPA

添加依赖项:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>

提供的依赖项:

  • Hibernate:最受欢迎的JPA实现之一
  • Spring Data JPA:使基于JPA的存储库实现更加容易
  • Spring ORM:Spring Framework的核心ORM支持

3.1. 实体类

JPA实体在persistence.xml中指定。使用Spring Boot时会使用实体类扫描,不用xml文件指定。
任何使用@Entity、@Embeddable或@MappedSuperclass注释的类都会被考虑为实体类:


@Entity
@Table(name = "m_data_jpa", schema = "spring_boot", catalog = "")
public class MUserEntity {
    private int id;
    private String name;
    private Integer status;

    @Id
    @Column(name = "id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Basic
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MUserEntity that = (MUserEntity) o;
        return id == that.id &&
                Objects.equals(name, that.name) &&
                Objects.equals(status, that.status);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, status);
    }
}

3.2. Spring Data JPA Repositories

Spring Data JPA Repositories是定义的访问数据的接口.
JPA查询是根据方法名自动创建的。
更复杂的查询可以通过@Query查询。
参考文章:Spring Boot Data JPA

3.3. 创建和删除JPA Repositories

默认仅当使用嵌入式数据库时才会自动创建JPA数据库。可以使用spring.jpa.*属性显式设置JPA配置:

spring:	
	jpa:
		hibernate:
			ddl-auto: create-drop		

3.4. 在View中打开EntityManager

默认Spring Boot会自动注册OpenEntityManagerInViewInterceptor以应用"视图中打开EntityManager“模式,其允许在Web视图中进行延迟加载。可以使用spring.jpa.open-in-view设置为false以禁用

4. Spring Data JDBC

Spring Data JDBC自动为CurdRepository上的方法生成SQL,更复杂的使用@Query注释.
可以使用@EnableJdbcRepositories或JdbcConfiguration子类控制Spring Data JDBC的配置。
备注:暂未理解spring-boot-starter-jdbcspring-boot-starter-data-jdbc的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值