(精品原创)Java代码优化-代码复用与重构
引言
很多人在写代码刚开始可能会和我一样,不会去考虑重构和复用,因为一个需求给到你,也有相应的计划时间,我们更多的考虑是如何最快的实现业务,产品在催、PM在催、客户也在催。不过渐渐的会在完成一个业务时,用更优的方案来进行优化。因为你会发现,自己写的代码越简洁,自己越舒服。(PS:虽然网络一直在传言代码写的好,离职少不了,哈哈)
接下来我用一些案例,来阐明一些简单的优化方案,仅供大家参考,大神勿喷。
案例
1. SQL复用
背景描述:
虽然现在大家都已经用了Mybaits,或者是Mybaits-plus,再加上sql生成器,很多时候写SQL非常方便,只需要调用生成器生成出的方法,.insert()
/ .save()
,就可以实现新增或修改操作,但还是有些情况避免不了的使用原生SQL,例如JdbcTemplate。此案例在调用第三方接口时,用于存储大表数据。
当我们遇到需要新增一个表时,当字段太多,往往要写一大段SQL(因为正常写INERT
假设不加列名,会导致新增列时出现异常),后期如果维护也非常麻烦,假设再加一个表,又是一段SQL,因此我选择抽象出一个生成INSERT
的SQL方法。
思路:
简单的抽象工具方法,可以让一些验证或其他重复性工作的维护成本大大降低,增加代码可读性。
第一步是发现这个问题,你的逻辑中可能存在大量的重复,或重复复杂逻辑难以维护,这时需要考虑能否抽象成工具方法。以本案例为例,即使使用生成器,接口返回字段与实际存储字段不符,那么就导致我一个实体类要写几十个set(PS:这里也可以抽象构造方法,将Map传入,为另一种思路,但相比较差,因为我有多个表多个接口,可能要抽象N个构造方法),因此我需要一个生成INSERT
的SQL方法。
第二步要明确你需要什么,有哪些是可变参数。以本案例为例,我需要的是他拼接出的最终SQL,拿到之后直接执行即可。思考可变参数,每个表的表名列名不同,实际数据也不同,接口返回的实际Key也不同,因此我们需要:列名,实际Map的key,表名,数据。
第三步就可以抽象方法进行测试了。以本案例为例,拼接SQL时选择将头先行拼接INERT INTO
。然后将Sql分为两部分进行For循环拼接,一部分拼接列名,一部分拼接插入值。插入值的地方有两种额外情况,一种是默认的可用不可用状态,例如valid_status
,默认的插入时间input_time
,这种类型的数据我会在数据库中设置默认值,因为实际返回Key并没有。还有一种是空值,拼接时不能直接用map.get(key)
,应该拼接上NULL,
。最终对拼接完成的sql去掉最后一位,
进行合并即可。(PS:示例如下,实际情况和场景可自由发挥)
demo:
/*** @description: 拼接新增Sql* @author: zeus* @createDate: 2019/8/2 10:28* @param: data: 数据源* colKey:配置列,key代表data所对应的实际key,value代表插入表的列名* tableName:需要插入的表名* @version: 1.0*/
public static String concatInsertSql(Map<String, Object> data, Map<String, String> colKey, String tableName){StringBuilder sqlHeader = new StringBuilder(" INSERT INTO ");// 拼接SQLsqlHeader.append(tableName).append(" (");StringBuilder sql = new StringBuilder(" (");for(String key : colKey.keySet()) {sqlHeader.append(colKey.get(key)).append(",");if(data.get(key) != null){String str = getConcatStr(data.get(key).toString());sql.append("'").append(str).append("',");}else{sql.append("NULL,");}}sqlHeader.deleteCharAt(sqlHeader.length()-1).append(") VALUES ");sql.deleteCharAt(sql.length()-1).append(")");sqlHeader.append(sql);return sqlHeader.toString();}
2. 表格导入导出
后续更新中。。。
(精品原创)Java代码优化-代码复用与重构相关推荐
- java编程代码大全_掌握Java编程技巧,代码重构
代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...
- java中反复使用代码_Java代码复用规则
Java代码复用规则 要尽量避免在代码中出现判断语句,来测试一个对象是否某个特定类的实例.通常,如果你需要这么做,那么,重新设计可能会有所帮助.我在工作中遇到这样的一个问题:我们在使用JAVA做XML ...
- java重复代码重构_重构重复代码
java重复代码重构 As a software engineer working on a large project, you'll likely be asked to do cleanup w ...
- 《On Java 8》- 面向对象之代码复用(组合、继承、委托)
文章目录 小结 原文 组合语法 继承语法 委托 结合组合与继承 组合与继承的选择 小结 根据<On Java 8>: 第八章复用 总结 复用指的是代码复用,一般情况下有两种方式:组合.继承 ...
- Java基础学习——代码复用
1.什么是复用 复用指的是代码的复用,即将编写的类通过组合或继承的方式重新利用 2.复用的方式 组合(has-a 关系) 继承(is-a 关系) 3.组合 1.什么是组合? 在新类中引入现有的类,组合 ...
- java饭堂管理代码论文_[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc...
[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc 还剩 68页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...
- java提高代码质量的小技巧,10个 Javascript 小技巧帮你提升代码质量
Javascript 常用代码优化和重构的方法 简介 主要介绍以下几点: 提炼函数 合并重复的条件片段 把条件分支语句提炼成函数 合理使用循环 提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参 ...
- JVM 虚拟机原理、Java 代码优化、秒杀系统
JVM虚拟机原理 JVM组成架构 Java是一种跨平台的语言,JVM屏蔽了底层系统的不同,为Java字节码文件构造了一个统一的运行环境. Java 字节码文件 Java 如何实现在不同操作系统.不同硬 ...
- 基于上下文的智能化代码复用推荐
点击上方蓝字关注我们 基于上下文的智能化代码复用推荐 彭鑫1,2, 陈驰1,2, 林云3 1 复旦大学计算机科学技术学院,上海 200438 2 上海市数据科学重点实验室,上海 200438 3 新加 ...
最新文章
- Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
- boost::hana::prefix用法的测试程序
- 「递归」第9集 | 我在腾讯做研究
- sqlserver 2005 数据库的差异备份与还原
- Asp.Net中using的使用的方法(转)
- 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
- linux 巡检手册,服务器设备系统巡检标准手册.doc
- 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
- Linux Shell编程(25)——I/O 重定向
- 台达PLC解密次数限制
- 程序员阶段性成长的自我总结
- 微信扫码授权登录-王者荣耀
- 食品科学与工程与计算机论文,2010食品科学与工程专业毕业论文
- CnOpenData中国各区县工商注册企业分年份数量统计(含新增,注销企业数量)
- 免费后台管理UI界面、html源码推荐
- Mac没有winnt格式_好用易操作,适用于Mac用户的5个免费FLV视频播放器
- 中金环境携手海通安恒,启动SAP二期项目
- DIY多快充协议太阳能充电器!----快充协议实现原理
- 如何使用git命令回滚到指定版本以及返回到新版本
- Verilog分频器的设计(6分频和1.5分频)
热门文章
- [2018-5-4]BNUZ你们还差得远呢
- java 事件流_JDK14的新特性:JFR,JMC和JFR事件流
- HEIC格式是什么?
- QT+PCL+VS制作点云显示界面(彩色显示xyz点云)
- 部署dashboard
- 月薪13K!一个“今日”胜于两个“明天”,努力前行,就能获得成功~
- SSL应用系列之三:CA证书颁发机构(中心)安装图文详解
- 汉寿计算机职业中专,汉寿县职业中等专业学校2021年有哪些专业
- 图像解析力算法—SFR(Spatial Frequency Response)概念理解
- java 判断list是否越界_关于ArrayList的越界问题?