paulwong

          My Links

          Blog Stats

          常用鏈接

          留言簿(67)

          隨筆分類(1393)

          隨筆檔案(1151)

          文章分類(7)

          文章檔案(10)

          相冊

          收藏夾(2)

          AI

          Develop

          E-BOOK

          Other

          養(yǎng)生

          微服務(wù)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          60天內(nèi)閱讀排行

          讓spring-data-jpa解放你的DAO

          最近項目用Spring-data-jpa,確實很方便。如果你也曾經(jīng)被重復(fù)無聊的dao代碼雷到的話,就可以考慮將ORM framework換成spring-data-jpa了。 只要繼承CrudRepository或者PagingAndSortingRepository,dao層基本上就只剩下定義接口方法這么一件事情了,連實現(xiàn)都不用寫,因為默認(rèn)實現(xiàn)SimpleJpaRepository已經(jīng)幫你實現(xiàn)了基本的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的方法,它會動態(tài)將findByName()的方法定義翻譯成適當(dāng)?shù)腍QL。

          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}

          各種翻譯規(guī)則可細(xì)看官方文檔

          而且還可以用@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}

          然后在調(diào)用該repository的service中遍歷將對應(yīng)的字段轉(zhuǎn)換為相應(yīng)的字段即可。

          具體可以看官方reference

          如果SimpleJpaRepository中的方法不夠用,擴(kuò)展起來也非常方便,只要在BaseRepository定義自己的借口方法,然后實現(xiàn)類繼承SimpleJpaRepository實現(xiàn)自己的方法,然后將jpa的factory-class替換成自己寫的實現(xiàn)類即可。

          當(dāng)然spring data jpa也有criteria實現(xiàn),叫Specification,有自己的語法,就一個接口方法,多表關(guān)聯(lián)復(fù)雜條件查詢很多時候就需要用到這個,還沒細(xì)研究。再議。

          posted on 2013-05-09 14:16 paulwong 閱讀(5574) 評論(1)  編輯  收藏 所屬分類: SPRING

          Feedback

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

          springdata demo教程源代碼下載:http://zuidaima.com/share/kspringdata-p1-s1.htm  回復(fù)  更多評論   


          主站蜘蛛池模板: 新和县| 溧水县| 乌兰察布市| 江西省| 漯河市| 阳西县| 永仁县| 武威市| 文昌市| 涞源县| 东海县| 镇江市| 义乌市| 马关县| 白河县| 南部县| 通许县| 邻水| 仪征市| 晋州市| 澎湖县| 清河县| 金山区| 景泰县| 弋阳县| 贵溪市| 吉林市| 白玉县| 庄河市| 蒙自县| 正镶白旗| 禹州市| 台安县| 平和县| 兰州市| 柞水县| 伊吾县| 蛟河市| 锡林浩特市| 永福县| 湛江市|