在上一篇《 Spring中利用JdbcTemplate会见数据库 》中先容了一种根基的数据会见方法,团结构建RESTful API和利用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App处事端和Web站点的开拓任务了。
然而,在实际开拓进程中,对数据库的操纵无非就“增删改查”。就最为普遍的单表操纵而言,除了表和字段差异外,语句都是雷同的,开拓人员需要写大量雷同而枯燥的语句来完成业务逻辑。
为了办理这些大量枯燥的数据操纵语句,我们第一个想到的是利用ORM框架,好比:Hibernate。通过整合Hibernate之后,我们以操纵Java实体的方法最终将数据改变映射到数据库表中。
为了办理抽象各个Java实体根基的“增删改查”操纵,我们凡是会以泛型的方法封装一个模板Dao来举办抽象简化,可是这样依然不是很利便,我们需要针对每个实体编写一个担任自泛型模板Dao的接口,再编写该接口的实现。固然一些基本的数据会见已经可以获得很好的复用,可是在代码布局上针对每个实体城市有一堆Dao的接口和实现。
由于模板Dao的实现,使得这些详细实体的Dao层已经变的很是“薄”,有一些详细实体的Dao实现大概完全就是对模板Dao的简朴署理,而且往往这样的实现类大概会呈此刻许多实体上。Spring-data-jpa的呈现正可以让这样一个已经很“薄”的数据会见层酿成只是一层接口的编写方法。好比,下面的例子:
public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }
我们只需要通过编写一个担任自JpaRepository的接口就能完成数据会见,下面以一个详细实例来体验Spring-data-jpa给我们带来的强大成果。
利用示例
由于Spring-data-jpa依赖于Hibernate。假如您对Hibernate有必然相识,下面内容可以绝不艰辛的看懂并上手利用Spring-data-jpa。假如您照旧Hibernate新手,您可以先按如下方法入门,再发起转头进修一下Hibernate以辅佐这部门的领略和进一步利用。
工程设置
在pom.xml中添加相关依赖,插手以下内容:
<dependency <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
在application.xml中设置:数据库毗连信息(如利用嵌入式数据库则不需要)、自动建设表布局的配置,譬喻利用mysql的环境如下:
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的设置属性,其主要浸染是:自动建设、更新、验证数据库表布局。该参数的几种设置如下:
至此已经完成基本设置,假如您有在Spring下整合利用过它的话,相信你已经感觉到Spring Boot的便利之处:JPA的传统设置在persistence.xml文件中,可是这里我们不需要。虽然,最亏得构建项目时候凭据之前提过的最佳实践的工程布局来组织,这样以确保各类设置都能被框架扫描到。
建设实体
建设一个User实体,包括id(主键)、name(姓名)、age(年数)属性,通过ORM框架其会被映射到数据库表中,由于设置了hibernate.hbm2ddl.auto,在应用启动的时候框架会自动去数据库中建设对应的表。
@Entity public class User { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; // 省略结构函数 // 省略getter和setter }
建设数据会见接口