bean的一种使用姿势

问题描述

我们所使用的spring MVC框架的结构分为三层,control,service和dao层。其中,dao负责与数据库进行交互;service处理业务逻辑;control负责与页面交互。

我们的系统中,有很多表格展现的内容,其中表格还需要有查询数据、分页等页务逻辑。

我找到以前的代码,js向controller传参数是这样的:

                 function getQueryCondition() {var root = corporateManager.treeManager.data[0].id;if (root != 'root') {var start = new Date(Date.parse($("#startTime").val().substring(0, 10) + "T00:00:00"));var end = new Date(Date.parse($("#endTime").val().substring(0, 10) + "T23:59:59"));if (Math.floor((end - start) / (1000 * 60 * 60 * 24) + 1) > 7) {$.ligerDialog.error("查询时间间隔不能大于7天!");return;}}var serviceInfo = {"code": $("#code").val(),"name": $("#name").val(),"mustQueryPerson": "true","corporate": getCorporateSelect(),"startTime": $("#startTime").val() + " 00:00:00","endTime": $("#endTime").val() + " 23:59:59","backTime": $("#backTime").val(),"attendanceState": $("#attendanceState").val(),"pagesize": recordGridManager.get("pageSize"),"queryType": "attendance","dormId": $("#dormID").val()};return serviceInfo;}

在controller里面接收到参数是这样的,其中还要进行非空的验证判断,分页数据的处理等。

                   String startTime = request.getParameter("startTime");String endTime = request.getParameter("endTime");String person = request.getParameter("personID");backTime = request.getParameter("backTime");int pageno = Integer.valueOf(request.getParameter("page") == null ? "1" : request.getParameter("page"));String[] pageSizeArr = map.get("pagesize");String attendanceState = request.getParameter("attendanceState");String dormId = request.getParameter("dormId");int pageSize = Integer.valueOf(pageSizeArr == null ? "10" : (pageSizeArr.length > 1 ? pageSizeArr[1] : pageSizeArr[0]));//获取到人员实体集合String code = request.getParameter("code");String name = request.getParameter("name");String corporate = request.getParameter("corporate");

这样调用service中的方法

                  personObjectList = service.getNoswingPerson(corporateList, name, code, sdfT.parse(backTime).getTime(), attendanceState, sdf.parse(startTime).getTime(), sdf.parse(endTime).getTime(), dormId, (pageno - 1) * pageSize, pageSize,dayLong);

在service中又进行了一次处理,然后传给dao层。

                   HashMap hm = new HashMap();StringBuffer deptSb = new StringBuffer();if (deptID != null && deptID.size() > 0) {deptSb.append("(");for (Object ob : deptID) {deptSb.append("'").append(ob.toString()).append("'").append(",");}deptSb.deleteCharAt(deptSb.length() - 1);deptSb.append(")");}hm.put("time1", time + RIGHT_TIME);hm.put("state", state);hm.put("startTime", startTime);hm.put("endTime", endTime);hm.put("deptIDList", deptSb.length() == 0 ? null : deptSb.toString());hm.put("personName", personName.equals("") ? null : "%" + personName + "%");hm.put("dormId", "".equals(dormId) ? null : dormId);hm.put("personCode", personCode.equals("") ? null : "%" + personCode + "%");hm.put("days", days);hm.put("start", start);hm.put("size", size);return dao.getNoswingPerson(hm);

dao中怎么使用就省略了。可以看到,其实controller和service层其实进行处理了两次,而且由于存在讨厌的空指针异常,还判断了两次空……

so urgly!

另一种解决方案

我把需要的条件封装到两个bean中,其中基类包括分页等通用的处理,导出类中包含一些个性化的设置,并进行了空指针异常判断的处理等内容。

                public class BaseCondition {private int start = 0;private int size = 0;private int page = 1;private int pageSize = 10;private String sortName="";private String sortOrder="DESC";public String getSortName() {return sortName;}public void setSortName(String sortName) {if(sortName==null) return;this.sortName = sortName;}public String getSortOrder() {return sortOrder;}public void setSortOrder(String sortOrder) {if(sortOrder==null) return;this.sortOrder = sortOrder;}public void setPage(int page){this.page = page;}public int getPage(){return this.page;}public void setPageSize(int pageSize){this.pageSize = pageSize;}public int getStart() {if(start == 0){return (page - 1) * pageSize;}return start;}public void setStart(int start) {this.start = start;}public int getSize() {if(size == 0) {return pageSize;}return size;}public void setSize(int size) {this.size = size;}}public class Condition extends BaseCondition{private long startTime;private long endTime;private String isPresidium = "0";private String representativeType="";private String monitorId="";private String signWay="";                    private String cmId="";private int isSignInOut=0;private int total = 0;private int statisType = 0;private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");public void setStartTimeStr(String startTimeStr){try{this.startTime = sdf.parse(startTimeStr).getTime();}   catch(Exception e){this.startTime = 0;}     }public void setEndTimeStr(String endTimeStr){try{this.endTime = sdf.parse(endTimeStr).getTime();}   catch(Exception e){this.endTime = 0;}     }                   public long getStartTime() {return startTime;}public void setStartTime(long startTime) {this.startTime = startTime;}public long getEndTime() {return endTime;}public void setEndTime(long endTime) {this.endTime = endTime;}                  public String getIsPresidium() {return isPresidium;}public void setIsPresidium(String isPresidium) {if(isPresidium==null) return;this.isPresidium = isPresidium;}public String getRepresentativeType() {return representativeType;}public void setRepresentativeType(String representativeType) {if(representativeType==null) return;this.representativeType = representativeType;}public String getMonitorId() {return monitorId;}public void setMonitorId(String monitorId) {if(monitorId==null) return;this.monitorId = monitorId;}public String getSignWay() {return signWay;}public void setSignWay(String signWay) {if(signWay==null) return;this.signWay = signWay;}public String getCmId() {return cmId;}public void setCmId(String cmId) {if(cmId==null) return;this.cmId = cmId;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public int getStatisType() {return statisType;}public void setStatisType(int statisType) {this.statisType = statisType;}public int getIsSignInOut() {return isSignInOut;}public void setIsSignInOut(int isSignInOut) {this.isSignInOut = isSignInOut;}   public String getDirection() {if(isSignInOut ==0){return "('10','20')";}else{return "('10')";}}public String getStatisTypeCondition(){if(statisType == 1){return "direction in " + getDirection();}if(statisType == 2){return "(direction not in " + getDirection() +" or direction is null)";}return " 1= 1 ";}}

由于采用了spring框架, 我们的controller只需要这样传入实体就可以了

              @RequestMapping(params = "method=getAttendStatis")public @ResponseBodyString getAttendStatis(Condition condition) {……}

而service也只需下传给dao就可以了,当然,如果需要处理数据,在这里处理一下

             public List<allpersoninfo> getDetailList(Condition condion){List<allpersoninfo> list = meetingControlManagerDao.getDetailList(condion);if(list == null){return new ArrayList<allpersoninfo>();}return list;}</allpersoninfo></allpersoninfo></allpersoninfo>

简单总结一下:

使用这种方式的主要优点

  • 减少了一次数据处理的过程,后台只在bean中一次写入,不需要再进行处理
  • 集中进行为空判断等操作,减少冗余
  • 其实我们做的很多管理系统中,查询条件有很多都是类似的,这些查询条件都是可以复用的(如人员姓名,人员身份证号等),而不用每个模块封装一个查询的bean
  • and so on……其实我也没有想到

bean的一种使用姿势相关推荐

  1. android javamail获取邮件太多太慢_结合 Spring 发送邮件的4种正确姿势,你知道几种?...

    Java程序猿阿谷:面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)​zhuanlan.zhihu.com 一.前言 测试所使用的环境 测试使用的环境是企业主流的SSM 框架即 ...

  2. SpringBoot静态获取 bean的三种方式,你学会了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 ...

  3. Spring Cloud Feign的两种使用姿势

    概述 最近结合一些别人的开源项目来学习Spring Cloud,其中关于服务消费这方面的一个很便利的工具 Feign让我记忆颇深.虽然网上的Demo和例子不胜枚举,但大多比较分散,本文就来集中记录一下 ...

  4. Spring读取配置文件,获取bean的几种方式

    Spring读取配置文件,获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemX ...

  5. Spring注解创建Bean的几种方式

    Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...

  6. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  7. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

  8. 把对象的创建交给spring来管理——  1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期

    把对象的创建交给spring来管理 spring对bean的管理细节     1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期 创建Bean的三种方式 ...

  9. Spring创建Bean的3种方式

    1. Spring创建Bean的三种方式 1. 调用构造器(因为常用就不讲) 2. 调用静态工厂方法 3. 调用实例工厂方法 2. 使用静态工厂方法 1.此时<bean.../>元素要指定 ...

最新文章

  1. ATS中开启Refer防盗链功能
  2. linux下使用find xargs grep查找文件及文件内容
  3. 图像降噪算法——中值滤波/均值滤波/高斯滤波/双边滤波
  4. Ubuntu下添加定时任务执行php文件
  5. AFei Loves Magic
  6. jQuery在线手册
  7. 如何在浏览器里开发并运行 SAP UI5 应用
  8. 光纤收发器的原理及应用_基于砷化镓传感器的光纤测温原理及其在地铁中的应用...
  9. python在工程管理专业的应用_专业篇丨建筑环境与能源应用工程专业和建筑电气与智能化专业...
  10. Mac上显示出.m2文件夹并将IDEA中的Maven修改为阿里云镜像
  11. 【设计模式】面向对象作业-超级母牛的故事
  12. linux怎么修改内存缓存,Linux内存、缓存、Swap等修改
  13. m_map投影_MATLAB——m_map指南(1)
  14. 性能测试基本功 - Centos5.5下安装LAMP
  15. Atitit 防止迟到与防止打卡打不上解决方案 attilax总结
  16. matlab计算潮流,matlab潮流计算
  17. 计算机表格中格式隐藏了怎么办,Excel表格“隐藏”和“取消隐藏”工作表、行、列 -电脑资料...
  18. 案例——蚂蚁金服初探,唯一的金融互联网生态
  19. c语言程序设计21点扑克牌,C语言程序设计 21点扑克牌游戏.doc
  20. wechat sdk java_使用java集成微信支付sdk。

热门文章

  1. UID GID 说明及例子
  2. 数据库(My SQL 、SQL Server)的数据类型
  3. 补充方法的声明及使用:
  4. 尚硅谷面试第二季(周阳主讲)
  5. 腾讯云服务器简单搭建项目
  6. 【GCC编译优化系列】究竟什么样的代码会导致函数调用的栈溢出呢?
  7. 130个超实用的网站
  8. Python快速入门 满满都是干货!
  9. div标签和span标签区别
  10. 《深入理解 Java 虚拟机》转载周志明