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%");
    }
相关文章
|
10天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
29 0
|
29天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
17天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
41 4
SpringBoot必须掌握的常用注解!
|
1月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
67 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
19天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
58 2
|
19天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
34 1
|
1月前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
14天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
1月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
36 9
|
1月前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解