• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • spring data jpa查詢

    標簽: Spring Data JPA

    spring data jpa查詢

    1 spring Data JPA查詢調用接口方法查詢(count,exists)
    編寫測試統計查詢測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 測試CRUD的操作
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class CustomerDaoTest {
        // 聲明CustomerDao業務對象
        @Autowired   // 自動注入
        private CustomerDao customerDao;
        /**
         * 測試統計查詢:查詢客戶的總數量
         *      count:統計總條數
         */
        @Test
        public void testCount() {
            // 查詢全部的客戶數量
            long count = customerDao.count();
            System.out.println(count);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    編寫測試客戶是否存在的代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 測試CRUD的操作
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class CustomerDaoTest {
        // 聲明CustomerDao業務對象
        @Autowired   // 自動注入
        private CustomerDao customerDao;
        /**
         * 測試:判斷id為5的客戶是否存在
         *      1. 可以查詢以下id為5的客戶
         *          如果值為空,代表不存在,如果不為空,代表存在
         *      2. 判斷數據庫中id為5的客戶的數量
         *          如果數量為0,代表不存在,如果大于0,代表存在
         */
        @Test
        public void  testExists() {
            boolean exists = customerDao.exists(5l);
            System.out.println("id為5的客戶 是否存在:"+exists);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    2 spring Data JPA查詢調用接口方法查詢(findOne和getOne的區別)
    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.transaction.annotation.Transactional;
    /**
     * 測試CRUD的操作
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class CustomerDaoTest {
        // 聲明CustomerDao業務對象
        @Autowired   // 自動注入
        private CustomerDao customerDao;
        /**
         * 根據id從數據庫查詢
         *      @Transactional : 保證getOne正常運行
         *  findOne:
         *      em.find()           :立即加載
         *  getOne:
         *      em.getReference     :延遲加載
         *      * 返回的是一個客戶的動態代理對象
         *      * 什么時候用,什么時候查詢
         */
        @Test
        @Transactional
        public void  testGetOne() {
            Customer customer = customerDao.getOne(5l);
            System.out.println(customer);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    3 JPQL查詢引入
    在繼承JpaRepository,和JpaRepository接口后,我們就可以使用接口中定義的方法進行查詢。
    繼承JpaRepository后的方法列表在這里插入圖片描述
    繼承JpaSpecificationExecutor的方法列表在這里插入圖片描述
    jpql的查詢方式
    jpql:jpa query language (jpq查詢語言)
    特點:語法或關鍵字和sql語句類似。
    查詢的是類和類中的屬性。
    需要將JPQL語句配置到接口方法上
    1.特有的查詢:需要在dao接口上配置方法
    2.在新添加的方法上,使用注解的形式配置jpql查詢語句
    3.注解 : @Query
    使用Spring Data JPA提供的查詢方法已經可以解決大部分的應用場景,但是對于某些業務來說,我們還需要靈活的構造查詢條件,這時就可以使用@Query注解,結合JPQL的語句方式完成查詢。
    @Query 注解的使用非常簡單,只需在方法上面標注該注解,同時提供一個JPQL查詢語句即可。
    此外,也可以通過使用 @Query 來執行一個更新操作,為此,我們需要在使用 @Query 的同時,用 @Modifying 來將該操作標識為修改查詢,這樣框架最終會生成一個更新的操作,而非查詢。
    4 使用jpql完成基本查詢
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.jpa.repository.Query;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 案例:根據客戶名稱查詢客戶
         *      使用jpql的形式查詢
         *  jpql:from Customer where custName = ?
         *  配置jpql語句,使用的@Query注解
         */
        @Query(value="from Customer where custName = ?")
        public Customer findJpql(String custName);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 根據客戶名稱查詢
         */
        @Test
        public void  testFindJPQL() {
            Customer customer = customerDao.findJpql("學無止路");
            System.out.println(customer);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    5 多占位符的賦值
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.jpa.repository.Query;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 案例:根據客戶名稱和客戶id查詢客戶
         *      jpql: from Customer where custName = ? and custId = ?
         *  對于多個占位符參數
         *      賦值的時候,默認的情況下,占位符的位置需要和方法參數中的位置保持一致
         *  可以指定占位符參數的位置
         *      ? 索引的方式,指定此占位的取值來源
         */
        @Query(value = "from Customer where custName = ?2 and custId = ?1")
        public Customer findCustNameAndId(Long id,String name);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        @Test
        public void testFindCustNameAndId() {
            // Customer customer = customerDao.findCustNameAndId(5l, "Adair");
            Customer customer =  customerDao.findCustNameAndId(5l,"Adair");
            System.out.println(customer);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    6 使用jpql完成更新操作
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.jpa.repository.Modifying;
    import org.springframework.data.jpa.repository.Query;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 使用jpql完成更新操作
         *      案例 : 根據id更新,客戶的名稱
         *          更新7號客戶的名稱,將名稱改為“學無止路”
         *  sql  :update cst_customer set cust_name = ? where cust_id = ?
         *  jpql : update Customer set custName = ? where custId = ?
         *  @Query : 代表的是進行查詢
         *      * 聲明此方法是用來進行更新操作
         *  @Modifying
         *      * 當前執行的是一個更新操作
         */
        @Query(value = " update Customer set custName = ?2 where custId = ?1 ")
        @Modifying
        public void updateCustomer(long custId,String custName);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.annotation.Rollback;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.transaction.annotation.Transactional;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試jpql的更新操作
         *  * springDataJpa中使用jpql完成 更新/刪除操作
         *         * 需要手動添加事務的支持
         *         * 默認會執行結束之后,回滾事務
         *   @Rollback : 設置是否自動回滾
         *          false | true
         */
        @Test
        @Transactional //添加事務的支持
        @Rollback(value = false)
        public void testUpdateCustomer() {
            customerDao.updateCustomer(7l,"學無止路");
        }
    }
    

    運行之前數據庫的數據如圖所示:在這里插入圖片描述
    運行結果如圖所示:在這里插入圖片描述
    運行之后數據庫的數據如圖所示:在這里插入圖片描述
    7 查詢全部
    sql語句的查詢
    1.特有的查詢:需要在dao接口上配置方法
    2.在新添加的方法上,使用注解的形式配置sql查詢語句
    3.注解 :@Query
    value :jpql語句 | sql語句
    nativeQuery :false(使用jpql查詢) | true(使用本地查詢:sql查詢)
    是否使用本地查詢
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.jpa.repository.Query;
    import java.util.List;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 使用sql的形式查詢:
         *     查詢全部的客戶
         *  sql : select * from cst_customer;
         *  Query : 配置sql查詢
         *      value : sql語句
         *      nativeQuery : 查詢方式
         *          true : sql查詢
         *          false:jpql查詢
         */
        //@Query(value = " select * from cst_customer" ,nativeQuery = true)
        public List<Object [] > findSql();
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import java.util.Arrays;
    import java.util.List;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試sql查詢
         */
        @Test
        public void testFindSql() {
            List<Object[]> list = customerDao.findSql();
            for(Object [] obj : list) {
                System.out.println(Arrays.toString(obj));
            }
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    8 條件全部
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import org.springframework.data.jpa.repository.Query;
    import java.util.List;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 使用sql的形式查詢:
         *     查詢全部的客戶
         *  sql : select * from cst_customer;
         *  Query : 配置sql查詢
         *      value : sql語句
         *      nativeQuery : 查詢方式
         *          true : sql查詢
         *          false:jpql查詢
         */
        @Query(value="select * from cst_customer where cust_name like ?1",nativeQuery = true)
        public List<Object [] > findSql(String name);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import java.util.Arrays;
    import java.util.List;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試sql模糊配置查詢
         */
        @Test
        public void testFindSql() {
            List<Object[]> list = customerDao.findSql("Adair%");
            for(Object [] obj : list) {
                System.out.println(Arrays.toString(obj));
            }
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    9 方法命名規則查詢:基本查詢
    顧名思義,方法命名規則查詢就是根據方法的名字,就能創建查詢。只需要按照Spring Data JPA提供的方法命名規則定義方法的名稱,就可以完成查詢工作。Spring Data JPA在程序執行的時候會根據方法名稱進行解析,并自動生成查詢語句進行查詢
    按照Spring Data JPA 定義的規則,查詢方法以findBy開頭,涉及條件查詢時,條件的屬性用條件關鍵字連接,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多余的前綴截取掉,然后對剩下部分進行解析。

    //方法命名方式查詢(根據客戶名稱查詢客戶)
    public Customer findByCustName(String custName);
    

    具體的關鍵字,使用方法和生產成SQL如下表所示:
    在這里插入圖片描述
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 方法名的約定:
         *      findBy : 查詢
         *            對象中的屬性名(首字母大寫) : 查詢的條件
         *            CustName
         *            * 默認情況 : 使用 等于的方式查詢
         *                  特殊的查詢方式
         *  findByCustName   --   根據客戶名稱查詢
         *  再springdataJpa的運行階段
         *          會根據方法名稱進行解析  findBy    from  xxx(實體類)
         *                                      屬性名稱      where  custName =
         *      1.findBy  + 屬性名稱 (根據屬性名稱進行完成匹配的查詢=)
         *      2.findBy  + 屬性名稱 + “查詢方式(Like | isnull)”
         *          findByCustNameLike
         *      3.多條件查詢
         *          findBy + 屬性名 + “查詢方式”   + “多條件的連接符(and|or)”  + 屬性名 + “查詢方式”
         */
        public Customer findByCustName(String custName);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試方法命名規則的查詢
         */
        @Test
        public void testNaming() {
            Customer customer = customerDao.findByCustName("Adair");
            System.out.println(customer);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    注意事項:custName在數據庫中數據相同就會報錯誤。
    10 方法命名規則查詢:模糊匹配
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    import java.util.List;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 根據客戶名進行模糊查詢
         * @param custName
         * @return
         */
        public List<Customer> findByCustNameLike(String custName);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import java.util.List;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試方法命名規則的查詢
         */
        @Test
        public void testNaming() {
            List<Customer> list = customerDao.findByCustNameLike("學無止路");
            for (Customer customer : list) {
                System.out.println(customer);
            }
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述
    11 方法命名規則查詢:多條件查詢
    編寫CustomerDao的案例的代碼如下:

    package com.txw.dao;
    
    import com.txw.domain.Customer;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
    /**
     *  符合SpringDataJpa的dao層接口規范
     *        JpaRepository<操作的實體類類型,實體類中主鍵屬性的類型>
     *             封裝了基本CRUD操作
     *        JpaSpecificationExecutor<操作的實體類類型>
     *            封裝了復雜查詢(分頁)
     * @author: Adair
     */
    @SuppressWarnings("all")         // 注解警告信息
    public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
        /**
         * 使用客戶名稱模糊匹配和客戶所屬行業精準匹配的查詢
         * @param custName
         * @param custIndustry
         * @return
         */
        public Customer findByCustNameLikeAndCustIndustry(String custName,String custIndustry);
    }
    

    編寫測試代碼如下:

    package com.txw.test;
    
    import com.txw.dao.CustomerDao;
    import com.txw.domain.Customer;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    /**
     * 使用jpql測試
     * @author: Adair
     */
    @RunWith(SpringJUnit4ClassRunner.class) //聲明spring提供的單元測試環境
    @ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
    @SuppressWarnings("all")         // 注解警告信息
    public class JpqlTest {
        // 聲明CustomerDao業務對象
        @Autowired
        private CustomerDao customerDao;
        /**
         * 測試方法命名規則的查詢
         */
        @Test
        public void testFindByCustNameLikeAndCustIndustry() {
            Customer customer = customerDao.findByCustNameLikeAndCustIndustry("學無止路%", "筆記");
            System.out.println(customer);
        }
    }
    

    運行結果如圖所示:在這里插入圖片描述

    版權聲明:本文為weixin_40055163原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_40055163/article/details/109179955

    智能推薦

    Spring Data JPA 查詢方法那些事

    Spring Data 提供了幾個接口供繼承使用,如 JpaRepository,另外還規定了方法查詢中的關鍵字,即你命名的查詢方法需要符合規范。 詳情參考:SpringBoot整合Spring Data JPA、SpringDataJPA入門。 本篇博文詳細記錄Spring Data JPA查詢中的那些事。 【1】規范方法查詢 ① 只要符號命名規范的接口都可以被正常解析使用 查詢方法以find|...

    springboot結合spring-data-jpa的動態查詢

    Criteria API 這套API可用于構建對數據庫的查詢。 類型安全。通過定義元數據模型,在程序編譯階段就可以對類型進行檢查,不像SQL需要與Mysql進行交互后才能發現類型問題。 如下即為元數據模型。創建一個元模型類,類名最后一個字符為下劃線,內部的成員變量與Girl.class這個實體類的屬性值相對應。 可移植。API并不依賴具體的數據庫,可以根據數據庫類型的不同生成對應數據庫類型的SQL...

    spring-data-jpa 動態條件 分頁查詢

    pom.xml配置 數據庫連接配置   實體類user ,省去部分字段及set、get方法  dao層用UserRepository userService層用 UserService  usercontroller  測試 Postman 測試結果      ...

    Spring Data Jpa的四種查詢方式

    一、調用接口的方式 1.基本介紹 通過調用接口里的方法查詢,需要我們自定義的接口繼承Spring Data Jpa規定的接口 使用這幾種方法的前提是你定義的實體類必須標注上相應的注解 JpaRepository<T,ID> 第一個接口里面定義了一些簡單的CRUD方法,泛型T是你定義的實體類的類型,泛型ID是你的實體類里主鍵的類型 2. JpaSpecificationExecutor ...

    快速學習-Spring Data JPA的查詢方式

    第4章 Spring Data JPA的查詢方式 4.1 使用Spring Data JPA中接口定義的方法進行查詢 在繼承JpaRepository,和JpaRepository接口后,我們就可以使用接口中定義的方法進行查詢 繼承JpaRepository后的方法列表 繼承JpaSpecificationExecutor的方法列表 4.2 使用JPQL的方式查詢 使用Spring Data JP...

    猜你喜歡

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    Spark Streaming處理文件(本地文件以及hdfs上面的文件)

    標題介紹文件流之前先介紹一下Dstream 下面是來自官網一段的說明,Discretized Streams或DStream是Spark Streaming提供的基本抽象。它表示連續的數據流,可以是從源接收的輸入數據流,也可以是通過轉換輸入流生成的已處理數據流。在內部,DStream由一系列連續的RDD表示,這是Spark對不可變的分布式數據集的抽象(有關更多詳細信息,請參見Spark編程指南)。...

    精品国产乱码久久久久久蜜桃不卡