日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jpa 总结

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jpa 总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉:http://blog.csdn.net/linzhiqiang0316/article/details/52639265

先來介紹一下JPA中一些常用的查詢操作:

?

[java]?view plain?copy
  • ?//And?---?等價于?SQL?中的?and?關鍵字,比如?findByHeightAndSex(int?height,char?sex);??
  • ?public?List<User>?findByHeightAndSex(int?height,char?sex);??
  • ??
  • //?Or?---?等價于?SQL?中的?or?關鍵字,比如?findByHeightOrSex(int?height,char?sex);??
  • ?public?List<User>?findByHeightOrSex(int?height,char?sex);??
  • ??
  • ?//Between?---?等價于?SQL?中的?between?關鍵字,比如?findByHeightBetween(int?min,?int?max);??
  • ?public?List<User>?findByHeightBetween(int?min,int?max);??
  • ??
  • ?//LessThan?---?等價于?SQL?中的?"<",比如?findByHeightLessThan(int?max);??
  • ?public?List<User>?findByHeightLessThan(int?max);??
  • ??
  • ?//GreaterThan?---?等價于?SQL?中的">",比如?findByHeightGreaterThan(int?min);??
  • ?public?List<User>?findByHeightGreaterThan(int?min);??
  • ??
  • ?//IsNull?---?等價于?SQL?中的?"is?null",比如?findByNameIsNull();??
  • ?public?List<User>?findByNameIsNull();??
  • ??
  • ?//IsNotNull?---?等價于?SQL?中的?"is?not?null",比如?findByNameIsNotNull();??
  • ?public?List<User>?findByNameIsNotNull();??
  • ??
  • ?//NotNull?---?與?IsNotNull?等價;??
  • ?public?List<User>?findByNameNotNull();??
  • ??
  • ?//Like?---?等價于?SQL?中的?"like",比如?findByNameLike(String?name);??
  • ?public?List<User>?findByNameLike(String?name);??
  • ??
  • ?//NotLike?---?等價于?SQL?中的?"not?like",比如?findByNameNotLike(String?name);??
  • ?public?List<User>?findByNameNotLike(String?name);??
  • ??
  • ?//OrderBy?---?等價于?SQL?中的?"order?by",比如?findByNameNotNullOrderByHeightAsc();??
  • ?public?List<User>findByNameNotNullOrderByHeightAsc();??
  • ??
  • ?//Not?---?等價于?SQL?中的?"!?=",比如?findByNameNot(String?name);??
  • ?public?List<User>?findByNameNot(String?name);??
  • ??
  • ?//In?---?等價于?SQL?中的?"in",比如?findByNameIN(String?name);??
  • ?public?List<User>?findByNameIn(String?name);??
  • ??
  • ?//NotIn?---?等價于?SQL?中的?"not?in",比如?findByNameNotIN(String?name);??
  • ?public?List<User>?findByNameNotIn(String?name);??
  • JPA中的風格就是這樣,每個方法其實都是一條SQl命令,通過一些關鍵字就可以實現SQL中類似于like in等等之類的命令了。

    ?

    最重要的是我們再開發的過程中,只需要編寫dao中一個個方法,不需要我們編寫dao的實現類,這樣就可以大大的挺高代碼的復用率、提高我們的開發效率。

    說道這里不免會有人會問,那一些比較復雜的關聯查詢要怎么實現呢,JPA的處理方法是:利用原生的SQl命令來實現那些復雜的關聯查詢,下面就來看下案例。

    ?

    [java]?view plain?copy
  • //利用原生的SQL進行查詢操作??
  • ???@Query(value?=?"select?o.*?from?orders?o?,user?u?where?o.uid=u.id?and?u.name=?1",?nativeQuery?=?true)??
  • ???@Modifying??
  • ???public?List<Order>?findOrderByName(String?name);??
  • ??
  • ???//利用原生的SQL進行刪除操作??
  • ???@Query(value?=?"delete?from?orders?where?id=?1?",?nativeQuery?=?true)??
  • ???@Modifying??
  • ???public?void?deleteOrderById(int?id);??
  • ??
  • ???//利用原生的SQL進行刪除操作??
  • ???@Query(value?=?"delete?from?orders?where?uid=?1?",?nativeQuery?=?true)??
  • ???@Modifying??
  • ???public?void?deleteOrderByUId(int?uid);??
  • ??
  • ???//利用原生的SQL進行修改操作??
  • ???@Query(value?=?"update?orders?set?name=?1?where?id=?2?",?nativeQuery?=?true)??
  • ???@Modifying??
  • ???public?void?updateOrderName(String?name,int?id);??
  • ??
  • ???//利用原生的SQL進行插入操作??
  • ???@Query(value?=?"insert?into?orders(name,uid)?value(?1,?2)",?nativeQuery?=?true)??
  • ???@Modifying??
  • ???public?void?insertOrder(String?name,int?uid);??
  • 上面的案例中給出了,利用JPA實現原生的SQL操作,可以很方便的進行數據庫表的操作。
    所以如果是那種查詢語句不是非常復雜,對查詢時間要求不是特別苛刻的項目,完全可以采用JPA來進行項目的開發。

    ?

    下面接著來介紹JPA是怎么實現分頁的效果,其實JPA脫胎于hibernate,所以本身就對分頁功能有很好的支持。下面給出具體例子:

    ?

    [java]?view plain?copy
  • //實現分頁功能??
  • Page<User>?findByNameNot(String?name,Pageable?pageable);??
  • [java]?view plain?copy
  • @RequestMapping(value?=?"/params",?method=?RequestMethod.GET)??
  • ???@ResponseBody??
  • ???public?String?getEntryByParams(@RequestParam(value?=?"name",?defaultValue?=?"林志強")?String?name,?@RequestParam(value?=?"page",?defaultValue?=?"0")?Integer?page,?@RequestParam(value?=?"size",?defaultValue?=?"15")?Integer?size)?{??
  • ???????Sort?sort?=?new?Sort(Sort.Direction.DESC,?"id");??
  • ???????Pageable?pageable?=?new?PageRequest(page,?size,?sort);??
  • ???????Page<User>?pages=userDao.findByNameNot(name,pageable);??
  • ???????Iterator<User>?it=pages.iterator();??
  • ???????while(it.hasNext()){??
  • ???????????System.out.println("value:"+((User)it.next()).getId());??
  • ???????}??
  • ???????return?"success...login....";??
  • ???}??
  • 上面的代碼一個是在dao層中的,一個是在controller中的。

    ?

    dao層中添加一個返回值為Page,參數值為Pageable。controller層中通過實例化Pageable這個類,然后調用dao層這個分頁方法。

    通過這些步驟就可以輕輕松松的實現分頁的效果啦,看起來是不是特別方便。

    最后在給大家介紹一下JPA是如何實現事務操作的。其實因為SpringBoot中已經對事務做了很好的封裝了,使用起來特別方便。下面看一下案例:

    ?

    [java]?view plain?copy
  • @RequestMapping("/saveOrder")??
  • @ResponseBody??
  • @Transactional()??
  • public?String?saveOrder(){??
  • ????Order?o1=new?Order("11",2);??
  • ????Order?o2=new?Order("22",2);??
  • ????Order?o3=new?Order("33",2);??
  • ????Order?o4=new?Order("44",2);??
  • ????orderDao.save(o1);??
  • ????orderDao.save(o2);??
  • ????orderDao.save(o3);??
  • ????orderDao.save(o4);??
  • ????return?"successfull....saveOrder......";??
  • }??
  • 只要在方法的上面加上@Transaction?這個注解就可以輕輕松松的實現事務的操作了,是不是特別方便啊。

    ?

    不過這里有幾點需要注意的是:

    1.這個注解實現的事務管理器是默認的,如果不想要默認是事務管理器,可以自己進行添加,我這里就不多介紹了。

    2.事務的隔離級別也是可以自己設置的,具體請看這篇博客?點擊打開鏈接

    3.事務的傳播行為也是可以自己設置的,具體請看這篇博客點擊打開鏈接

    轉載于:https://www.cnblogs.com/yanghongfei/p/8288438.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的jpa 总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。