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月前
|
NoSQL Java 数据库连接
《深入理解Spring》Spring Data——数据访问的统一抽象与极致简化
Spring Data通过Repository抽象和方法名派生查询,简化数据访问层开发,告别冗余CRUD代码。支持JPA、MongoDB、Redis等多种存储,统一编程模型,提升开发效率与架构灵活性,是Java开发者必备利器。(238字)
|
5月前
|
存储 Java 关系型数据库
Spring Boot中Spring Data JPA的常用注解
Spring Data JPA通过注解简化数据库操作,实现实体与表的映射。常用注解包括:`@Entity`、`@Table`定义表结构;`@Id`、`@GeneratedValue`配置主键策略;`@Column`、`@Transient`控制字段映射;`@OneToOne`、`@OneToMany`等处理关联关系;`@Enumerated`、`@NamedQuery`支持枚举与命名查询。合理使用可提升开发效率与代码可维护性。(238字)
504 1
存储 JSON Java
746 0
|
6月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
612 0
|
8月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
680 2
|
9月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
328 15
|
9月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
460 1
|
10月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
318 32
|
5月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1036 3
|
5月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
492 4

热门文章

最新文章