jpa原生sql@Query操作增删改查

使用springboog+jpa框架,因为业务需求不能使用封装好的save()方法,故需要在jpa容器里使用@Query注解写sql完成

起初,直接@Query(value=“insert into 对象名(字段名) values (?1)”)插入,但是一直报错unexpected token: VALUES

即sql语句有误,各种改,没用,后来网上查,大多数说法是jpa的jpql不支持insert into ,不经意看到一篇文章里,写的语句后面有一些不一样,试之,完美解决,所以记录下来: @Query(value = “sql语句”,nativeQuery = true)

这里先要认识并加入一个注解 @Modifying:

jpa容器中使用,当使用@Query写jpql时,如果是删除或修改操作,需要加入此注解进行修饰. 以通知   SpringData, 这是一个 UPDATE 或 DELETE 操作 ;默认情况下,是只读,所以查询不需要

然后就是@Query写语句了:

jpa 原生insert的sql语句:

@Modifying
@Query(value = "insert into t_sys_org_user(org_id,user_id) values(?1,?2)",nativeQuery = true)
int addUserToOrg(Long orgId,Long userId);

jpa 原生delete的sql语句:

@Modifying
@Query(value = “delete from t_sys_org_user where org_id=?1 and user_id=?2”,nativeQuery = true)
int deleteUserFromOrg(Long orgId,Long userId);
jpa 原生update的sql语句:

@Modifying
@Query(value = “update t_sys_user set status=0 where user_id=?1”,nativeQuery = true)
int updateUserStatus(Long userId);
jpa 原生select的sql语句:

//jpa 多对多关系的表联合查询 DAO层
@Query(value = “select s from SysUserDTO s left join s.sysOrgDTOSet o where (?1 is null or s.username like ?1) and (?2 is null or o.name like ?2)”)
Page findByUsernameAndOrgName(String username, String orgName, Pageable pageable);
// service层
public Page findByUsernameAndOrgName(String username, String orgName, Pageable pageable){
String name = (usernamenull)?null:"%"+username+"%";
String orgname = (orgName
null)?null:"%"+orgName+"%";
return sysUserDAO.findByUsernameAndOrgName(name,orgname,pageable);
}
jpa hql中使用in关键字

@Query(value = "select distinct r from SysRoleDTO r left join r.sysOrgDTOSet o where (?1 is null or r.name like ?1) "+
“and (?2 is null or r.code like ?2) and o.id in (?3)”)
Page findAllRole(String name, String code, List ids, Pageable pageable);

作者:欢乐的八爪鱼
来源:CSDN
原文:https://blog.csdn.net/gm371200587/article/details/80827483
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(JAVA,sql)