Spring Data JPA使用JPQL与原生SQL进行查询
程序员文章站
2022-04-28 18:04:58
...
1、使用JPQL语句进行查询
JPQL是面向对象进行查询的语言,可以通过自定义的JPQL完成UPDATE和DELETE操作。JPQL不支持使用INSERT。对于UPDATE或DELETE操作,必须使用注解 @Modifying 进行修饰。
package com.pjb.jpauserdemo.dao;
import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 用户信息数据库访问接口
* 使用JPQL语言
* @author pan_junbiao
**/
@Repository
public interface UserJpqlDao extends JpaRepository<UserInfo,Integer>
{
/**
* 根据用户姓名,查询用户信息
*/
@Query("SELECT u FROM UserInfo u WHERE u.userName = ?1")
public UserInfo getUserInfoByName(String name);
/**
* 根据用户姓名,模糊查询用户列表
*/
@Query("SELECT u FROM UserInfo u WHERE u.userName like %:name%")
public List<UserInfo> getUserListByName(String name);
/**
* 修改用户姓名
*/
@Modifying
@Query("UPDATE UserInfo u SET u.userName = :name WHERE u.userId = :id")
public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}
2、使用原生SQL语句进行查询
在使用原生SQL查询时,也使用@Query注解。此时,nativeQuery参数需要设置为true。
package com.pjb.jpauserdemo.dao;
import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 用户信息数据库访问接口测试类
* 使用原生SQL语言
* @author pan_junbiao
**/
@Repository
public interface UserSqlDao extends JpaRepository<UserInfo,Integer>
{
/**
* 根据用户ID,获取用户信息
*/
@Query(value = "SELECT * FROM tb_user WHERE user_id = :id",nativeQuery = true)
public UserInfo getUserById(@Param("id")int userId);
/**
* 根据用户姓名,模糊查询用户列表
*/
@Query(value = "SELECT * FROM tb_user WHERE user_name LIKE %:userName%",nativeQuery = true)
public List<UserInfo> getUserListByName(@Param("userName")String userName);
/**
* 修改用户姓名
*/
@Modifying
@Query(value = "UPDATE tb_user SET user_name = :name WHERE user_id = :id",nativeQuery = true)
public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}
可以看到,@Query与@Modifying这两个注解一起声明,可以定义个性化更新操作。
上一篇: 为什么AlphaGo不跟人打麻将?
推荐阅读
-
使用Spring Data JPA进行数据分页与排序
-
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
-
spring-data-jpa使用自定义repository来实现原生sql
-
Spring Data Jpa 中原生查询 REGEXP 的使用详解
-
Spring Data JPA中分别使用Specifications、ExampleMatcher进行查询
-
使用Spring Data JPA进行数据分页与排序
-
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
-
Spring Data JPA使用JPQL与原生SQL进行查询
-
spring data jpa中嵌入 jpql 与sql语句
-
Spring Data JPA中分别使用Specifications、ExampleMatcher进行查询