SpringDataJPA之Repository接口

      網友投稿 731 2025-04-06

      Repository 接口是 spring Data JPA 中為我我們提供的所有接口中的頂層接口,而且是個標志接口,Repository 提供了兩種查詢方式的支持

      1)基于方法名稱命名規則查詢

      2)基于@Query 注解查詢

      Repository

      一、基于方法名稱命名規則查詢

      1.方法名稱命名規則查詢

      規則:findBy(關鍵字)+屬性名稱(屬性名稱的首字母大寫)+查詢條件(首字母大寫)

      2.具體使用

      創建接口,并定義相關方法

      /** * Repository 接口使用 * 定義的方法名稱 參考文檔定義 */ public interface UserDao extends Repository { List findByUsernameIs(String string); List findByUsernameLike(String string); List findByUsernameAndUserageGreaterThanEqual(String name,Integer age); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      單元測試

      /** * @program: spring-hibernate * @description: 單元測試 * @author: 波波烤鴨 * @create: 2019-05-18 09:48 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class TestDemo { @Autowired private UserDao usersDao; /** * 需求:使用用戶名作為查詢條件 */ @Test public void test1() { /** * 判斷相等的條件,有三種表示方式 * 1,什么都不寫,默認的就是做相等判斷 * 2,Is * 3,Equal */ List list = this.usersDao.findByUsernameIs("王五"); for (Users users : list) { System.out.println(users); } } /** * 需求:根據用戶姓名做 Like 處理 * Like:條件關鍵字 */ @Test public void test2() { List list = this.usersDao.findByUsernameLike("王%"); for (Users users : list) { System.out.println(users); } } /** * 需求:查詢名稱為王五,并且他的年齡大于等于 22 歲 */ @Test public void test3() { List list = this.usersDao.findByUsernameAndUserageGreaterThanEqual("王五", 22); for (Users users : list) { System.out.println(users); } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      SpringDataJPA之Repository接口

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      查詢結果

      二、基于@Query 注解查詢

      通過方法命令的方式使用的方式如果查詢條件比較復雜,那么方法的名稱就會很長,不是很方便,這時我們可以通過@Query注解的方式來實現。

      2.1通過 JPQL 語句查詢

      JPQL:通過 Hibernate 的 HQL 演變過來的。他和 HQL 語法及其相似。

      創建接口

      //使用@Query 注解查詢 @Query(value="from Users where username = ?") List queryUserByNameUseJPQL(String name); @Query("from Users where username like ?") List queryUserByLikeNameUseJPQL(String name); @Query("from Users where username = ? and userage >= ?") List queryUserByNameAndAge(String name,Integer age);

      1

      2

      3

      4

      5

      6

      7

      單元測試

      /** * 測試@Query 查詢 JPQL */ @Test public void test4(){ List list = this.usersDao.queryUserByNameUseJPQL("王五"); for (Users users : list) { System.out.println(users); } } /** * 測試@Query 查詢 JPQL */ @Test public void test5(){ List list = this.usersDao.queryUserByLikeNameUseJPQL(" 王%"); for (Users users : list) { System.out.println(users); } } /** * 測試@Query 查詢 JPQL */ @Test public void test6(){ List list = this.usersDao.queryUserByNameAndAge("王五", 22); for (Users users : list) { System.out.println(users); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      2.2通過SQL語句查詢

      我們也可以直接在定義的方法頭部通過@Query注解來添加Sql語句來實現,具體如下:

      //使用@Query 注解查詢 SQL //nativeQuery:默認的是 false.表示不開啟 sql 查詢。是否對 value 中的語句做轉義。 @Query(value="select * from users where username = ?",nativeQuery=true) List queryUserByNameUseSQL(String name); @Query(value="select * from users where username like ?",nativeQuery=true) List queryUserByLikeNameUseSQL(String name); @Query(value="select * from users where username = ? and userage >= ?",nativeQuery=true) List queryUserByNameAndAgeUseSQL(String name,Integer age);

      1

      2

      3

      4

      5

      6

      7

      8

      單元測試

      /** * 測試@Query 查詢 SQL */ @Test public void test7(){ List list = this.usersDao.queryUserByNameUseSQL("王五"); for (Users users : list) { System.out.println(users); } } /** * 測試@Query 查詢 SQL */ @Test public void test8(){ List list = this.usersDao.queryUserByLikeNameUseSQL(" 王%"); for (Users users : list) { System.out.println(users); } } /** * 測試@Query 查詢 SQL */ @Test public void test9(){ List list = this.usersDao.queryUserByNameAndAgeUseSQL(" 王五", 22); for (Users users : list) { System.out.println(users); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      2.3 通過@Query 注解完成數據更新

      @Query注解可以完成數據的更新操作,但是不能實現添加和刪除數據的操作,實現如下:

      接口中聲明方法:

      @Query("update Users set userage = ? where userid = ?") @Modifying //@Modifying 當前語句是一個更新語句 void updateUserAgeById(Integer age,Integer id);

      1

      2

      3

      單元測試

      /** * 測試@Query update */ @Test @Transactional @Rollback(false) public void test10(){ this.usersDao.updateUserAgeById(24, 6); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      通過以上的介紹,我們發現Repository接口主要還是實現查詢相關的操作,對DML的支持并不友好,下篇我們講介紹CrudRepository接口。下篇見~

      SQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:定制家居工廠軟件是什么?
      下一篇:定制訂單管理制度
      相關文章
      亚洲妇女无套内射精| 亚洲视频免费在线观看| 亚洲视频在线免费观看| 亚洲动漫精品无码av天堂| 国产亚洲一区二区在线观看| 日韩一卡2卡3卡4卡新区亚洲| 亚洲国产精品尤物yw在线| 亚洲欧美在线x视频| WWW国产亚洲精品久久麻豆| 亚洲AV永久无码天堂影院| 亚洲a∨国产av综合av下载| 国产精品久久亚洲一区二区| 国产精品亚洲专区无码唯爱网| 亚洲AV一区二区三区四区| 国产亚洲美女精品久久久久| 国产成人亚洲午夜电影| 亚洲国产精品成人| 亚洲视频在线一区二区| 国产亚洲精品无码专区| 亚洲精品无码永久中文字幕| 亚洲国产成人一区二区三区 | 亚洲VA中文字幕无码一二三区| 亚洲精品成人片在线观看精品字幕| 亚洲人成人77777网站| 国产A在亚洲线播放| 老司机亚洲精品影院| 亚洲男人的天堂在线| 亚洲一级毛片免费观看| 亚洲天堂免费在线| 亚洲大尺度无码无码专线一区 | 亚洲va在线va天堂va不卡下载 | 亚洲AV无码乱码在线观看| 亚洲人成色7777在线观看不卡| 成人午夜亚洲精品无码网站 | 亚洲第一成年免费网站| 亚洲精品老司机在线观看| 亚洲宅男天堂在线观看无病毒| 亚洲AV无码成人精品区蜜桃 | 亚洲国产婷婷综合在线精品 | 国产亚洲成归v人片在线观看| 亚洲女同成av人片在线观看|