1、JPQR普通查询
@Query(value = “”)
1、select 语句 from (pojo类名) where () = ? and () = ?
2、update语句 update (pojo类名) set (属性名) = ?where (属性名) = ?
3、
@Modifying 确定是一个更新的操作
对执行的update\delete操作时 需要在实现方法上添加@Transactional 事务的支持
但是改注解会自动回滚 不会提交 ,所以要加上另一个注解@Rollback(value = false)
设置事务是否会自动回滚
@Transactional
@Rollback(value = false)
public void test(){
user.updateAll(xxx);
}
2、对sql语句的查询
1、特有的查询:需要在Dao层接口上配置方法
2、在新添加的方法上,使用注解形式配置sql查询语句
3、注解:
@Query
value : jpql语句 | sql语句
nativeQuery: false(使用jpql查询) | true (使用sql查询)
public class userDao{
@Query(value = "select * from t_user ,nativeQuery = true")
//统一使用List<Object []>
List<Object []> findSql();
//条件查询
@Query(value = "select * from t_user where username like ?,nativeQuery = true")
List<Object []> findSql(String username);
}
3、方法名称规则查询
是对jpql查询,更加深入的一层封装
我们只需要按照springdataJpa提供的方法名称规则定义方法,不需要再去配置jpql语句,完成查询
findBy开头:代表查询
对象中属性的名称,首字母名大写 代表根据该属性名称进行查询
public class UserDao{
/**
*方法名的约定:
findBy:查询
对象中的属性名(首字母大写) :查询条件
Username
findByUsername -- 根据名称查询
默认情况:使用 = 的方式查询
在SpringDataJpa的运行阶段
会根据方法名称进行解析 findBy from xxx(实体类)
属性名称 where username =
findBy + 属性名称 (根据属性名称进行完成匹配的查询 = )
findBy + 属性名称 + “查询方式(like | isnull)”
*/
//不许要任何注解
//根据xx查询 findBy + 属性名称 (根据属性名称进行完成匹配的查询 = )
User findByUsername(String username);
//模糊查询 findBy + 属性名称 + “查询方式(like | isnull)”
List<User> findByUsernameLike(String username);
//多条件查询 findBy + 属性名 + “查询方式” + “多条件的连接符(and | or)” + 属性名 + “查询方式”
//对用户名和用户id进行精准匹配
User findByUsernameLikeAndUserId(String username,Integer userId);
}
public class test{
@Test
public void testByUsername(){
User user = userDao.findByUsername("123");
System.out.println(user); //可以运行成功
}
@Test
public void testByUsername(){
List<User> user = userDao.findByUsernameLike("123%");
for(User user1 : user){
System.out.println(user1);
}
}
@Test
public void testByUsernameAndUserId(){
User user = userDao.findByUsernameLikeAndUserId("123",1);
System.out.println(user); //可以运行成功
}
}