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集合。

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

  1. thinkphp 带条件分页查询

    thinkphp 带条件分页查询:form表单传值时候,method='get'. 用 get 传值

  2. springboot+thymeleaf+pageHelper带条件分页查询

    html层 <div> <a class="num"><b th:text="'共 '+ ${result.resultMap['pages ...

  3. spring配置带参数的视图解析器:ParameterMethodNameResolver

    1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...

  4. ADO.NET笔记——带参数的查询防止SQL注入攻击

    相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数 ...

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

    把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设 ...

  6. Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案

     IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinat ...

  7. JPA 多表分页查询

    业务场景:大学生毕业后统计毕业去向.学生实体和毕业去向实体一对一关系. 实体: @Entity @Data @Table(name = "t_s_student") public ...

  8. jpa自定义条件分页查询

    主要依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  9. spring boot 自定义sql分页查询

    1.自定义sql查询分页 @Override public <T> Page<T> pageSQL(@Nonnull String sql, @Nonnull Pageable ...

随机推荐

  1. 使用Zabbix通过ILO管理口监控惠普服务器

    https://blog.csdn.net/qq_41571056/article/details/82928542

  2. spring boot官方配置

    #BANNER banner.charset = UTF-8 #横幅文件编码.banner.location = classpath:banner.txt #横幅文件位置.banner.image.l ...

  3. VBA通过C#以API方式调用JS脚本函数

    http://www.cnblogs.com/Charltsing/p/JSDotNetAPI.html 在网页采集中,很多时候需要运行网站下载的某个js文件中的函数,以计算Request参数.VBA ...

  4. 3、Shiro授权

    Shiro授权过程和认证过程相似: 项目结构: package com.shiro.shiroframe; import org.apache.shiro.SecurityUtils; import ...

  5. 【flask】项目集成Sentry收集线上错误日志

    flask集成sentry分为4个步骤: 首先在sentry官网注册1个账号 然后创建1个新的项目,这里我选择的是flask,这会得到一些关于sdk的使用说明 接下来创建一个简单的flask项目使用s ...

  6. expression,statement,definition ,identifier(symbol) ,literal(字面量) 术语

    expression: an expression evaluates to a value only statement: a statement containing executable cod ...

  7. gzip, deflate delphi xe 2 解码 成功 哈哈

    2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 http://bbs.csdn.net/topics/190020986   ...

  8. 中国MOOC_零基础学Java语言_第4周 循环控制_2念整数

    2 念整数(5分) 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er san si 注意, ...

  9. html script生成二维码

    <div class="code" align="center"> <p >手机端扫描以下二维码直接观看(支持安卓Android/苹果i ...

  10. django 的 三个 时间 字段