bean的一种使用姿势
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的一种使用姿势相关推荐
- android javamail获取邮件太多太慢_结合 Spring 发送邮件的4种正确姿势,你知道几种?...
Java程序猿阿谷:面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)zhuanlan.zhihu.com 一.前言 测试所使用的环境 测试使用的环境是企业主流的SSM 框架即 ...
- SpringBoot静态获取 bean的三种方式,你学会了吗?
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 ...
- Spring Cloud Feign的两种使用姿势
概述 最近结合一些别人的开源项目来学习Spring Cloud,其中关于服务消费这方面的一个很便利的工具 Feign让我记忆颇深.虽然网上的Demo和例子不胜枚举,但大多比较分散,本文就来集中记录一下 ...
- Spring读取配置文件,获取bean的几种方式
Spring读取配置文件,获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemX ...
- Spring注解创建Bean的几种方式
Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...
- Spring Boot 获取 Bean 的 3 种方式!还有谁不会?
作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...
- java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现
工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...
- 把对象的创建交给spring来管理—— 1.创建bean的三种方式 2.bean对象的作用范围 3.bean对象的生命周期
把对象的创建交给spring来管理 spring对bean的管理细节 1.创建bean的三种方式 2.bean对象的作用范围 3.bean对象的生命周期 创建Bean的三种方式 ...
- Spring创建Bean的3种方式
1. Spring创建Bean的三种方式 1. 调用构造器(因为常用就不讲) 2. 调用静态工厂方法 3. 调用实例工厂方法 2. 使用静态工厂方法 1.此时<bean.../>元素要指定 ...
最新文章
- ATS中开启Refer防盗链功能
- linux下使用find xargs grep查找文件及文件内容
- 图像降噪算法——中值滤波/均值滤波/高斯滤波/双边滤波
- Ubuntu下添加定时任务执行php文件
- AFei Loves Magic
- jQuery在线手册
- 如何在浏览器里开发并运行 SAP UI5 应用
- 光纤收发器的原理及应用_基于砷化镓传感器的光纤测温原理及其在地铁中的应用...
- python在工程管理专业的应用_专业篇丨建筑环境与能源应用工程专业和建筑电气与智能化专业...
- Mac上显示出.m2文件夹并将IDEA中的Maven修改为阿里云镜像
- 【设计模式】面向对象作业-超级母牛的故事
- linux怎么修改内存缓存,Linux内存、缓存、Swap等修改
- m_map投影_MATLAB——m_map指南(1)
- 性能测试基本功 - Centos5.5下安装LAMP
- Atitit 防止迟到与防止打卡打不上解决方案 attilax总结
- matlab计算潮流,matlab潮流计算
- 计算机表格中格式隐藏了怎么办,Excel表格“隐藏”和“取消隐藏”工作表、行、列 -电脑资料...
- 案例——蚂蚁金服初探,唯一的金融互联网生态
- c语言程序设计21点扑克牌,C语言程序设计 21点扑克牌游戏.doc
- wechat sdk java_使用java集成微信支付sdk。