分别通过mongoTemplate聚合查询(带参数模糊查询)分页、Jpa查询(带参数模糊查询)分页
来源:互联网 发布:傲剑绿色版数据 编辑:程序博客网 时间:2024/06/10 07:51
1、通过Jpa查询(带参数)分页
1.1)Java
/*** *方式一:基于MongoRepository *优势:方便简单,方法实现由工具类完成。*缺点:不适合多个可变查询条件。*/Controller@RequestMapping("selectStudentPagerByJpa")@ResponseBodypublic Object selectStudentPagerByJpa(@RequestParam(value = "page") String page, @RequestParam(value = "rows") String rows) { Map<String, Object> result = new HashMap<String, Object>(); try { Page<StudentBo> studentBos = studentService.queryAllByPage(Integer.parseInt(page), Integer.parseInt(rows)); List<StudentBo> studentBoList = studentBos.getContent(); for (StudentBo studentBo : studentBoList) { String courseName = null; List<CourseBo> courses = studentBo.getCourses(); for (CourseBo course : courses) { if (StringUtils.isBlank(courseName)) { courseName = course.getCname(); } else { courseName += "," + course.getCname(); } } studentBo.setCoursesName(courseName); } result.put("total", studentBos.getTotalElements()); result.put("rows", studentBos.getContent()); } catch (Exception e) { log.error(e); } return result;}Servicepublic Page<StudentBo> queryAllByPage(int page, int rows) throws Exception { PageRequest pageRequest = new PageRequest(page - 1, rows,new Sort(new Sort.Order(Sort.Direction.DESC, "id"))); return iStudentDao.findAll(pageRequest);}dao@Repositorypublic interface IStudentDao extends MongoRepository<StudentBo, ObjectId> { public Page<StudentBo> findBySnameLike(String Sname, Pageable pageable);}带分页的模糊查询Controller@RequestMapping("findBySnameLike")@ResponseBodypublic Object findBySnameLike(@RequestParam(value = "page", defaultValue = "1") String page, @RequestParam(value = "rows", defaultValue = "10") String rows, @RequestParam(value = "sname") String sname) { Map<String, Object> result = new HashMap<String, Object>(); try { Page<StudentBo> studentBos = studentService.findBySnameLike(Integer.parseInt(page), Integer.parseInt(rows), sname); result.put("total", studentBos.getTotalElements()); result.put("rows", studentBos.getContent()); } catch (Exception e) { e.printStackTrace(); } return result;}servicepublic Page<StudentBo> findBySnameLike(int page, int rows, String sname) { Pageable pageRequest = new PageRequest(page-1,rows,new Sort(new Sort.Order(Sort.Direction.DESC, "id"))); return iStudentDao.findBySnameLike(sname, pageRequest);}dao@Repositorypublic interface IStudentDao extends MongoRepository<StudentBo, ObjectId> { public Page<StudentBo> findBySnameLike(String sname, Pageable pageRequest);}
2、通过mongoTemplate聚合查询(带参数)分页
2.1)mongo原生查询语句
2.2)Java
/*** *方式二:通过mongoTemplate聚合查询分页*优势:方便简单,方法实现由工具类完成。*缺点:适合多个可变查询条件。*/Controller@RequestMapping("selectStudentPagerByMongoTemplate")@ResponseBodypublic Object selectStudentPagerByMongoTemplate( @RequestParam(value = "page") String page, @RequestParam(value = "rows") String rows, @RequestParam(value = "sname", defaultValue = "") String sname) { Map<String, Object> result = new HashMap<String, Object>(); try { //方式一:通过mongoTemplate聚合查询分页 PagerBo pagerBo = new PagerBo(Integer.parseInt(page), Integer.parseInt(rows)); StudentBo student = new StudentBo(); student.setSname(sname); pagerBo = studentService.getStudentPagerByMongoTemplate(student, pagerBo); List<StudentBo> studentBoList = pagerBo.getResult(); for (StudentBo studentBo : studentBoList) { String courseName = null; List<CourseBo> courses = studentBo.getCourses(); for (CourseBo course : courses) { if (StringUtils.isBlank(courseName)) { courseName = course.getCname(); } else { courseName += "," + course.getCname(); } } studentBo.setCoursesName(courseName); } result.put("total", pagerBo.getTotal()); result.put("rows", studentBoList); } catch (Exception e) { log.error(e); } return result;}Servicepublic PagerBo getStudentPagerByMongoTemplate(StudentBo studentBo, PagerBo pagerBo) { return studentDao.getStudentPagerByMongoTemplate(studentBo, pagerBo);}Daopublic PagerBo getStudentPagerByMongoTemplate(StudentBo studentBo, PagerBo pagerBo) { List<AggregationOperation> operations = new ArrayList<AggregationOperation>(); operations.add(Aggregation.skip(pagerBo.getStart())); operations.add(Aggregation.limit(pagerBo.getRows())); operations.add(Aggregation.lookup("course", "_id", "students._id", "courses")); operations.add(Aggregation.sort(Sort.Direction.DESC, "id")); if (StringUtils.hasText(studentBo.getSname())) { operations.add(Aggregation.match(Criteria.where("sname"). regex(".*?\\" + studentBo.getSname() + ".*"))); } Aggregation aggregation = Aggregation.newAggregation(operations); /*Aggregation aggregation = Aggregation.newAggregation( Aggregation.skip(pagerBo.getStart()), Aggregation.limit(pagerBo.getRows()), Aggregation.lookup("course", "_id", "students._id", "courses"), Aggregation.sort(Sort.Direction.DESC, "id") //,Aggregation.match(Criteria.where("sname").is(studentBo.getSname())) );*/ long total = mongoTemplate.count(new Query(), StudentBo.class); AggregationResults<StudentBo> results = mongoTemplate.aggregate(aggregation, "student", StudentBo.class); pagerBo.setResult(results.getMappedResults()); pagerBo.setTotal(total); return pagerBo;}
3.Jsp(通过easyui实现)
3.1)列表显示
<table id="dg" title="学生列表" class="easyui-datagrid" style="width:700px;height:250px" url="selectStudentPagerByMongoTemplate.do" toolbar="#toolbar" pagination="true" rownumbers="true" fitColumns="true" singleSelect="true"> <thead> <tr> <th field="sname" width="50">学生姓名</th> <th field="coursesName" width="50">课程名</th> </tr> </thead></table>
3.2)列表查询
Jsp<input id="sname" class="easyui-searchbox" style="width:300px" data-options="searcher:findByStudentNameLike,prompt:'请输入学生姓名'"></input>Js//实现方式一()[参考地址]http://www.jeasyui.net/tutorial/22.html)function findByStudentNameLike() { $('#dg').datagrid('load',{ sname: $('#sname').val() });}//实现方式二(不推荐使用:需要重新写一个带参数的分页查询)var sname= $('#sname').val();$("#dg").datagrid({ title: '用户信息', iconCls: 'icon-ok', pageSize: 10, pageList: [5, 10, 15, 20], nowrap: true, striped: true, collapsible: true, toolbar: "#easyui_toolbar", url: 'findBySnameLike.do?sname=' + sname, //触发此action,带上参数searcValue loadMsg: '数据加载中......', fitColumns: true,//允许表格自动缩放,以适应父容器 sortName: 'id', sortOrder: 'asc', remoteSort: false, columns: [[{ field: 'id', title: 'id', hidden: true }, { field: 'sname', title: '学生姓名', width: '165px' }, { field: 'coursesName', title: '课程名', width: '165px' } ]], pagination: true, rownumbers: true})
个人心得:选用的方式看:是否适合多个可变查询条件。
0 0
- 分别通过mongoTemplate聚合查询(带参数模糊查询)分页、Jpa查询(带参数模糊查询)分页
- Access 模糊 参数 查询 分页
- 模糊查询,带参数的
- 存储过程带参数模糊查询
- hibernateTemplate 模糊分页查询
- MyBatis模糊查询分页
- 模糊查询+分页
- ssh分页+模糊查询
- 分页 模糊查询
- 带参模糊查询
- JSTL带参数查询分页方法
- ExtJs4 bbar分页带参数查询
- JdbcTemplate带参数的分页查询
- mybatis+mysql带模糊查询的分页代码
- Hibernate HQL查询 分页查询 模糊查询
- Hibernate HQL查询 分页查询 模糊查询
- Hibernate HQL查询 分页查询 模糊查询 .
- Access 参数 模糊 查询
- java Servlet
- NIO - 选择器基础
- study of hacking_linux(day2)
- 走进Python世界(10)----函数的参数
- 如何用CSS快速布局(一)—— 布局元素详细
- 分别通过mongoTemplate聚合查询(带参数模糊查询)分页、Jpa查询(带参数模糊查询)分页
- MySQL优化(一)——哪些因素影响了数据库性能
- Mysql用户的创建与删除
- NIO - 使用选择键
- sqlite3教程
- 线性方程组求解——基于MTALAB/Octave,Numpy,Sympy和Maxima
- 数据统计2(三种平均数)
- 【springMVC】springMVC中使用Interceptor拦截器
- android--SwipeRefreshLayout 设置下拉刷新进度条颜色变化没效果