首页 > 其他分享 >使用JPA实现分页和模糊查询

使用JPA实现分页和模糊查询

时间:2023-06-01 13:34:35浏览次数:42  
标签:authman false 分页 operDesc JPA 查询 true page

1、首先创建DAO层接口,实现JpaRepository和JpaSpecificationExecutor两个接口

  • JpaRepository<SysOperLog, Integer> 泛型参数分别是:要查询的实体(Entity),实体的主键类型
  • JpaSpecificationExecutor<SysOperLog> 泛型参数:要查的实体

 

@Repository
public interface SysOperLogRepository extends JpaRepository<SysOperLog, Integer>, JpaSpecificationExecutor<SysOperLog> {

}

 



2、Service层进行查询操作



分页模糊查询三步骤:

  • 创建查询条件对象
  • 创建分页对象
  • 进行查询操作
/**
     * 分页查找SysOperLog
     *
     * @param query    查询条件
     * @param pagenum  页码
     * @param pageSize 每页显示的数据
     * @return
     */
	public Page<SysOperLog> pageQueryListLikeOperDesc(String query, Integer pageNo, Integer pageSize) {
		// 查询条件存在这个对象中
		Specification<SysOperLog> specification = new Specification<SysOperLog>() {
			// 重新Specification的toPredicate方法
			public Predicate toPredicate(Root<SysOperLog> root, CriteriaQuery<?> criteriaQuery,
					CriteriaBuilder criteriaBuilder) {
				// 我要模糊查询的字段是adminName
				Path operDesc = root.get("operDesc");
				// criteriaBuilder.like模糊查询,第一个参数是上一行的返回值,第二个参数是like('%xxx%')中,xxx的值
				Predicate predicate = criteriaBuilder.like(operDesc, "%" + query + "%");
				return predicate;
			}
		};
		//排序
		Sort sort = Sort.by(Sort.Direction.DESC, "id");
		// 分页条件存在这个对象中
		PageRequest pageRequest = PageRequest.of(pageNo - 1, pageSize, sort);
		// 进行查询操作,第一个参数是查询条件对象,第二个参数是分页对象
		Page<SysOperLog> page = sysOperLogRepository.findAll(specification, pageRequest);
		// 返回的数据都封装在了Page<SysOperLog>对象中
		return page;
	}



如果要获得Page对象中的数据,可以直接使用page.getContent();方法

List<SysOperLog> sysOperLogList = page.getContent();



Page对象中封装的数据(下面data中就是page对象的数据)

{
	"success": true,
	"code": 200,
	"message": "OK",
	"data": {
		"content": [{
			"id": 47,
			"operModule": "角色管理",
			"operMethod": "com.laoxu.java.authman.controller.SysRoleController.saveMenu",
			"operType": "修改",
			"operDesc": "分配权限",
			"reqMethod": "POST",
			"operParam": "{roleId:15}\n{menuIds:[1, 3, 10, 11, 4, 14, 8, 9]}\n",
			"operIp": "0:0:0:0:0:0:0:1",
			"operUri": "/authman/sysRole/saveMenu",
			"operUser": "admin",
			"createTime": "2021-04-14 00:31:56"
		}, {
			"id": 46,
			"operModule": "角色管理",
			"operMethod": "com.laoxu.java.authman.controller.SysRoleController.saveMenu",
			"operType": "修改",
			"operDesc": "分配权限",
			"reqMethod": "POST",
			"operParam": "{roleId:15}\n{menuIds:[1, 3, 10, 11, 8, 9]}\n",
			"operIp": "0:0:0:0:0:0:0:1",
			"operUri": "/authman/sysRole/saveMenu",
			"operUser": "admin",
			"createTime": "2021-04-14 00:31:14"
		}, {
			"id": 28,
			"operModule": "部门管理",
			"operMethod": "com.laoxu.java.authman.controller.SysDeptController.remove",
			"operType": "删除",
			"operDesc": "删除部门",
			"reqMethod": "POST",
			"operParam": "{id:19}\n",
			"operIp": "0:0:0:0:0:0:0:1",
			"operUri": "/authman/sysDept/remove",
			"operUser": "admin",
			"createTime": "2021-04-13 23:50:08"
		}],
		"pageable": {
			"sort": {
				"empty": false,
				"sorted": true,
				"unsorted": false
			},
			"offset": 0,
			"pageSize": 20,
			"pageNumber": 0,
			"paged": true,
			"unpaged": false
		},
		"totalElements": 47,
		"totalPages": 3,
		"last": false,
		"number": 0,
		"size": 20,
		"sort": {
			"empty": false,
			"sorted": true,
			"unsorted": false
		},
		"numberOfElements": 20,
		"first": true,
		"empty": false
	}
}

 


 

标签:authman,false,分页,operDesc,JPA,查询,true,page
From: https://blog.51cto.com/lenglingx/6393380

相关文章

  • tornado 分页读取数据库 实时下载csv
    class downloadHandler(RequestHandler):deffetdata(self,inde):    withMogoContext()asmongo:      res=list(mongo.db['datas'].find().limit(10).skip(inde*10))      fordinres:        yieldddefget(self):  ......
  • 解决mybatis-plus查询字段中含有关键词时异常问题
    在使用mybatis-plus查询mysql某张表的数据时,一直告警提示sqlsyntaxerror。于是,把异常提示里的sql语句复制到navicat执行,也提示sqlsyntaxerror。仔细看了下,发有几个字段在navigate里面标示为蓝色(这几个字段为sensitive、status、name),这几个字段在mysql里面是关键词。在查询语......
  • Doris(六) -- 查询语法和内置函数
    查询语法和内置函数查询语法整体结构SELECT[ALL|DISTINCT|DISTINCTROW]--对查询字段的结果是否需要去重,还是全部保留等参数select_expr[,select_expr...]--select的查询字段[FROMtable_references[PARTITIONpartition_list]......
  • mongocxx c++ 14标准,进行多表联合查询
     #include<mongocxx/client.hpp>#include<mongocxx/instance.hpp>#include<mongocxx/uri.hpp>#include<bsoncxx/builder/stream/document.hpp>#include<bsoncxx/json.hpp>#include<bsoncxx/types.hpp>usingbsoncxx::builder::s......
  • Spring boot 使用 jpa 动态插入@DynamicInsert和动态更新@DynamicUpdate(动态指部分或
    @DynamicInsert属性:设置为true,设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false。比如希望数据库插入日期或时间戳字段时,在对象字段为空的情况下,表字段能自动填写当前的sysdate。@DynamicUpdate属性:设置为tru......
  • MyBatis+Sharding-JDBC实体类LocalDateTime类型字段查询报SQLFeatureNotSupportedExce
    问题最近协助渠道组开发新需求,封装实现了一个公共模块供不同渠道项目使用。以前各个渠道项目有很多相似的菜单和功能,各自项目里自己的代码实现,本公共模块对新需求的功能点进行抽象,减少重复代码,提高模块复用性和可维护性。目前有2个渠道项目接入了该公共模块,自测时发现其中1个运......
  • mysql使用索引优化查询效率
    索引的概念索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),包含着对数据表里所有记录的引用指针。通俗的来讲,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。在没有索引的情况下,数据库会遍历全部数据后选择符合条件的;而有了相应的索引之后,数据库会......
  • IP地址查询区域名或IP归属地
    方式一:IP-API.com-GeolocationAPI-Documentation-JSON方式二:使用强大的离线IP地址定位库ip2region获取城市信息-阿里云开发者社区(aliyun.com)参考地址:Python:免费IP归属地查询接口-阿里云开发者社区(aliyun.com)......
  • 怎样查询域名的基本信息?
    小编经常收到站长们咨询如何查询域名ICP备案、域名年龄、域名注册邮箱等问题。在这里,我想分享一些如何应用iis7的站长工具来查询这些信息的方法。首先,我们需要了解什么是ICP备案。ICP备案是指网站在中国大陆地区备案,颁发备案号,以备监管部门进行网站管理和监管的一项制度。如果网站......
  • 9. 子查询/INSERT/UPDATE/DELETE/REPLACE(未完成)
    一.子查询子查询就是指在一个select语句中嵌套另外一个select语句。同时子查询必须包含括号。MySQL5.6之前,子查询的性能较差,但是从5.6开始,不存在性能差的问题。selectafromt1wherea>any(selectafromt2);1.selectafromt1是外部查询(outerquery)2.(selectafro......