项目代码地址:
- https://github.com/huiyiwu/spring-boot-simple/spring-boot-data-jpa
- https://github.com/huiyiwu/spring-boot-simple/spring-boot-jdbctemplate
文章目录
Spring 框架中使用
JDBCTemplate
完成“对象关系映射”的技术
1. 配置数据源
javax.sql.Datasource
传统上使用URL
以及一些凭据建立数据库连接
1.1. 嵌入式数据库支持
使用内存嵌入式数据库开发应用程序,但是内存数据库不支持持久存储。
Spring Boot可以自动配置嵌入式H2
、HSQL
和Derby
数据库,无需提供任何连接URL,只需要包含要使用的嵌入式数据库的构建依赖库
1.2. 连接到生产数据库
可以使用DataSource池自动配置生产数据库连接。Spring Boot自动选择特定实现:
- 如果
HikariCP
可用,使用 - 否则,如果Tomcat
DataSource
池可用,使用 - 如果两者都不可用,使用
Commons DBCP2
,如果可用。
如果使用spring-boot-starter-jdbc
或spring-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-jdbc
和spring-boot-starter-data-jdbc
的区别