第一次寫oschina空間。先試試水,寫得有點亂,改天再整理下。html
最近項目用Spring-data-jpa,確實很方便。若是你也曾經被重複無聊的dao代碼雷到的話,就能夠考慮將ORM framework換成spring-data-jpa了。 只要繼承CrudRepository或者PagingAndSortingRepository,dao層基本上就只剩下定義接口方法這麼一件事情了,連實現都不用寫,由於默認實現SimpleJpaRepository已經幫你實現了基本的CRUD,是否是很方便?基本的CRUD就全解決了。java
廢話少說,上代碼:spring
<!-- lang: java --> @NoRepositoryBean public interface BaseRepository<T, ID extends Serializable> extends CrudRepository<T, ID>{ } @Transational public interface TestRepository extends BaseRepository<Test,Long>{ Test findByName(String name); }
只需這麼定義,而後testRepository對象就自然擁有CRUD的方法,它會動態將findByName()的方法定義翻譯成適當的HQL。性能
<!-- lang: java --> @Transational public class TestServiceImpl{ @Autowried private TestRepository testRepository; public void test(){ testRepository.findOne(id); testRepository.findAll(ids); testRepository.delete(id); testRepository.findByName(name); } }
各類翻譯規則可細看官方文檔。翻譯
並且還能夠用@Query的註解。在方法中寫JPQL查詢語句,還支持nativeQuery,能夠使用原生SQL,對報表之類對性能要求比較高的查詢就很給力了。code
若是有時候只是想查詢實體中的某幾個字段,而不是整張表都查詢出來,能夠採用如下方法htm
<!-- lang: java --> @Transactional public interface TestRepository extends BaseRepository<Test,Long>{ @Query("select t.id, t.name from Test t") public List<Object[]> findSimpleTest() }
而後在調用該repository的service中遍歷將對應的字段轉換爲相應的字段便可。對象
具體能夠看官方reference繼承
若是SimpleJpaRepository中的方法不夠用,擴展起來也很是方便,只要在BaseRepository定義本身的藉口方法,而後實現類繼承SimpleJpaRepository實現本身的方法,而後將jpa的factory-class替換成本身寫的實現類便可。接口
固然spring data jpa也有criteria實現,叫Specification,有本身的語法,就一個接口方法,多表關聯複雜條件查詢不少時候就須要用到這個,還沒細研究。再議。