java-WEB模塊物流項目五_第1頁
java-WEB模塊物流項目五_第2頁
java-WEB模塊物流項目五_第3頁
java-WEB模塊物流項目五_第4頁
java-WEB模塊物流項目五_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.:.;BOS 物流管理系統(tǒng) 第五天 分區(qū)管理 今天內(nèi)容安排: 1、 分區(qū) 添加 分區(qū) 是要 關(guān)聯(lián)區(qū)域信息 多表關(guān)聯(lián)插入 2、 分區(qū) 列表查詢 多條件組合分頁查詢 jquery easyui datagrid 如何設(shè)置條件、 spring data 組合條件查詢 Specification 接口規(guī)范 3、 分區(qū)查詢結(jié)果導(dǎo)出 POI 生成Excel 進(jìn)展下載 義務(wù)一: 分區(qū)添加 業(yè)務(wù): 分區(qū)是對區(qū)域細(xì)分,為后續(xù)指定 配送區(qū)域,提供根底數(shù)據(jù) 導(dǎo)入功能,實現(xiàn)類似 區(qū)域?qū)耄?作為作業(yè) 完成 jquery easui combobox 插件,實現(xiàn)下拉列表 傳統(tǒng)列表做法: 頁面加載后,自動發(fā)起ajax懇

2、求 ,獲取區(qū)域的數(shù)據(jù) 在回調(diào)函數(shù),遍歷每個區(qū)域數(shù)據(jù),顯示在 選擇區(qū)域下拉框 運用jquery dom 操作 運用easyui combobox 制造下拉列表 查詢文檔:用法一: 對曾經(jīng)存在 含有數(shù)據(jù),添加class=easyui-combobox 用法二: 對 添加 class=easyui-combobox 此時,設(shè)置url屬性、 valueField屬性、textField屬性 第一步: 修正頁面 運用 combobox subarea.jsp 頁面在頁面加載后,自動向 region_ajaxlist.action發(fā)起懇求,加載json數(shù)據(jù) 第二步: 在RegionAction 添加 aj

3、axlist 查詢方法 業(yè)務(wù)層 測試代碼 錯誤: 信息 延遲加載處理方案第三步:頁面要顯示 name屬性,region轉(zhuǎn)換為json沒有 name屬性 效果: ok 回顯區(qū)域 省市區(qū)信息 ! 運用easyui combobox的自動補(bǔ)全效果 modestring定義了如何加載列表數(shù)據(jù)當(dāng)文本改動。設(shè)置為“remote“假設(shè)下拉列表框從效力器加載。當(dāng)設(shè)置為“remot“方式下,用戶類型將被發(fā)送的http懇求參數(shù)命名為“q效力器來檢索新數(shù)據(jù)。local將combobox的 mode屬性,設(shè)置為remote ,遠(yuǎn)程補(bǔ)全 當(dāng)修正下拉框內(nèi)容,自動向效力器發(fā)送懇求參數(shù) q 效力器獲取q參數(shù),根據(jù)q值查詢,轉(zhuǎn)

4、換json前往 修正 RegionAction的 ajaxlist 查詢方法 Action ServiceDAO 測試: ok 自動補(bǔ)全下拉框顯示區(qū)域信息完成! 添加分區(qū)效力器實現(xiàn) 1: 將分區(qū)實體類 主鍵 修正 assigend 實體類修正:完善form參數(shù) 為保管按鈕save 添加click事件 ,對form校驗 關(guān)聯(lián)選擇區(qū)域,combobox 設(shè)置為 required Save按鈕的click事件 BaseAction 注入業(yè)務(wù)層接口編寫SubareaAction 編寫SubareaService DAO 接口 修正Subarea實體 ,修正為默許主鍵戰(zhàn)略 添加分區(qū)業(yè)務(wù)完成!學(xué)生作業(yè):

5、先完成 無條件分頁查詢!無條件分頁查詢1: 入口 subarea.jsp 2:分頁查詢 父類獲取即可3:業(yè)務(wù)層實現(xiàn)測試無條件分業(yè)查詢ok 測試 結(jié)果 延遲加載錯誤 定區(qū)信息 分區(qū)查詢不需求該數(shù)據(jù) 一切排除區(qū)域信息 頁面需求 所以不能排斥 處理json 插件序列化 session 生命周期問題:1: 立刻查詢 配置標(biāo)簽 (不引薦)2: 代碼 Hiberante.initilize()延遲的對象立刻查詢 (部分操作) 3: (hibernate)session spring data jpa (EntityManager)生命周期延伸到web 層 默許一切事務(wù) 只讀! 事務(wù)管理器一定切到一切業(yè)務(wù)事

6、務(wù)管理采用第二種: (靈敏 session 生命周期沒有延伸到web ) 業(yè)務(wù)層代碼 修正 立刻查詢 延遲加載 region數(shù)據(jù) 配置web.xml 引入 EntityManagerInViewFilter 分區(qū)無條件分頁查詢完成!條件分頁查詢客戶端easyui 框架條件分頁查詢分析闡明效力器 spring data如何分頁條件查詢(查詢官方文檔或者第三方實例)Spring data 學(xué)習(xí) 多條件分頁復(fù)雜查詢 參照 網(wǎng)址: sishuok/forum/blogPost/list/7000.html Spring data 復(fù)雜查詢 引薦 Specification 接口! spring dat

7、a 采用分頁條件查詢 類似 hibenate criteria 查詢!多表銜接2:配置好Model及其關(guān)系后,就可以在構(gòu)建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如何實現(xiàn)條件分頁 在查詢窗口輸入條件 完善查詢form,將查詢條件轉(zhuǎn)換為json Datagrid 提供條件查詢方法第一步: 完善查詢form表單 第二步: 用戶點擊查詢按鈕,將查詢form數(shù)據(jù)

10、,轉(zhuǎn)換為json Jquery API 提供兩個方法 serialize() 將form參數(shù),轉(zhuǎn)換http協(xié)議參數(shù)格式 key=value&key=value serializeArray() 將form參數(shù)轉(zhuǎn)換為數(shù)組 需求firstname:hello, Lastname : world 經(jīng)過對jquery 對象函數(shù)擴(kuò)展實現(xiàn) $.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; ;客戶端 條件分頁 查詢攜帶條件參數(shù) 完成!客戶端分頁條件查詢完成! 效力器端實現(xiàn)分區(qū)條件組合分頁查詢 修正 datagrid的url Spring Data 支持類似QBC 動態(tài)生成SQL 查詢 !內(nèi)部支持,提供 JpaSpecificationExecut

12、or 接口, DAO 承繼這個接口 JpaSpecificationExecutor 內(nèi)部提供 條件、分頁查詢方法 Service代碼 目的: 將客戶端條件封裝到 Specification對象中即可Action 代碼 spring data 分頁查詢 關(guān)鍵字條件的添加區(qū)域條件的添加定區(qū)編碼的添加將一切添加 運用and 銜接 測試多條件查詢 ok !Action(value = subAreaAction_pageQuery)public String pageQuery() try / model 瞬時態(tài) 分頁 條件查詢 ./ molde 數(shù)據(jù) 封裝 Specification 實現(xiàn)類中/

13、Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb); 方法 將懇求參數(shù) 封裝 SpecificationSpecification spec = new Specification() public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) / 將懇求參數(shù) model 數(shù)據(jù) 封裝 Predicate/ 1: root 表示 Subarea from Subarea join where 省市區(qū)條

14、件 Region 關(guān)鍵字 SubArea 定區(qū) DecidedZone oid/ 2:cb 銜接條件構(gòu)建器 類似以前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: 銜接 省市區(qū) 多表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: 定區(qū)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(); 集合 長度大小 由用戶 表單懇求參數(shù) 決議Predicate p = new Predicatelist.size();/ 定義數(shù)組泛型/ list.toArray 前往的 Object 數(shù)組return cb.and(list.toArray(p);/ Predicate數(shù)組 內(nèi)部一切條件 and 關(guān)系;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 排除定區(qū) 需求Region區(qū)域信息 處理延遲加載問題!處理方案1: 業(yè)務(wù)層立刻查詢延遲對象處理方案2: OpenEntityManagerInViewFilter 分區(qū)數(shù)據(jù)導(dǎo)出功能點擊導(dǎo)出, 效力器實現(xiàn)文件下載, 下載條件查詢結(jié)果數(shù)據(jù) (一個流+2個頭 excel文件)留意: 導(dǎo)出功能,不只是導(dǎo)出本頁的數(shù)據(jù),應(yīng)該導(dǎo)出 條件對應(yīng)一切數(shù)據(jù) 第

20、一步: 運用分區(qū)查詢form 提交 給下載效力器端途徑 第二步: 點擊導(dǎo)出,提交查詢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 類似 當(dāng)前查詢的實體類對象 經(jīng)過該對象獲取對象屬性 銜接多表操作對象 query cb/ 1: 客戶端能否 選擇對應(yīng)的條件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 表數(shù)據(jù) select * from subarea join on regionif (model.getRegion() != null) / 客戶端 輸入 regio

23、n 相關(guān)參數(shù)查詢Join regionJoin = root.join(root.getModel().getSingularAttribute(region, Region.class), JoinType.LEFT);/ 判別用戶輸入哪些條件參數(shù) .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);/ 構(gòu)造一個泛型數(shù)組return cb.and(array);return specifications;任務(wù)簿數(shù)據(jù)注入下載實現(xiàn) 閱讀器下載 流 response 提供 文件類型頭 附件頭 (附件稱號) 代碼明細(xì)Action(value = subAreaAction_download)public String download() / 下載 -excel 抽取代碼片段 -封裝方法 shif+al

26、t+tSpecification spec = getSpecification();List subAreas = subAreaService.findSubAreaBySpecification(spec);/ 下載 到 excel 文件 response.getOutputStream/ 1: 內(nèi)存 將集合數(shù)據(jù) 加載 內(nèi)存 HSSFWORKBOOK 任務(wù)簿對象中/ 創(chuàng)建新的Excel 任務(wù)簿HSSFWorkbook workbook = new HSSFWorkbook();/ HSSFSheet sheet = workbook.createSheet(效益目的);HSSFSheet

27、 sheet = workbook.createSheet(分區(qū)信息一);/ 在索引0的位置創(chuàng)建行最頂端的行HSSFRow row = sheet.createRow(0);/ 在索引0的位置創(chuàng)建單元格左上端row.createCell(0).setCellValue(分區(qū)編號);row.createCell(1).setCellValue(區(qū)域編碼);row.createCell(2).setCellValue(分區(qū)關(guān)鍵字);row.createCell(3).setCellValue(分區(qū)起始號);row.createCell(4).setCellValue(分區(qū)位置信息);if (sub

28、Areas != null & subAreas.size() != 0) / sheet.getLastRowNum() 獲取 當(dāng)前 sheet 分區(qū)最后一行行號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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論