引言

  很多人在写代码刚开始可能会和我一样,不会去考虑重构和复用,因为一个需求给到你,也有相应的计划时间,我们更多的考虑是如何最快的实现业务,产品在催、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代码优化-代码复用与重构相关推荐

  1. java编程代码大全_掌握Java编程技巧,代码重构

    代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量.性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性. 代码重构目标 持续纠偏和改进软件设计 随 ...

  2. java中反复使用代码_Java代码复用规则

    Java代码复用规则 要尽量避免在代码中出现判断语句,来测试一个对象是否某个特定类的实例.通常,如果你需要这么做,那么,重新设计可能会有所帮助.我在工作中遇到这样的一个问题:我们在使用JAVA做XML ...

  3. java重复代码重构_重构重复代码

    java重复代码重构 As a software engineer working on a large project, you'll likely be asked to do cleanup w ...

  4. 《On Java 8》- 面向对象之代码复用(组合、继承、委托)

    文章目录 小结 原文 组合语法 继承语法 委托 结合组合与继承 组合与继承的选择 小结 根据<On Java 8>: 第八章复用 总结 复用指的是代码复用,一般情况下有两种方式:组合.继承 ...

  5. Java基础学习——代码复用

    1.什么是复用 复用指的是代码的复用,即将编写的类通过组合或继承的方式重新利用 2.复用的方式 组合(has-a 关系) 继承(is-a 关系) 3.组合 1.什么是组合? 在新类中引入现有的类,组合 ...

  6. java饭堂管理代码论文_[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc...

    [计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc 还剩 68页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  7. java提高代码质量的小技巧,10个 Javascript 小技巧帮你提升代码质量

    Javascript 常用代码优化和重构的方法 简介 主要介绍以下几点: 提炼函数 合并重复的条件片段 把条件分支语句提炼成函数 合理使用循环 提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参 ...

  8. JVM 虚拟机原理、Java 代码优化、秒杀系统

    JVM虚拟机原理 JVM组成架构 Java是一种跨平台的语言,JVM屏蔽了底层系统的不同,为Java字节码文件构造了一个统一的运行环境. Java 字节码文件 Java 如何实现在不同操作系统.不同硬 ...

  9. 基于上下文的智能化代码复用推荐

    点击上方蓝字关注我们 基于上下文的智能化代码复用推荐 彭鑫1,2, 陈驰1,2, 林云3 1 复旦大学计算机科学技术学院,上海 200438 2 上海市数据科学重点实验室,上海 200438 3 新加 ...

最新文章

  1. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组
  2. boost::hana::prefix用法的测试程序
  3. 「递归」第9集 | 我在腾讯做研究
  4. sqlserver 2005 数据库的差异备份与还原
  5. Asp.Net中using的使用的方法(转)
  6. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
  7. linux 巡检手册,服务器设备系统巡检标准手册.doc
  8. 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
  9. Linux Shell编程(25)——I/O 重定向
  10. 台达PLC解密次数限制
  11. 程序员阶段性成长的自我总结
  12. 微信扫码授权登录-王者荣耀
  13. 食品科学与工程与计算机论文,2010食品科学与工程专业毕业论文
  14. CnOpenData中国各区县工商注册企业分年份数量统计(含新增,注销企业数量)
  15. 免费后台管理UI界面、html源码推荐
  16. Mac没有winnt格式_好用易操作,适用于Mac用户的5个免费FLV视频播放器
  17. 中金环境携手海通安恒,启动SAP二期项目
  18. DIY多快充协议太阳能充电器!----快充协议实现原理
  19. 如何使用git命令回滚到指定版本以及返回到新版本
  20. Verilog分频器的设计(6分频和1.5分频)

热门文章

  1. [2018-5-4]BNUZ你们还差得远呢
  2. java 事件流_JDK14的新特性:JFR,JMC和JFR事件流
  3. HEIC格式是什么?
  4. QT+PCL+VS制作点云显示界面(彩色显示xyz点云)
  5. 部署dashboard
  6. 月薪13K!一个“今日”胜于两个“明天”,努力前行,就能获得成功~
  7. SSL应用系列之三:CA证书颁发机构(中心)安装图文详解
  8. 汉寿计算机职业中专,汉寿县职业中等专业学校2021年有哪些专业
  9. 图像解析力算法—SFR(Spatial Frequency Response)概念理解
  10. java 判断list是否越界_关于ArrayList的越界问题?