java-WEB模块物流项目五_第1页
java-WEB模块物流项目五_第2页
java-WEB模块物流项目五_第3页
java-WEB模块物流项目五_第4页
java-WEB模块物流项目五_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.:.;BOS 物流管理系统 第五天 分区管理 今天内容安排: 1、 分区 添加 分区 是要 关联区域信息 多表关联插入 2、 分区 列表查询 多条件组合分页查询 jquery easyui datagrid 如何设置条件、 spring data 组合条件查询 Specification 接口规范 3、 分区查询结果导出 POI 生成Excel 进展下载 义务一: 分区添加 业务: 分区是对区域细分,为后续指定 配送区域,提供根底数据 导入功能,实现类似 区域导入, 作为作业 完成 jquery easui combobox 插件,实现下拉列表 传统列表做法: 页面加载后,自动发起ajax恳

2、求 ,获取区域的数据 在回调函数,遍历每个区域数据,显示在 选择区域下拉框 运用jquery dom 操作 运用easyui combobox 制造下拉列表 查询文档:用法一: 对曾经存在 含有数据,添加class=easyui-combobox 用法二: 对 添加 class=easyui-combobox 此时,设置url属性、 valueField属性、textField属性 第一步: 修正页面 运用 combobox subarea.jsp 页面在页面加载后,自动向 region_ajaxlist.action发起恳求,加载json数据 第二步: 在RegionAction 添加 aj

3、axlist 查询方法 业务层 测试代码 错误: 信息 延迟加载处理方案第三步:页面要显示 name属性,region转换为json没有 name属性 效果: ok 回显区域 省市区信息 ! 运用easyui combobox的自动补全效果 modestring定义了如何加载列表数据当文本改动。设置为“remote“假设下拉列表框从效力器加载。当设置为“remot“方式下,用户类型将被发送的http恳求参数命名为“q效力器来检索新数据。local将combobox的 mode属性,设置为remote ,远程补全 当修正下拉框内容,自动向效力器发送恳求参数 q 效力器获取q参数,根据q值查询,转

4、换json前往 修正 RegionAction的 ajaxlist 查询方法 Action ServiceDAO 测试: ok 自动补全下拉框显示区域信息完成! 添加分区效力器实现 1: 将分区实体类 主键 修正 assigend 实体类修正:完善form参数 为保管按钮save 添加click事件 ,对form校验 关联选择区域,combobox 设置为 required Save按钮的click事件 BaseAction 注入业务层接口编写SubareaAction 编写SubareaService DAO 接口 修正Subarea实体 ,修正为默许主键战略 添加分区业务完成!学生作业:

5、先完成 无条件分页查询!无条件分页查询1: 入口 subarea.jsp 2:分页查询 父类获取即可3:业务层实现测试无条件分业查询ok 测试 结果 延迟加载错误 定区信息 分区查询不需求该数据 一切排除区域信息 页面需求 所以不能排斥 处理json 插件序列化 session 生命周期问题:1: 立刻查询 配置标签 (不引荐)2: 代码 Hiberante.initilize()延迟的对象立刻查询 (部分操作) 3: (hibernate)session spring data jpa (EntityManager)生命周期延伸到web 层 默许一切事务 只读! 事务管理器一定切到一切业务事

6、务管理采用第二种: (灵敏 session 生命周期没有延伸到web ) 业务层代码 修正 立刻查询 延迟加载 region数据 配置web.xml 引入 EntityManagerInViewFilter 分区无条件分页查询完成!条件分页查询客户端easyui 框架条件分页查询分析阐明效力器 spring data如何分页条件查询(查询官方文档或者第三方实例)Spring data 学习 多条件分页复杂查询 参照 网址: sishuok/forum/blogPost/list/7000.html Spring data 复杂查询 引荐 Specification 接口! spring dat

7、a 采用分页条件查询 类似 hibenate criteria 查询!多表衔接2:配置好Model及其关系后,就可以在构建Specification的时候运用了,例如如下:Specification spec = new Specification() public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) Predicate p1 = cb.like(root.get(name).as(String.class), %+um.getName()+%);Predicate p2 = cb.

8、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.get(name).as(String.class), ddd);/把Predicate运用到CriteriaQuer

9、y去,由于还可以给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(); 分析jquery easyui datagrid如何实现条件分页 在查询窗口输入条件 完善查询form,将查询条件转换为json Datagrid 提供条件查询方法第一步: 完善查询form表单 第二步: 用户点击查询按钮,将查询form数据

10、,转换为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.serializeArray(); var str=this.serialize(); $(array).each(function() if

11、(serializeObj) if($.isArray(serializeObj) serializeObj.push(this.value); else serializeObj=serializeObj,this.value; else serializeObj=this.value; ); return serializeObj; ;客户端 条件分页 查询携带条件参数 完成!客户端分页条件查询完成! 效力器端实现分区条件组合分页查询 修正 datagrid的url Spring Data 支持类似QBC 动态生成SQL 查询 !内部支持,提供 JpaSpecificationExecut

12、or 接口, DAO 承继这个接口 JpaSpecificationExecutor 内部提供 条件、分页查询方法 Service代码 目的: 将客户端条件封装到 Specification对象中即可Action 代码 spring data 分页查询 关键字条件的添加区域条件的添加定区编码的添加将一切添加 运用and 衔接 测试多条件查询 ok !Action(value = subAreaAction_pageQuery)public String pageQuery() try / model 瞬时态 分页 条件查询 ./ molde 数据 封装 Specification 实现类中/

13、Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb); 方法 将恳求参数 封装 SpecificationSpecification spec = new Specification() public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) / 将恳求参数 model 数据 封装 Predicate/ 1: root 表示 Subarea from Subarea join where 省市区条

14、件 Region 关键字 SubArea 定区 DecidedZone oid/ 2:cb 衔接条件构建器 类似以前hibernate Restrictions.like/eq/gtList list = new ArrayList(); / 存放一切条件对象Predicateif (StringUtils.isNotBlank(model.getAddresskey() / 连本人表Predicate p1 = cb.like(root.get(addresskey).as(String.class), % + model.getAddresskey() + %);list.add(p1);

15、/ 3: 衔接 省市区 多表Region 查询if (model.getRegion() != null) / subarea 衔接 region 表Join regionJoin = root.join(root.getModel().getSingularAttribute(region, Region.class), JoinType.LEFT);if (StringUtils.isNotBlank(model.getRegion().getProvince() Predicate p2 = cb.like(regionJoin.get(province).as(String.class

16、), % + model.getRegion().getProvince() + %);list.add(p2);if (StringUtils.isNotBlank(model.getRegion().getCity() Predicate p3 = cb.like(regionJoin.get(city).as(String.class), % + model.getRegion().getCity() + %);list.add(p3);if (StringUtils.isNotBlank(model.getRegion().getDistrict() Predicate p4 = cb

17、.like(regionJoin.get(district).as(String.class), % + model.getRegion().getDistrict() + %);list.add(p4);/ 4: 定区idif (model.getDecidedZone() != null & StringUtils.isNotBlank(model.getDecidedZone().getId() Predicate p5 = cb.equal(root.get(decidedZone).as(DecidedZone.class), model.getDecidedZone();list.

18、add(p5);/ List list = new ArrayList(); 集合 长度大小 由用户 表单恳求参数 决议Predicate p = new Predicatelist.size();/ 定义数组泛型/ list.toArray 前往的 Object 数组return cb.and(list.toArray(p);/ Predicate数组 内部一切条件 and 关系;Page data = subAreaService.pageQuery(spec, getPageRequest();setData(data); catch (Exception e) e.printStack

19、Trace();return SUCCESS;Servicedao错误:Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 排除定区 需求Region区域信息 处理延迟加载问题!处理方案1: 业务层立刻查询延迟对象处理方案2: OpenEntityManagerInViewFilter 分区数据导出功能点击导出, 效力器实现文件下载, 下载条件查询结果数据 (一个流+2个头 excel文件)留意: 导出功能,不只是导出本页的数据,应该导出 条件对应一切数据 第

20、一步: 运用分区查询form 提交 给下载效力器端途径 第二步: 点击导出,提交查询form 第三步: 编写效力器端程序, SubAreaAction 抽取 恳求条件封装到Specification 接口 按照 快捷键 shfit+alt+t 抽取代码 Service代码 Action 代码 下载 到poi 通用代码抽取/ 抽取代码private Specification specifecation2() Specification specifications = new Specification() public Predicate toPredicate(Root root, Cri

21、teriaQuery query, CriteriaBuilder cb) / 多表查询 spring data/ root 类似 当前查询的实体类对象 经过该对象获取对象属性 衔接多表操作对象 query cb/ 1: 客户端能否 选择对应的条件List list = new ArrayList();if (StringUtils.isNotBlank(model.getAddresskey() Predicate p1 = cb.like(root.get(addresskey).as(String.class), % + model.getAddresskey() + %);list.a

22、dd(p1);if (model.getDecidedZone() != null & StringUtils.isNotBlank(model.getDecidedZone().getId() Predicate p2 = cb.equal(root.get(decidedZone).as(DecidedZone.class), model.getDecidedZone();list.add(p2);/ 查询 region 表数据 select * from subarea join on regionif (model.getRegion() != null) / 客户端 输入 regio

23、n 相关参数查询Join regionJoin = root.join(root.getModel().getSingularAttribute(region, Region.class), JoinType.LEFT);/ 判别用户输入哪些条件参数 .if (StringUtils.isNotBlank(model.getRegion().getProvince() Predicate p3 = cb.like(regionJoin.get(province).as(String.class), % + model.getRegion().getProvince() + %);list.ad

24、d(p3);if (StringUtils.isNotBlank(model.getRegion().getCity() Predicate p4 = cb.like(regionJoin.get(city).as(String.class), % + model.getRegion().getCity() + %);list.add(p4);if (StringUtils.isNotBlank(model.getRegion().getDistrict() Predicate p5 = cb.like(regionJoin.get(district).as(String.class), %

25、+ model.getRegion().getDistrict() + %);list.add(p5);Predicate array = list.toArray(new Predicate0);/ 构造一个泛型数组return cb.and(array);return specifications;任务簿数据注入下载实现 阅读器下载 流 response 提供 文件类型头 附件头 (附件称号) 代码明细Action(value = subAreaAction_download)public String download() / 下载 -excel 抽取代码片段 -封装方法 shif+al

26、t+tSpecification spec = getSpecification();List subAreas = subAreaService.findSubAreaBySpecification(spec);/ 下载 到 excel 文件 response.getOutputStream/ 1: 内存 将集合数据 加载 内存 HSSFWORKBOOK 任务簿对象中/ 创建新的Excel 任务簿HSSFWorkbook workbook = new HSSFWorkbook();/ HSSFSheet sheet = workbook.createSheet(效益目的);HSSFSheet

27、 sheet = workbook.createSheet(分区信息一);/ 在索引0的位置创建行最顶端的行HSSFRow row = sheet.createRow(0);/ 在索引0的位置创建单元格左上端row.createCell(0).setCellValue(分区编号);row.createCell(1).setCellValue(区域编码);row.createCell(2).setCellValue(分区关键字);row.createCell(3).setCellValue(分区起始号);row.createCell(4).setCellValue(分区位置信息);if (sub

28、Areas != 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论