`
Just_抱怨
  • 浏览: 10583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor

 
阅读更多

今天学习重构没怎么开窍,这有一段代码,大家帮忙Refactor

 

StringBuffer sb =new StringBuffer("select d.*  from table d where 1=1 ");
  if(vo.getC() != null && !vo.getC().equals("")){
   sb.append(" and d.c like '%"+vo.getC()+"%'");
  }
  if(vo.getT() != null && !vo.getT().equals("")){
   sb.append(" and d.t = '"+vo.getT()+"'");
  }
  if(vo.getB()!=null && !vo.getB().equals("")){
   sb.append(" and d.B like '%"+vo.getB()+"%'");
  }
  if(vo.getD()!=null && !vo.getD().equals("")){
   sb.append(" and d.d = '"+vo.getD()+"'");
  }

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

 

这是一段简单的条件查询语句,vo是参数,table是数据库里的表名

 

这段代码应该怎么重构,如果以后查询条件多了该怎么办,谢谢

 

 

1
3
分享到:
评论
8 楼 hdp2010 2011-10-24  
    这个看你系统怎么设计,如果你组装这样的sql语句很多,完全可以写一个接口,提供将实体bean转换成一个sql语句的一部分;
interface ITransBeanToStr<T>{
  String beanToSql(T obj);
}利用反射实现
7 楼 Just_抱怨 2011-10-16  
hyj1254 写道
引用



这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。

至于命名,是我把后面的删了,公司有保密制度,代码严禁外泄的
6 楼 hyj1254 2011-10-15  
引用

StringBuffer sb =new StringBuffer("select d.*  from table d where 1=1 ");
  if(vo.getC() != null && !vo.getC().equals("")){
   sb.append(" and d.c like '%"+vo.getC()+"%'");
  }
  if(vo.getT() != null && !vo.getT().equals("")){
   sb.append(" and d.t = '"+vo.getT()+"'");
  }
  if(vo.getB()!=null && !vo.getB().equals("")){
   sb.append(" and d.B like '%"+vo.getB()+"%'");
  }
  if(vo.getD()!=null && !vo.getD().equals("")){
   sb.append(" and d.d = '"+vo.getD()+"'");
  }

这段提出来作为一个独立的函数,一可封装出一个独立的功能且有机会解释其作用;二可避免使两个不同的功能散落在同一个函数内。
引用

SQLQuery query = this.getSession().createSQLQuery(sb.toString());

因为这也可以看作一个功能。
至于getC,getT之类的确实可以优化一下命名,便于理解。
5 楼 木易有峰 2011-10-15  
还是有些地方可以重构的吧。
在append里面在用+操作。
如果是JDK1.5的话 且不是多线程环境考虑用StringBuilder吧。
另外为啥不用变量代替 getT getB等呢。你这个里面每次都差不多get了三次吧。
4 楼 Just_抱怨 2011-10-15  
我看坏味道里面举得例子就和我这个相似,可他没有对它重构,只是提出来了
3 楼 Just_抱怨 2011-10-15  
287854442 写道
没什么可重构的。
至少

vo.getB()!=null && !vo.getB().equals("")

这一句能提取出来一个类似
public static boolean isEmpty(String value){
    return value == null || value.trim().equals("")
}

的方法。
哦 因为这个就三个条件 所以我就没写 很多地方我都写了
2 楼 287854442 2011-10-14  
没什么可重构的。
至少

vo.getB()!=null && !vo.getB().equals("")

这一句能提取出来一个类似
public static boolean isEmpty(String value){
    return value == null || value.trim().equals("")
}

的方法。
1 楼 Just_抱怨 2011-10-14  
自己先顶下,习惯了

相关推荐

    YOLO算法-城市电杆数据集-496张图像带标签-电杆.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    (177406840)JAVA图书管理系统毕业设计(源代码+论文).rar

    JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代

    (35734838)信号与系统实验一实验报告

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    YOLO算法-椅子检测故障数据集-300张图像带标签.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    基于小程序的新冠抗原自测平台小程序源代码(java+小程序+mysql+LW).zip

    系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测平台小程序。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    YOLO算法-俯视视角草原绵羊检测数据集-4133张图像带标签-羊.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    (171674830)PYQT5+openCV项目实战:微循环仪图片、视频记录和人工对比软件源码

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    新建 文本文档.docx

    新建 文本文档.docx

    hw06.zip

    hw06

    3. Kafka入门-安装与基本命令

    3. Kafka入门-安装与基本命令

    燃气管道施工资质和特种设备安装改造维修委托函.docx

    燃气管道施工资质和特种设备安装改造维修委托函.docx

    The state of AI 2024.pdf

    AI大模型研究相关报告

    lab02.zip

    lab02

    Unity视频插件AVPro的Win端2.2.3

    仅供学习使用,其他用途请购买正版资源AVPro Video Core Windows Edition 2.2.3 亲测可用的视频播放插件,能丝滑播放透明视频等.

    建设工程消防验收现场指导意见表.docx

    建设工程消防验收现场指导意见表.docx

    MVIMG_20241222_194113.jpg

    MVIMG_20241222_194113.jpg

    五相电机双闭环矢量控制模型-采用邻近四矢量SVPWM-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成

    五相电机双闭环矢量控制模型_采用邻近四矢量SVPWM_MATLAB_Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿真波形及仿真说明文档; (3)完整版仿真模型:包括邻近四矢量SVPWM模型和完整双闭环矢量控制Simulink模型; 资料介绍过程十分详细,零基础手把手教学,资料已经写的很清楚

    YOLO算法-锡罐-牙罐-盖子打开数据集-179张图像带标签-锡罐-牙罐-盖子打开.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    java毕设项目之ssm基于JSP的乡镇自来水收费系统+jsp(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

Global site tag (gtag.js) - Google Analytics