Spring Data jpa之jpql查询@Query注解

简介: Spring Data jpa之jpql查询@Query注解

环境和上一篇的环境一样:点击


    /**
     * 案例:根据客户名称查询客户
     *      使用jpql的形式查询
     *     jpql:from Customer where custName = ?
     *
     * 配置jpql语句,使用@Query注解
     */
//    行版本的
//    JDBC style parameters (?) are not supported for JPA queries. 语句后面需要添加占位符的位置从1,开始
    @Query(value = "from Customer where custName =?1")
    public Customer findCustomerByCustName1(String name);
    /**
     * 案例:根据客户名称和客户id查询客户
     *  jpql:from Customer where custName = ? and custId = ?
     *  低版本中 :默认对于多个站位符中,方法参数需要与占位符的顺序相同,也可以指定占位符的来源
     *  高版本中都需要指定来源
     *
     */
    @Query(value = "from Customer where custName = ?1 and custId = ?2")
    public Customer findCustomerByCustNameAndCustId(String name,Long id);
     /**
     * 使用jpql 根据id更新新用户额的名称
     * sql : update cst_customer set cst_name = ? where cst_id = ?
     * jpql:update Customer set custName = ? where custId = ?
     * @Query
     *      是用来查询的,要进行其他的操作需要申明
     *
     * 申明此操作是用来更新操作的
     * @Modifying 代表的是当前的是一个更新操作
     */
     //报错:问题没有解决记录一下
     //InvalidDataAccessApiUsageException: Parameter value [4] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [4] did not match expected type [java.lang.String (n/a)]
     @Query(value = " update Customer set custName = ?1 where custId = ?2")
    @Modifying
    public void updateCustomerById(String name,long id);
    /**
     * 使用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();
    @Query(value = "select * from cst_customer where cust_name like ?1",nativeQuery = true)
    public List<Object [] > findAllByCustName(String name);
    /**
     *根据约定的命名规范来编写方法签名,可以直接使用
     *  findBy:查询
     *      对象中的属性(首字母大写):查询条件
     *      CustName
     *          默认情况使用 等于的方式进行查询
     *          特殊查询方式
     *  findByCustName  ---- 根据客户名称查询
     *  再springdataJpa的运行阶段
     *      会根据方法名称进行解析  findBy  from xxx(实体类)
     *                      属性名称    where custName =
     */
    public Customer findCustomerByCustName(String name);
    /**
     * 特殊查询方式
     * findBy + 属性名称 (根据属性名称进行完成匹配查询)
     *  findBy + 属性名称 + “查询方式(Like | isnull)"
     *  findByCustNameLike
     *
     */
    public List<Customer> findByCustName(String name);
    /**
     * 使用客户名称模糊匹配和客户所属行业精准匹配查询
     */
    public Customer findByCustNameLikeAndCustIndustry(String cusName,String custIndustry);


测试代码:


@Test
    public void testfindCustomerByCustName(){
        Customer customer = customerDao.findCustomerByCustName("qijian");
        System.out.println(customer);
    }
    @Test
    public void testfindCustomerByCustNameAndCustId(){
        Customer customer = customerDao.findCustomerByCustNameAndCustId("qijian",4l);
        System.out.println(customer);
    }
    /**
     * 测试jpql的更新操作
     *  springDateJpa中使用jpql完成更新,删除操作
     *         需要添加事务的支持
     *         默认会执行完成后,回滚事务
     * @RollBack : 设置是否自动回滚
     *          false|true
     */
    //报错:问题没有解决记录一下
    //InvalidDataAccessApiUsageException: Parameter value [4] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [4] did not match expected type [java.lang.String (n/a)]
    @Test
    @Transactional
    @Rollback(value = false)
    public void testUpdateById(){
         customerDao.updateCustomerById("qijian",4l);
    }
    @Test
    public void testfindsql(){
        List<Object []> list = customerDao.findsql();
        for (Object[] obj:list){
            System.out.println(Arrays.toString(obj));
        }
    }
    @Test
    public void testfindAllByCustName(){
        List<Object []> list = customerDao.findAllByCustName("qijian");
        for (Object[] obj:list){
            System.out.println(Arrays.toString(obj));
        }
    }
    @Test
    public void testFindCustomerByCustName(){
        Customer customer = customerDao.findCustomerByCustName("qijian");
        System.out.println(customer);
    }
    /**
     * 测试方法名规则查询
     */
    @Test
    public void testfindByCustName(){
        List list = customerDao.findByCustName("qijian");
        System.out.println(list);
    }
    @Test
    public void findByCustNameLikeAndCustIndustry(){
        customerDao.findByCustNameLikeAndCustIndustry("IT","qiji%");
    }
相关文章
|
5天前
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
21 4
|
6天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
29 6
|
1月前
|
XML Java 数据库连接
spring boot 参数的过滤注解与实战
在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。
29 1
|
1月前
|
Java 数据库 Spring
【spring(四)】Spring事务管理和@Transactional注解
【spring(四)】Spring事务管理和@Transactional注解
|
14天前
|
XML Java 数据格式
进阶注解探秘:深入Spring高级注解的精髓与实际运用
进阶注解探秘:深入Spring高级注解的精髓与实际运用
26 2
|
14天前
|
XML Java 数据格式
从入门到精通:Spring基础注解的全面解析
从入门到精通:Spring基础注解的全面解析
31 2
从入门到精通:Spring基础注解的全面解析
|
18天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
15 0
|
SQL Java 数据库连接
七十四、Spring与DAO操作 query()
七十四、Spring与DAO操作 query()
七十四、Spring与DAO操作 query()
|
29天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
43 0
|
1月前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
111 0