(精品原创)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 新加 ...
最新文章
- 高职信息安全比赛攻防思路_30.LNGZ2020-30:2020年辽宁省职业院校技能大赛(高职组)“信息安全管理与评估”赛项规程...
- 在线学位课程_如何选择计算机科学学位课程
- 电赛经历--记难忘的四天三夜
- nginx 配置详解
- 从源码分析java.lang.String.isEmpty()
- numa节点_鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法
- 国庆中秋双节快乐 | 马云不再担任阿里巴巴董事;胡厚崑当值华为轮值董事长;百度小度完成独立融资...
- Docker教程小白实操入门(18)--如何挂载和共享数据卷
- 二十六、JAVAIO文件类型操作(File类型操作)
- ecshop在nginx下实现负载均衡
- discuz 3.1 修改浏览器顶部小图标
- JSPstudy恢复80端口
- 软件工程考研复试、工作面试常见问题及答案
- 视觉slam直接法,特征点法
- (C语言实现)栈求表达式的值(实数范围内)
- win 10 查看mysql密码_win10下mysql重设密码教程
- 使用ABAP批量下载有道云笔记中的图片
- awk基础教程详细版
- 如何使CAD打印PDF显示清楚
- 50天计算机考研数学,50天数学冲刺:那些hold住高分的诀窍