paulwong

让spring-data-jpa解放你的DAO

最近项目用Spring-data-jpa,确实很方便。如果你也曾经被重复无聊的dao代码雷到的话,就可以考虑将ORM framework换成spring-data-jpa了。 只要继承CrudRepository或者PagingAndSortingRepository,dao层基本上就只剩下定义接口方法这么一件事情了,连实现都不用写,因为默认实现SimpleJpaRepository已经帮你实现了基本的CRUD,是不是很方便?基本的CRUD就全解决了。

废话少说,上代码:

1@NoRepositoryBean
2public interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID>{
3 
4}
5 
6@Transational
7public interface TestRepository extends BaseRepository<Test,Long>{
8    Test findByName(String name);
9}

只需这么定义,然后testRepository对象就天然拥有CRUD的方法,它会动态将findByName()的方法定义翻译成适当的HQL。

01@Transational
02public class TestServiceImpl{
03    @Autowried
04    private TestRepository testRepository;
05    public void test(){
06        testRepository.findOne(id);
07        testRepository.findAll(ids);
08        testRepository.delete(id);
09        testRepository.findByName(name);
10    }
11}

各种翻译规则可细看官方文档

而且还可以用@Query的注解。在方法中写JPQL查询语句,还支持nativeQuery,可以使用原生SQL,对报表之类对性能要求比较高的查询就很给力了。

如果有时候只是想查询实体中的某几个字段,而不是整张表都查询出来,可以采用以下方法

1@Transactional
2public interface TestRepository extends BaseRepository<Test,Long>{
3 
4    @Query("select t.id, t.name from Test t")
5    public List<Object[]> findSimpleTest()
6}

然后在调用该repository的service中遍历将对应的字段转换为相应的字段即可。

具体可以看官方reference

如果SimpleJpaRepository中的方法不够用,扩展起来也非常方便,只要在BaseRepository定义自己的借口方法,然后实现类继承SimpleJpaRepository实现自己的方法,然后将jpa的factory-class替换成自己写的实现类即可。

当然spring data jpa也有criteria实现,叫Specification,有自己的语法,就一个接口方法,多表关联复杂条件查询很多时候就需要用到这个,还没细研究。再议。

posted on 2013-05-09 14:16 paulwong 阅读(5562) 评论(1)  编辑  收藏 所属分类: SPRING

Feedback

# re: 让spring-data-jpa解放你的DAO 2015-07-02 17:39 zuidaima

springdata demo教程源代码下载:http://zuidaima.com/share/kspringdata-p1-s1.htm  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航: