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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JPA二:FindBy和JPQL

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

文章目錄

  • 1 環境搭建
  • 2 Find By
  • 2 JPQL

1 環境搭建

參考鏈接:SpringBoot二:整合其他框架

SQL腳本

-- Boolean類型在mysql中用tinyint(1)表示,1 true, 0 false。 CREATE TABLE `t_users` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用戶id',`name` varchar(45) NOT NULL COMMENT '用戶名',`age` int DEFAULT NULL COMMENT '年齡',`address` varchar(45) DEFAULT NULL COMMENT '地址',`phone` varchar(11) DEFAULT NULL COMMENT '電話',`active` tinyint(1) DEFAULT NULL COMMENT '用戶是否激活',PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `t_users` VALUES (1,'ZHANGSAN',18,'北京','18362610001',1), (2,'李四',25,'上海','18362610002',0), (3,'王五',30,'洛陽','18362610003',1), (4,'趙六',28,'蘇州','18362610004',1), (5,'趙玉',20,'南京','18362610005',1), (6,'zhangsan',15,'西安','18362610006',1), (7,'張三',20,'南京','18362610007',1);

SpringBoot 集成 JPA

  • 項目結構如下

  • 創建普通maven工程,導入依賴

    <dependencies><!-- spring-boot 測試類依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.5.6</version></dependency><!-- jpa 依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId><version>2.6.0</version></dependency><!-- mysql 依賴 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><!-- lombok 依賴 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency> </dependencies>
  • 配置文件 application.yml

    spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rooturl: jdbc:mysql://192.168.181.160:3306/test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=falsejpa:show-sql: true
  • 實體類

    package cn.entity; import lombok.Data; import javax.persistence.*;@Entity @Table(name = "t_users") @Data public class UserEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private Integer userId;@Column(name = "name")private String userName;@Column(name = "age")private Integer userAge;@Column(name = "address")private String userAddress;@Column(name = "phone")private String userPhone;@Column(name = "active")private Boolean userActive; // 用戶是否激活 }
  • 持久層

    package cn.repository; import cn.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<UserEntity, Integer> { }
  • 啟動類

    package cn; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);} }
  • 測試

    package test;import cn.App; import cn.entity.UserEntity; import cn.repository.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource; import javax.transaction.Transactional; import java.util.List;@SpringBootTest(classes = App.class) public class TestEnv {@Resourceprivate UserRepository userRepository;@Test@Transactional // no Session 異常加事務注解public void test1() {UserEntity usersEntity = userRepository.getById(1);System.out.println(usersEntity);// UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)}@Testpublic void test2() {List<UserEntity> list = userRepository.findAll();list.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/} }
  • 2 Find By

  • Spring Data JPA 命名規則:查詢方法以findBy開頭,涉及條件查詢時,條件的屬性用條件關鍵字連接【注:條件屬性首字母需大寫】。框架在進行方法名解析時,會先把方法名多余的前綴截取掉,然后對剩下部分進行解析。

  • 特別說明

  • 由下表可知,Is/Equals等效,且Equals單獨用時加s,和其他連用均不加s(如>=,<=)
  • Like 與 Containing 區別,like語句中的參數需要自己手寫%,Containing不用再寫%
  • 下面這些關鍵字不用背,知道意思即可,使用的時候IDEA會提示
  • findBy 語法總結

    關鍵字方法命名sql where字句
    AndfindByNameAndPwdwhere name= ? and pwd =?
    OrfindByNameOrSexwhere name= ? or sex=?
    Is
    Equals
    findByIdIs
    findByIdEquals
    where id= ?
    BetweenfindByIdBetweenwhere id between ? and ?
    LessThanfindByIdLessThanwhere id < ?
    LessThanEqualfindByIdLessThanEqualwhere id <= ?
    GreaterThanfindByIdGreaterThanwhere id > ?
    GreaterThanEqualfindByIdGreaterThanEqualwhere id > = ?
    AfterfindByIdAfterwhere id > ?
    BeforefindByIdBeforewhere id < ?
    IsNullfindByNameIsNullwhere name is null
    IsNotNull
    NotNull
    findByNameNotNullwhere name is not null
    LikefindByNameLikewhere name like ?
    NotLikefindByNameNotLikewhere name not like ?
    StartingWithfindByNameStartingWithwhere name like ‘?%’
    EndingWithfindByNameEndingWithwhere name like ‘%?’
    ContainingfindByNameContainingwhere name like ‘%?%’
    OrderByfindByIdOrderByCountDescwhere id=? order by count desc
    NotfindByNameNotwhere name <> ?
    InfindByIdIn(Collection<?> c)where id in (?)
    NotInfindByNameNotIn(Collection<?> c)where name not in (?)
    TruefindByActiveTruewhere active = true
    FalsefindByActiveFalsewhere active = false
    IgnoreCasefindByNameIgnoreCasewhere UPPER(name)=UPPER(?)
    • 參考鏈接:spring data jpa 命名規則
  • 編碼&測試

  • 在上文搭建環境的基礎上,修改 UserRepository 接口,添加如下方法

    package cn.repository;import cn.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface UserRepository extends JpaRepository<UserEntity, Integer> {UserEntity findByUserName(String username);/*** and (參數是對象)* * 下面寫法不對,直接報如下錯誤* java.lang.IllegalStateException:* Method public abstract cn.entity.UserEntity cn.repository.UserRepository.findByUserNameAndUserPhone(cn.entity.UserEntity)* expects at least 2 arguments but only found 1. This leaves an operator of type SIMPLE_PROPERTY for property userPhone unbound.* * 就是 findByUserNameAndUserPhone() 方法需要2個參數,但只發現1個* * ☆待解決:參數是對象怎么辦?! ==> 若是一個類幾十個屬性,根據七八個條件查詢,這是函數名就很長了 findByXXX,難不成形參還要單獨寫七八個?!*/ // UserEntity findByUserNameAndUserPhone(@Param("user") UserEntity user);// orUserEntity findByUserNameOrUserPhone(String userName, String userPhone);// is / equalsUserEntity findByUserIdIs(Integer id);UserEntity findByUserIdEquals(Integer id);// betweenList<UserEntity> findByUserAgeBetween(Integer minAge, Integer maxAge);// lessThanList<UserEntity> findByUserAgeLessThan(Integer maxAge);// greaterThanEqualList<UserEntity> findByUserAgeGreaterThanEqual(Integer minAge);// after / beforeList<UserEntity> findByUserAgeAfter(Integer minAge);List<UserEntity> findByUserAgeBefore(Integer maxAge);// like / containing (like語句中的參數需要自己手寫%,Containing不用再寫%)List<UserEntity> findByUserNameLike(String name);List<UserEntity> findByUserNameContaining(String name);// order byList<UserEntity> findByUserNameOrderByUserAgeDesc(String username);List<UserEntity> findByOrderByUserAgeDesc();// inList<UserEntity> findByUserIdIn(List<Integer> ids);// false (查找未激活用戶)List<UserEntity> findByUserActiveFalse();// ignoreCase (忽略大小寫)List<UserEntity> findByUserNameIgnoreCase(String username); }
  • 測試

    package test;import cn.App; import cn.entity.UserEntity; import cn.repository.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource; import java.util.Arrays; import java.util.List;@SpringBootTest(classes = App.class) public class TestFindBy {@Resourceprivate UserRepository userRepository;/*** 查詢所有* (主要是其他方法的測試結果與之對比,確定實際結果是否與預期一致)*/@Testpublic void testFindAll() {List<UserEntity> list = userRepository.findAll();list.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/}/*** findBy 普通測試*/@Testpublic void test() {UserEntity userEntity = userRepository.findByUserName("張三");System.out.println(userEntity);// UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=2323132, userActive=true)}/*** and 測試* (參數為對象時有bug,待解決;若是參數分開寫,同下面 or 測試)*/@Testpublic void testAnd() {}/*** or 測試*/@Testpublic void testOr() {UserEntity user1 = userRepository.findByUserNameOrUserPhone("張三", null);System.out.println("user1 = " + user1);UserEntity user2 = userRepository.findByUserNameOrUserPhone(null, "18362610007");System.out.println("user2 = " + user2);/*** user1 = UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)* user2 = UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/}/*** is / equals*/@Testpublic void testIsAndEquals() {UserEntity user1 = userRepository.findByUserIdIs(1);System.out.println("user1 = " + user1);UserEntity user2 = userRepository.findByUserIdEquals(1);System.out.println("user2 = " + user2);/*** user1 = UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* user2 = UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)*/}/*** between*/@Testpublic void testBetween() {List<UserEntity> list = userRepository.findByUserAgeBetween(15, 20);list.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/}/*** lessThan* greaterThanEqual*/@Testpublic void testThan() {List<UserEntity> list1 = userRepository.findByUserAgeLessThan(20);list1.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)*/List<UserEntity> list2 = userRepository.findByUserAgeGreaterThanEqual(20);list2.forEach(user -> System.out.println(user));/*** UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/}/*** after / before*/@Testpublic void testBeforeAndAfter() {List<UserEntity> list1 = userRepository.findByUserAgeAfter(20);list1.forEach(user -> System.out.println(user));System.out.println("---------------------- 分割線 ----------------------");List<UserEntity> list2 = userRepository.findByUserAgeBefore(20);list2.forEach(user -> System.out.println(user));/*** UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* ---------------------- 分割線 ----------------------* UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)*/}/*** like / containing* like語句中的參數需要自己手寫%,Containing不用再寫%*/@Testpublic void testLikeAndContaining() {List<UserEntity> list1 = userRepository.findByUserNameLike("%趙%");list1.forEach(user -> System.out.println(user));System.out.println("---------------------- 分割線 ----------------------");List<UserEntity> list2 = userRepository.findByUserNameContaining("趙");list2.forEach(user -> System.out.println(user));/*** UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* ---------------------- 分割線 ----------------------* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)*/}/*** order by*/@Testpublic void testOrderBy() {List<UserEntity> list1 = userRepository.findByOrderByUserAgeDesc();list1.forEach(user -> System.out.println(user));/*** UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)* UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)*/}/*** in*/@Testpublic void testIn() {List<Integer> idList = Arrays.asList(1, 3, 7);List<UserEntity> list = userRepository.findByUserIdIn(idList);list.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/}/*** false* 需求:查找未激活用戶*/@Testpublic void testFalse() {List<UserEntity> list = userRepository.findByUserActiveFalse();list.forEach(user -> System.out.println(user));// UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)}/*** ignoreCase (忽略大小寫)*/@Testpublic void testIgnoreCase() {List<UserEntity> list = userRepository.findByUserNameIgnoreCase("zhangsan");list.forEach(user -> System.out.println(user));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)*/} }
  • 2 JPQL

  • 使用Spring Data JPA提供的查詢方法(即 find by 語法)已經可以解決大部分的應用場景,但是對于某些業務來說,我們還需要靈活的構造查詢條件,這時就可以使用 @Query 注解,結合JPQL的語句方式完成查詢。

  • JPQL 語法

  • JPQL操作對象是實體Entity,而非表
  • 大小寫敏感(主要是指java類和屬性名)
  • 注意事項

  • nativeQuery = true 時使用原生SQL語言,否則使用 JPQL ( 默認nativeQuery = false ),且 JPQL 不支持insert操作,因此要使用 nativeQuery=true 使用原生SQL進行插入操作。
  • 增刪改要用 @Modifying 和 @Transactional 注解,因為 @Modifying 只是聲明了這是一個改動操作(包含增刪改),但沒有修改這個方法的事務等級,故還需 @Transactional 注解,該注解本質上是聲明了 @Transactional(readOnly=false) 。因此一般情況下,@Modifying 和 @Transactional 配套使用
  • 參數【具體用法見下面樣例代碼
  • 普通參數
  • 使用 ?x ,x代表下標從1開始,參數有序,x的序號與形參對應
  • 使用id=:id 和 @Param("id") 注解,參數無序,因為有@Param注解確定
  • 對象參數
  • 如 Integer addUser(@Param("user") UserEntity user); 使用時為 :#{#user.userName}、:#{#user.userAge} 等
  • 編碼&測試

    • 基于上文的項目架構,在 UserRepository 接口中添加 JPQL 查詢方法的代碼
  • 持久層

    package cn.repository;import cn.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param;import javax.transaction.Transactional; import java.util.List;public interface UserRepository extends JpaRepository<UserEntity, Integer> {/*-------------------------------- 使用JPQL實現基本的增刪改查 --------------------------------*//*** nativeQuery = true時使用SQL語言,否則使用JPQL(默認nativeQuery = false)* 且JPQL不支持insert操作,因此要使用 nativeQuery=true 使用原生SQL進行插入操作* <p>* 增刪改要用@Modifying和@Transactional注解* 因為@Modifying只是聲明了這是一個改動操作(包含增刪改),但沒有修改這個方法的事務等級,* 故還需@Transactional注解,該注解本質上是聲明了@Transactional(readOnly=false)* 因此一般情況下,@Modifying和@Transactional配套使用* <p>* 參數* 普通參數:* 法1:使用 ?x ,x代表下標從1開始,參數有序,x的序號與形參對應* 法2:使用 id=:id 和 @Param("id")注解,參數無序,因為有@Param注解確定* 對象參數:* 如 Integer addUser(@Param("user") UserEntity user);* 使用時為 :#{#user.userName}、:#{#user.userAge}等*/// 增@Modifying@Transactional@Query(value = "insert into t_users(name,age,address,phone,active) values(?1,?2,?3,?4,?5)", nativeQuery = true)Integer addUser(String name, Integer age, String address, String phone, Boolean active);@Modifying@Transactional@Query(value = "insert into t_users(name,age,address,phone,active) " +"values(:#{#user.userName}, :#{#user.userAge}, :#{#user.userAddress}, " +":#{#user.userPhone}, :#{#user.userActive})", nativeQuery = true)Integer addUser(@Param("user") UserEntity user);// 刪@Modifying@Transactional@Query("delete from UserEntity where id=:id")Integer deleteUser(@Param("id") Integer id);// 改@Modifying@Transactional@Query("update UserEntity set userPhone=?2 where userId=?1")Integer updatePhone(Integer id, String newPhone);/*** 查* <p>* 使用JPQL語法,不能寫"select * ",要用別名。* 把UserEntity實體類取別名為u,再"select u",等價于SQL中的"select *"*/@Query("from UserEntity where id=?1")UserEntity findOneUser(Integer id);@Query("select u from UserEntity u where name=:#{#user.userName} and phone=:#{#user.userPhone}")UserEntity findOneUser(@Param("user") UserEntity user);@Query("from UserEntity")List<UserEntity> findAllUser(); }
  • 測試

    package test;import cn.App; import cn.entity.UserEntity; import cn.repository.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource; import java.util.List;@SpringBootTest(classes = App.class) public class TestJPQL {@Resourceprivate UserRepository userRepository;/*** 增*/@Testpublic void testAdd() {// 法一:普通插入Integer flag1 = userRepository.addUser("test-1", 18, "洛陽", "18362610100", true);System.out.println("flag1 = " + flag1); // flag1 = 1// 法二:對象插入UserEntity paraUser = new UserEntity();paraUser.setUserName("test-2");paraUser.setUserAge(20);paraUser.setUserAddress("鄭州");paraUser.setUserPhone("18362610101");paraUser.setUserActive(false);Integer flag2 = userRepository.addUser(paraUser);System.out.println("flag2 = " + flag2); // flag2 = 1}/*** 刪*/@Testpublic void testDetele() {Integer flag = userRepository.deleteUser(9);System.out.println("flag = " + flag);}/*** 改*/@Testpublic void testUpdate() {Integer flag = userRepository.updatePhone(1, "18362611111");System.out.println("flag = " + flag);}/*** 查*/@Testpublic void testFind() {// 查詢單條數據(法一:普通形參)UserEntity user1 = userRepository.findOneUser(1);System.out.println(user1);// UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)// 查詢單條數據(法二:對象形參)UserEntity paraUser = new UserEntity();paraUser.setUserName("zhangsan");paraUser.setUserPhone("18362610006");UserEntity user2 = userRepository.findOneUser(paraUser);System.out.println(user2);// UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)// 查詢所有List<UserEntity> list = userRepository.findAllUser();list.forEach(u -> System.out.println(u));/*** UserEntity(userId=1, userName=ZHANGSAN, userAge=18, userAddress=北京, userPhone=18362610001, userActive=true)* UserEntity(userId=2, userName=李四, userAge=25, userAddress=上海, userPhone=18362610002, userActive=false)* UserEntity(userId=3, userName=王五, userAge=30, userAddress=洛陽, userPhone=18362610003, userActive=true)* UserEntity(userId=4, userName=趙六, userAge=28, userAddress=蘇州, userPhone=18362610004, userActive=true)* UserEntity(userId=5, userName=趙玉, userAge=20, userAddress=南京, userPhone=18362610005, userActive=true)* UserEntity(userId=6, userName=zhangsan, userAge=15, userAddress=西安, userPhone=18362610006, userActive=true)* UserEntity(userId=7, userName=張三, userAge=20, userAddress=南京, userPhone=18362610007, userActive=true)*/} }
    • 源碼鏈接 blogs-jpa

    總結

    以上是生活随笔為你收集整理的JPA二:FindBy和JPQL的全部內容,希望文章能夠幫你解決所遇到的問題。

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