项目地址:
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
2http://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
11package 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日