spring jpa 带参数分页查询(一)

1、写个接口继承JpaRepository

@NoRepositoryBean
public interface BaseRepository<T,PK extends Serializable> extends JpaRepository<T,PK>
{
}

2、JpaRepository内部已经有好多接口,看到已经继承了PagingAndSortingRepository

@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAll(Iterable<ID> var1);

    <S extends T> List<S> save(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

 3、内部有分页接口findAll(pageable pageable)

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {

	Iterable<T> findAll(Sort sort);
	Page<T> findAll(Pageable pageable);
}

 4、精彩部分来了

可以看到,自带的接口findAll(pageable pageable)只有一个分页参数,但是没有带查询参数。

如果我们需要查询某个条件下的分页,那该怎么办呢?看下面我们的jpa dao接口

  

@Transactional
public interface UserJPA extends JpaRepository<UserEntity,Long>
{
    //查询大于20岁的用户
    @Query(value = "select * from t_user where t_age > ?1",nativeQuery = true)
    public List<UserEntity> nativeQuery(int age);

    //根据用户名、密码删除一条数据
    @Modifying
    @Query(value = "delete from t_user where t_name = ?1 and t_pwd = ?2",nativeQuery = true)
    public void deleteQuery(String name,String pwd);
//可以看到,jpa写法findByName并没有带分页(实际上jpa是根据返回的类型自动判断是否分页),
//如果返回类型为Page,则返回的数据是带分页参数的集合,如果返回类型是list,则返回的数据是list集合。
 Page<UserEntity> findByName(String name, Pageable pageable);//直接添加分页参数
//可以是多个参数的分页查询
 pageable Page<UserEntity> findByNameAndAddress(String name,String addr, Pageable pageable); }

  

看下面的两种情况:

1、返回类型为Page

返回的数据格式为:带分页的参数的集合

2、返回格式为list

修改jpa接口返回数据的类型为list

List<UserEntity> findByNameAndAddress(String name,String addr, Pageable pageable);

  

@RequestMapping("/pagetest")
    public List<UserEntity> getUserByPage() {
        UserEntity user = new UserEntity();
        user.setSize(2);
        user.setSord("desc");
        user.setPage(1);

        //获取排序对象
        Sort.Direction sort_direction = Sort.Direction.ASC.toString().equalsIgnoreCase(user.getSord()) ? Sort.Direction.ASC : Sort.Direction.DESC;
        //设置排序对象参数
        Sort sort = new Sort(sort_direction, user.getSidx());
        //创建分页对象,从第一页开始,此处user.getPage()-1要减一
        PageRequest pageRequest = new PageRequest(user.getPage() - 1, user.getSize(), sort);
        //执行分页查询
        String name = "admin";
        String addr = "jinansf4";
//        return  userJPA.findByName(name,pageRequest);
        return  userJPA.findByNameAndAddress(name,addr,pageRequest);
    }

可以看到返回到数据就是list集合

结论:jpa是根据返回的类型自动判断是否分页,如果返回类型为Page,则返回的数据是带分页参数的集合,如果返回类型是list,则返回的数据是list集合。

原文地址:https://www.cnblogs.com/Andrew520/p/9940314.html

时间: 2024-07-30 14:07:09

spring jpa 带参数分页查询(一)的相关文章

带参数的查询防止SQL注入攻击

把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设定: string strCmd = "SELECT AccountID FROM Account WHERE [email protected] AND [email protected]"; 对于SQL Server数据库,“@”是参数的前缀.上句中定义了两个参数:@AccountNa

ADO.NET快速入门——带参数的查询防止SQL注入攻击

相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设定: string strCmd = "SELECT AccountID FROM Account WHERE [email protected] AND [email protected]"; 对于SQL Server数据库,“@”是参数的前缀.上句中定义了两个参数:@Acc

jpa自定义条件分页查询

主要依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> 这里以我最近自己瞎折腾的项目部分代码为例子(仅展示主要部分): 实体类名称(Confusion) 需要注意的是 类上+ @Entity 主键字段+ @Id package cn.

laravel带参数分页

<!---分页--> <div id="pagination-box"> {{ $list->appends(['mobile'=>$mobile])->links() }} </div> 原文地址:https://www.cnblogs.com/niuben/p/10789576.html

序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询

查询窗口中可以设置很多查询条件 表单中输入的内容转为datagrid的load方法所需的查询条件向原请求地址再次提出新的查询,将结果显示在datagrid中 转换方法看代码注释 <td colspan="2"><a id="searchBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'"&g

015.CI4框架CodeIgniter数据库操作之:带参数查询数

01.我们在Models中写数据库的操作.具体的查询代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_model extends Model { var $Db; function __construct() { parent::__construct(); //创建数据库连接 $this->Db = \Config\Database::connect(); } function getdata

Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 两种处理方法

简介:Spring Data JPA 其实就是JDK方式的动态代理 (需要一个接口 有一大堆最上边的是Repository接口来自org.springframework.data.repository,还有CrudRepository接口及一个实现类SimpleJpaRepository),只要有接口就可以查询数据库了,实际上就是proxy的方法,具体查询的方法有两种一种是简单式就是方法名为findBy+属性名+(AndOrIsEquals等)另一种是自定义的方法就是属性名是瞎起的向abc xy

spring data jpa Specification 复杂查询+分页查询

当Repository接口继承了JpaSpecificationExecutor后,我们就可以使用如下接口进行分页查询: /** * Returns a {@link Page} of entities matching the given {@link Specification}. * * @param spec can be {@literal null}. * @param pageable must not be {@literal null}. * @return never {@l

在Spring Boot中使用Spring-data-jpa实现分页查询(转)

在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式. 1.引入起步依赖    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency