




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-作者xxxx-日期xxxxjava-WEB模块物流项目五【精品文档】BOS 物流管理系统 第五天 分区管理 今天内容安排: 1、 分区 添加 分区 是要 关联区域信息 (多表关联插入 )2、 分区 列表查询 多条件组合分页查询 (jquery easyui datagrid 如何设置条件、 spring data 组合条件查询 Specification 接口规范 )3、 分区查询结果导出 (POI 生成Excel 进行下载 )1. 任务一: 分区添加 业务: 分区是对区域细分,为后续指定 配送区域,提供基础数据 导入功能,实现类似 区域导入, 作为作业 完成 1.1. jquery eas
2、ui combobox 插件,实现下拉列表 传统列表做法: 1、 页面加载后,自动发起ajax请求 ,获取区域的数据 2、 在回调函数,遍历每个区域数据,显示在 选择区域下拉框 (使用jquery dom 操作 )1.1.1. 使用easyui combobox 制作下拉列表 查询文档:用法一: 对已经存在 (含有数据),添加class=”easyui-combobox” 用法二: 对 添加 class=”easyui-combobox” 此时,设置url属性、 valueField属性、textField属性 第一步: 修改页面 使用 combobox subarea.jsp 页面在页面加载
3、后,自动向 region_ajaxlist.action发起请求,加载json数据 第二步: 在RegionAction 添加 ajaxlist 查询方法 业务层 测试代码 错误: 信息 延迟加载解决方案第三步:页面要显示 name属性,region转换为json没有 name属性 效果: ok 回显区域 省市区信息 !1.1.2. 使用easyui combobox的自动补全效果 modestring定义了如何加载列表数据当文本改变。设置为“remote“如果下拉列表框从服务器加载。当设置为“remot“模式下,用户类型将被发送的http请求参数命名为“q”服务器来检索新数据。local将c
4、ombobox的 mode属性,设置为remote ,远程补全 当修改下拉框内容,自动向服务器发送请求参数 q 服务器获取q参数,根据q值查询,转换json返回 修改 RegionAction的 ajaxlist 查询方法 Action ServiceDAO 测试: ok 自动补全下拉框显示区域信息完成!1.2. 添加分区服务器实现 1: 将分区实体类 主键 修改 assigend 实体类修改:完善form参数 为保存按钮save 添加click事件 ,对form校验 关联选择区域,combobox 设置为 required Save按钮的click事件 BaseAction 注入业务层接口编
5、写SubareaAction 编写SubareaService DAO 接口 修改Subarea实体 ,修改为默认主键策略 添加分区业务完成!学生作业: 先完成 无条件分页查询!1.3. 无条件分页查询1: 入口 subarea.jsp 2:分页查询 父类获取即可3:业务层实现测试无条件分业查询ok 测试 结果 延迟加载错误 定区信息 分区查询不需要该数据 所有排除区域信息 页面需要 所以不能排斥 解决json 插件序列化 session 生命周期问题:1: 立刻查询 配置标签 (不推荐)2: 代码 Hiberante.initilize()延迟的对象立刻查询 (局部操作) 3: (hiber
6、nate)session spring data jpa (EntityManager)生命周期延长到web 层 -默认所有事务 只读! 事务管理器一定切到所有业务事务管理采用第二种: (灵活 session 生命周期没有延长到web ) 业务层代码 修改 立刻查询 延迟加载 region数据 配置web.xml 引入 EntityManagerInViewFilter 分区无条件分页查询完成!2. 条件分页查询2.1. 客户端easyui 框架条件分页查询分析说明2.2. 服务器 spring data如何分页条件查询(查询官方文档或者第三方实例)Spring data 学习 多条件分页复杂
7、查询 参照 网址: Spring data 复杂查询 推荐 Specification 接口! spring data 采用分页条件查询 类似 hibenate criteria 查询!多表连接2:配置好Model及其关系后,就可以在构建Specification的时候使用了,示例如下:Specification spec = new Specification() public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) Predicate p1 = cb.like(root.get(na
8、me).as(String.class), %+um.getName()+%);Predicate p2 = cb.equal(root.get(uuid).as(Integer.class), um.getUuid();Predicate p3 = cb.gt(root.get(age).as(Integer.class), um.getAge();SetJoin depJoin =root.join(root.getModel().getSet(setDep,DepModel.class) , JoinType.LEFT);Predicate p4 = cb.equal(depJoin.g
9、et(name).as(String.class), ddd);/把Predicate应用到CriteriaQuery去,因为还可以给CriteriaQuery添加其他的功能,比如排序、分组啥的query.where(cb.and(cb.and(p3,cb.or(p1,p2),p4);/添加分组的功能query.orderBy(cb.desc(root.get(uuid).as(Integer.class);return query.getRestriction(); 2.3. 分析jquery easyui datagrid如何实现条件分页 在查询窗口输入条件 2.4. 完善查询form,将
10、查询条件转换为json Datagrid 提供条件查询方法第一步: 完善查询form表单 第二步: 用户点击查询按钮,将查询form数据,转换为json Jquery API 提供两个方法 serialize() 将form参数,转换http协议参数格式 key=value&key=value serializeArray() 将form参数转换为数组 需要firstname:hello, Lastname : world 通过对jquery 对象函数扩展实现 $.fn.serializeJson=function() var serializeObj=; var array=this.ser
11、ializeArray(); var str=this.serialize(); $(array).each(function() if(serializeO) if($.isArray(serializeO) serializeO.push(this.value); else serializeO=serializeO,this.value; else serializeO=this.value; ); return serializeObj; ;客户端 条件分
12、页 查询携带条件参数 完成!客户端分页条件查询完成!2.5. 服务器端实现分区条件组合分页查询 修改 datagrid的url Spring Data 支持类似QBC 动态生成SQL 查询 !内部支持,提供 JpaSpecificationExecutor 接口, DAO 继承这个接口 JpaSpecificationExecutor 内部提供 条件、分页查询方法 Service代码 目标: 将客户端条件封装到 Specification对象中即可Action 代码 spring data 分页查询 关键字条件的添加区域条件的添加定区编码的添加将所有添加 使用and 连接 测试多条件查询 ok
13、 !Action(value = subAreaAction_pageQuery)public String pageQuery() try / model 瞬时态 分页 条件查询 ./ molde 数据 封装 Specification 实现类中/ Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb); 方法 将请求参数 封装 SpecificationSpecification spec = new Specification() public Predicate toPredicate(Root
14、 root, CriteriaQuery query, CriteriaBuilder cb) / 将请求参数 model 数据 封装 Predicate/ 1: root 表示 Subarea from Subarea join . where . 省市区条件 Region 关键字 SubArea 定区 DecidedZone oid/ 2:cb 连接条件构建器 类似以前hibernateeq/gtList list = new ArrayList(); / 存放所有条件对象Predicateif (StringUtils.isNotBlank(model.getAddresskey() /
15、 连自己表Predicate p1 = cb.like(root.get(addresskey).as(String.class), % + model.getAddresskey() + %);list.add(p1);/ 3: 连接 省市区 多表Region 查询if (model.getRegion() != null) / subarea 连接 region 表Join regionJoin = root.join(root.getModel().getSingularAttribute(region, Region.class), JoinType.LEFT);if (StringU
16、tils.isNotBlank(model.getRegion().getProvince() Predicate p2 = cb.like(regionJoin.get(province).as(String.class), % + model.getRegion().getProvince() + %);list.add(p2);if (StringUtils.isNotBlank(model.getRegion().getCity() Predicate p3 = cb.like(regionJoin.get(city).as(String.class), % + model.getRe
17、gion().getCity() + %);list.add(p3);if (StringUtils.isNotBlank(model.getRegion().getDistrict() Predicate p4 = cb.like(regionJoin.get(district).as(String.class), % + model.getRegion().getDistrict() + %);list.add(p4);/ 4: 定区idif (model.getDecidedZone() != null & StringUtils.isNotBlank(model.getDecidedZ
18、one().getId() Predicate p5 = cb.equal(root.get(decidedZone).as(DecidedZone.class), model.getDecidedZone();list.add(p5);/ List list = new ArrayList(); 集合 长度大小 由用户 表单请求参数 决定Predicate p = new Predicatelist.size();/ 定义数组泛型/ list.toArray 返回的 Object 数组return cb.and(list.toArray(p);/ Predicate数组 内部所有条件 and
19、 关系;Page data = subAreaService.pageQuery(spec, getPageRequest();setData(data); catch (Exception e) e.printStackTrace();return SUCCESS;Servicedao错误:Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 排除定区 需要Region区域信息 解决延迟加载问题!解决方案1: 业务层立刻查询延迟对象解决方案2: OpenEnt
20、ityManagerInViewFilter 3. 分区数据导出功能点击导出, 服务器实现文件下载, 下载条件查询结果数据 (一个流+2个头 excel文件)注意: 导出功能,不只是导出本页的数据,应该导出 条件对应所有数据 第一步: 使用分区查询form 提交 给下载服务器端路径 第二步: 点击导出,提交查询form 第三步: 编写服务器端程序, SubAreaAction 抽取 请求条件封装到Specification 接口 按照 快捷键 shfit+alt+t 抽取代码 Service代码 Action 代码 下载 到poi 通用代码抽取/ 抽取代码private Specificati
21、on specifecation2() Specification specifications = new Specification() public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) / 多表查询 spring data/ root 类似 当前查询的实体类对象 通过该对象获取对象属性 连接多表操作对象 query cb/ 1: 客户端是否 选择对应的条件List list = new ArrayList();if (StringUtils.isNotBlank(model.g
22、etAddresskey() Predicate p1 = cb.like(root.get(addresskey).as(String.class), % + model.getAddresskey() + %);list.add(p1);if (model.getDecidedZone() != null & StringUtils.isNotBlank(model.getDecidedZone().getId() Predicate p2 = cb.equal(root.get(decidedZone).as(DecidedZone.class), model.getDecidedZon
23、e();list.add(p2);/ 查询 region 表数据 select * from subarea join on regionif (model.getRegion() != null) / 客户端 输入 region 相关参数查询Join regionJoin = root.join(root.getModel().getSingularAttribute(region, Region.class), JoinType.LEFT);/ 判断用户输入哪些条件参数 .if (StringUtils.isNotBlank(model.getRegion().getProvince()
24、Predicate p3 = cb.like(regionJoin.get(province).as(String.class), % + model.getRegion().getProvince() + %);list.add(p3);if (StringUtils.isNotBlank(model.getRegion().getCity() Predicate p4 = cb.like(regionJoin.get(city).as(String.class), % + model.getRegion().getCity() + %);list.add(p4);if (StringUti
25、ls.isNotBlank(model.getRegion().getDistrict() Predicate p5 = cb.like(regionJoin.get(district).as(String.class), % + model.getRegion().getDistrict() + %);list.add(p5);Predicate array = list.toArray(new Predicate0);/ 构造一个泛型数组return cb.and(array);return specifications;工作簿数据注入下载实现 浏览器下载 流 response 提供 文件
26、类型头 附件头 (附件名称) 代码明细Action(value = subAreaAction_download)public String download() / 下载 -excel 抽取代码片段 -封装方法 shif+alt+tSpecification spec = getSpecification();List subAreas = subAreaService.findSubAreaBySpecification(spec);/ 1: 内存 将集合数据 加载 内存 HSSFWORKBOOK 工作簿对象中/ 创建新的Excel 工作簿HSSFWorkbook workbook = n
27、ew HSSFWorkbook();/ HSSFSheet sheet = workbook.createSheet(效益指标);HSSFSheet sheet = workbook.createSheet(分区信息一);/ 在索引0的位置创建行(最顶端的行)HSSFRow row = sheet.createRow(0);/ 在索引0的位置创建单元格(左上端)row.createCell(0).setCellValue(分区编号);row.createCell(1).setCellValue(区域编码);row.createCell(2).setCellValue(分区关键字);row.cr
28、eateCell(3).setCellValue(分区起始号);row.createCell(4).setCellValue(分区位置信息);if (subAreas != null & subAreas.size() != 0) / sheet.getLastRowNum() 获取 当前 sheet 分区最后一行行号for (Subarea s : subAreas) / 1 2 3 4int lastRowNum = sheet.getLastRowNum();HSSFRow newRow = sheet.createRow(lastRowNum + 1);newRow.createCell(0).setCellValue(s.getId();newRow.createCell(1).setCellValue(s.getRegion().getId();newRow.createCell(2).setCellValue(s.getAddresskey
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年成功入职必刷题招聘笔试模拟题目及答案
- 2025年英语翻译岗位招聘考试指南翻译技能预测题及解析
- 危险化学品泄漏事故现场处置方案
- 2025健康养老专业试题及答案
- 2025年可持续发展工程师专业能力认证考试试题及答案
- 2025年健康照护师高级试题及答案
- 2025年保健药品测试试题及答案
- 2025年酒店管理师证考试中级模拟题集与答案解析
- 药剂科人员工作总结汇报5篇
- 北京市门头沟区2023-2024学年九年级下学期中考第二次模拟考试道德与法制试题含参考答案
- 知识题库-人社练兵比武竞赛测试题及答案(九)
- 麦冬(浙麦冬)规范化生产技术规程
- 2024-2029年N-甲基吗啉N-氧化物(NMMO)行业市场现状供需分析及市场深度研究发展前景及规划投资研究报告
- 技术交底记录(通风)
- 九年级语文下册3武松打虎省公开课一等奖新名师获奖
- “一带一路”倡议与国际合作课件
- 2024年浙江温州乐清市公安局警务辅助人员招聘笔试参考题库附带答案详解
- DL-T 572-2021电力变压器运行规程-PDF解密
- 中国茶文化英文
- 人教版(2019)高中英语必修一二三各单元话题作文与范文汇编(共3册)
- 乳果糖口服溶液说明书用法
评论
0/150
提交评论