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%");
    }
相关文章
|
7天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
125 73
|
2天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
33 21
|
7天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
7天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
8月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
175 0
|
4月前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
|
5月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
49 0
|
5月前
|
存储 Java 数据库
|
5月前
|
存储 Java API
|
5月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
103 0