在使用Spring Data Jpa框架时,根据业务需求我们通常需要进行复杂的数据库查询,并返回我们自定义的实体类,而在该框架下,目前仅仅支持返回与数据库映射进行持久化的POJO实体。虽然在框架上我们可以使用@Query注解执行我们自定义的sql语句,但是其返回值为List<Object[]> 类型,即多个Object数组的List集合。

<Excerpt in index | 首页摘要>

<The rest of contents | 余下全文>

@Query()注解

通过使@query注解,可以自定义语句进行sql操作

下例为在数据库中查询10个随机的选择题的自定义查询方法:

1
2
3
4
public interface MultipleChoiceRepository extends JpaRepository<MultipleChoice,Long> {
@Query(value = "select * from choice ORDER BY RAND() limit :num",nativeQuery = true)
public List<MultipleChoice> findByNmber(@Param("num") Integer num);
}

开启mysql语句

1
@Query(value = "",nativeQuery = true)  //nativeQuery= true开启mysql

@Modefying()注解

如果是删除或修改操作,需要加入此注解进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作 ;默认情况下,是只读,所以查询不需要

参数传递:

@Param()注解

使用@Param注解可以给查询语句中注入参数

1
@Param("num") Integer num

在sql语句中使用 :参数名 进行调用

使用?占位符

1
2
3
4
5
6
public interface MultipleChoiceRepository extends JpaRepository<MultipleChoice,Long> {
@Query(value = "select * from choice ORDER BY RAND() limit ?",nativeQuery = true)

public List<MultipleChoice> findByNmber(Integer num);

}

sql语句中也可以使用?占位符的方式进行参数写入