老旧电商系统升级改造日记 - 2. 数据导入,然后搞定硬编码问题

来源:互联网 发布:python 元组转换字典 编辑:程序博客网 时间:2024/05/03 03:56

    上回给大家交代了一下目前这个系统需要升级改造的背景情况,那么接下来我们就不扯闲篇,直接开整。得意

    一开始我们的想法是从需求开始,将系统推倒,重新构建。但是我们漂亮的运营推广总监告诉我说,我们现在的会员数量已经达到了将近1000个,而且每天还在以10%到20%的速度增长。这就意味着,我们的新系统必须要把老系统的数据接过来,说白了就是割接,这个事情做过电信系统的朋友们一定都不陌生,吼吼。再说的通俗一些,我们总不能上了新系统以后,再让那1000多个会员朋友重新注册一遍吧,而且这些会员朋友们还发布了一些其他的相关信息,我们也必须都要接收。所以嘛,完全推倒重来的可能性是绝对没有了。既然老的数据不能抛弃,那我们就不抛弃,不放弃,先从数据库的表结构开始,根据目前的需求,把数据对象梳理一遍。

    要想梳理数据,首先第一步是把数据接过来,也就是把数据从老的库中导入到新的库中。这个过程十分地坑爹,在这里我就简单说说,详细过程就不表了,想体验的童鞋们可以自己去试试。吐舌头

    老系统目前使用的数据库是sql server 2008 r2,我打算使用的是mysql5.6。我百度了一下如何将数据从sql server导入到mysql中,大部分人用的是odbc数据源的方式。ok,那我也按照别人成功的经验来做。结果选择导出数据源的时候,死活就是没有mysql的odbc数据源选项。然后我上网一查,才发现,从sql server 2005版本开始,微软就不支持mysql的odbc数据源导出了。坑爹啊!早就知道微软很霸道,没想到竟然霸道的这么无耻。好吧,从sql server导出这条路是行不通了,那就反其道而行之,让mysql通过odbc数据源从sql server上拿数据,结果成功了。哎,真是太坑爹了。

    数据总算是接过来了,然后我随便打开了一张表,比如area表,结果不出我所料,数据里面有硬编码!


而且最搞笑的是,type这个字段居然还是int类型的


做过很多年开发的小伙伴们肯定都知道,像这样的字段,得用字典数据的方式来管理。然后我看了下其他的表中的数据,大部分也都存在着硬编码的情况。这样可不行,做过几年开发的小伙伴们肯定知道硬编码是个什么玩意,会给我们带来多大的麻烦。真把系统接手过来,这可是一个大坑啊。于是我立马找到了老系统的开发人员,让他们给整理一份所有硬编码的含义的说明文档,我得填坑啊。


    说到填坑,肯定得想办法替换硬编码字段的那些1,2,3什么的。但是如果靠人工来写sql,一个一个去替换,费时费力。于是我就想啊想啊,不经意间看了一眼以前用的字典表,突然灵光一现,计上心来。在字典表中加上“表名”,“列名”,“老值”这几个字段,然后把有硬编码的表和字段还有值一个个地输进去,然后把要替换的内容填进去,最后用一个循环把这些表中的硬编码update一下,然后再一起commit,这不就解决了嘛。小伙伴们是不是听着有点绕啊?别着急,跟我一步一步地做,你就明白啦。大笑


    首先我们要把含有硬编码的字段转换成varchar类型。拿area表来举例,直接在navicat中把type字段改成varchar类型后保存。

然后我们在字典表 t_dict 中增加 fromTable,colName 和 oldCode,即表名,列名和老值这三个字段。

ok,然后打开 t_dict 表,在表中加几条记录,表名填area,列名填type,老值填type字段的值,code字段填你想把硬编码替换掉的内容。area表有几种硬编码,就建几条记录。


ok,数据准备完毕,接下来是写代码来实现替换。我原本想写个java命令行程序来着,但是后来一想,数据库的事情,还是让数据库来解决吧,所以就写了个存储过程。


然后,保存,执行,完成后,area表的硬编码就全都替换完了,世界从此变得美好得意


area表,t_dict表和存储过程的代码我已经上传,下载链接是

http://download.csdn.net/detail/johntsu2006/9479929


  硬编码这个坑算是找到填平的办法了,接下来就是改页面,用java代码重写业务了。哎,缺人啊,这里打个招聘广告,有想换工作的,一起做电商系统的,工作经验1到3年的小伙伴们,我们欢迎你们的加入,男女不限,大家一起学习成长,分享毛毛和快乐。有意向的小伙伴,请发简历到我的邮箱,assaig@163.com。

    求简历!大笑




   

0 0
原创粉丝点击