SpringDataJpa (jpql 复杂查询 部分)

jpql的查询方式:java持久化查询语言:

特点:语法或关键字和SQL语句类似

查询的是类和类中的属性

 

需要将jpql语句配置到接口方法上

  1. 特有的查询:需要在dao接口上配置方法
  2. 在新添加的方法上,使用注解的形式配置jpql查询语句
  3. 注解 : @Query
  4. public interface StudentDao extends JpaRepository, JpaSpecificationExecutor {
        /**
         * 此时StudentDao 就已经具备了基本的CRUD操作了
         */
    
    
        /**
         * 案例: 根据用户名称查询用户
         * 根据jpql的形式查询
         *  jpql: from Student where name = ?
         *
         *配置jpql语句   使用@Query注解
         *
         *  ? 后面还有个数字表示这是第几个参数
         *
         */
        @Query(value = "from Student  where name= ?1")
        public List findJpql(String name);
    
    
    }
    
    
    
    
    
    
    
        @Test
        public void testfindjpql() {
            System.out.println(studentDao);
            List list = studentDao.findJpql("张喜");
            for (Object object : list) {
                System.out.println(object);
            }
        }
    
    
    
    
    
    
        /**
         * 根据客户名称和id查询用户
         * jpql: from Student where name = ?1 and id = ?2
         */
        @Query(value = "from Student where name = ?1 and id = ?2")
        Student finduserByIdAndName(String name,Integer id);  //占位符的位置必须和方法中的参数的额位置保持一致  不然会报错

     

更新操作:


   /**
     * 使用jpql完成更新操作
     *  根据id更新客户的名称
     *
     *  sql: update student set name = ? where id = ?
     *
     *  jpql: update Student set name = ? where id =  ?
     *@Query:代表的是进行查询
     *  *声明方法是用来进行更新操作  @Modifying
     *
     */

    @Query(value = "update Student set name = ?1 where id =  ?2")
    @Modifying
    void updateUserNameById(String name,Integer id);






















    /**
     * 更新操作
     *      springdatajpa中使用jpql完成  更新/删除操作   需要手动添加事务支持   @Transactional   (之后会默认回滚事务)
     *
     */
    @Test
    @Transactional   //对事务进行更新和删除操作的时候要加这个注解    添加事务支持
    @Rollback(value = false)   //阻止事务回滚
    public void uopda(){
        studentDao.updateUserNameById("侯嘉",47);
    }

 

 

 

你可能感兴趣的:(jpa)