jpql的查询方式:java持久化查询语言:
特点:语法或关键字和SQL语句类似
查询的是类和类中的属性
需要将jpql语句配置到接口方法上
- 特有的查询:需要在dao接口上配置方法
- 在新添加的方法上,使用注解的形式配置jpql查询语句
- 注解 : @Query
-
public interface StudentDao extends JpaRepository<Student,Integer>, JpaSpecificationExecutor<Student> { /** * 此时StudentDao 就已经具备了基本的CRUD操作了 */ /** * 案例: 根据用户名称查询用户 * 根据jpql的形式查询 * jpql: from Student where name = ? * *配置jpql语句 使用@Query注解 * * ? 后面还有个数字表示这是第几个参数 * */ @Query(value = "from Student where name= ?1") public List<Student> findJpql(String name); } @Test public void testfindjpql() { System.out.println(studentDao); List<Student> 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);
}