DAO层实现示例 六:Spring-Data-JPA


项目地址:
https://github.com/FateSolo/DAO-Test

目录:

该系列文章将展示六种不同的DAO层实现方法并总结其不同,本章使用Spring-Data-JPA完成DAO操作。

1. 示例代码:

1) 在spring-common.xml中,配置Spring-Data-JPA:

1
2
3
4
<!-- Spring Data JPA -->
<jpa:repositories base-package="com.fatesolo.dao.impl"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory"/>

在文件开头的beans标签内添加一个xmlns:

1
xmlns:jpa="http://www.springframework.org/schema/data/jpa"

在xsi:schemaLocation中添加:

1
2
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd

2) 在build.gradle中,添加Spring-Data-JPA依赖:

1
compile 'org.springframework.data:spring-data-jpa:1.11.1.RELEASE'

3) 在dao.impl包中创建BookDaoSpringDataJpaImpl.java,编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
package com.fatesolo.dao.impl;

import com.fatesolo.dao.BookDao;
import com.fatesolo.entity.Book;
import org.springframework.data.repository.RepositoryDefinition;
import org.springframework.stereotype.Repository;

@Repository("bookDaoSpringDataJpaImpl")
@RepositoryDefinition(domainClass = Book.class, idClass = Integer.class)
public interface BookDaoSpringDataJpaImpl extends BookDao {
}

4) 打开BookService.java,修改成员变量bookDao的注解:

1
@Resource(name = "bookDaoSpringDataJpaImpl")

2. 项目运行:

1) 使用Tomcat 8运行项目,使用curl工具添加一条数据:

1
curl -d "name=Test6&author=Fate" http://localhost:8080/book

得到如下返回:

1
Book{id=6, name='Test6', author='Fate'}

2) 访问http://localhost:8080/book/6 ,得到如下结果:

1
Book{id=6, name='Test6', author='Fate'}

3) 访问http://localhost:8080/book/name/Test ,得到如下结果:

1
[Book{id=1, name='Test1', author='Fate'}, Book{id=2, name='Test2', author='Fate'}, Book{id=3, name='Test3', author='Fate'}, Book{id=4, name='Test4', author='Fate'}, Book{id=5, name='Test5', author='Fate'}, Book{id=6, name='Test6', author='Fate'}]

3. 总结

就像Spring的JdbcTemplate是对原生Jdbc的封装,Spring-Data-JPA也是Spring对JPA的封装。

可以看到,Spring-Data-JPA已经做到了简化的极致,开发者无需实现任何逻辑代码和sql语句,仅仅继承了BookDao接口并添加了@RepositoryDefinition注解 (或者继承org.springframework.data.repository.Repository及其子接口),就完成了DAO的操作。

Spring-Data-JPA是根据声明方法的命名来自动实现逻辑代码的,findById、findByNameContaining、save等都符合了其命名规则,开发者无需再自行实现。关于具体的命名规则,请参阅Spring官方文档


作者 [@FateSolo]
2017 年 03月 12日