zoukankan      html  css  js  c++  java
  • 2018/1/8 学习汇总,kettle简单介绍,集合遍历方式的选择及原理,防止表单重复提交的后台解决方案

    昨天因为当前这个二次开发项目的接近尾声,要求我们将生产环境数据库里的数据迁移到现在新的数据库来,但老数据库里是sqlserver而新数据库则是ORACLE,不仅仅面对着数据库数据类型结构不一致的问题,还因为在二次开发的过程中新添了很多字段与表关联.而因为其它人都比较忙的原因,写一个通用的数据迁移工具类的重任就交到了我头上.一开始的思路是利用XML加数据落地(比如先使用一个excle暂存)的方式,实现生产环境数据库字段到开发环境数据库表字段的手动映射.后来感觉工作量巨大而且用起来估计也很麻烦,于是便百度(原谅我没FQ,所以用不了谷歌)寻求解决方案,结果真找到了一个,还是可视化的那种.kettle,能自定义sql加自定义字段映射实现数据库的输出和输入并且自动根据数据库类型来转换数据格式,还可以添加定时任务.完全解决了我们现在的需求.非常强大而且好用,强推!

    关于集合遍历,不知道大家最喜欢用的是哪一种?其实想一想也知道是foreach了,但各个集合类型使用foreach的时候有什么区别呢?

    ArrayList集合,最常用的单列集合,没有之一,但是遍历大量数据的时候,你会发现你使用for(i=0;i<list.size();i++)会比foreach快上%65的速度,那么这是为什么呢?这个只要你点进ArrayList的源码我们就可以发现,ArrayList实现了RandomAccess接口,这个接口和Cloneable,Serializable接口一样,只是起到一个声明没有任何实质性的实现的作用.它的作用是声明ArrayList是一个随机存取集合,所谓随机存取并不是说像Set那样不记录存取顺序的,而是指各个元素之间没有任何关联关系.而相对的有序存取集合则是LinkedList,每个元素之间都有关联关系.ArrayList使用foreach很慢的原因也在这里,foreach底层是使用了iterator迭代器,这个迭代器的原理就是在遍历之前先建立每个元素的关系,而ArrayList本身元素之间没有任何关联,你这样强行建立,要在每个元素中创建一个上一个元素和下一个元素的位置节点,能不慢吗???但是如果foreach用在本身就已经有关联关系的集合上,也就是LinkedList,那就很快了,所以在大数据遍历且不能明确传进来的集合类型的时候,为了提高效率最好使用instanceof方法来判断一下类型哦.如下:

    if(list instanceof RandomAccess){//判断集合是否是RandomAccess的实现类

    for(int i = 0;i<list.size();i++){

    //遍历操作

    }else{

    for(int i : list){

    //遍历操作

    }

    }

    }

    最后的最后,在防止表单上面,除了可以靠直接在设计层面上做一些设计外,,我们后台也最好能验证一下,提供一个最稳妥的解决方案,首先创建一个能保证ID唯一性的服务,之后先建立一个小表,小表里只存一个字段,就是ID,并以其为主键,存入成功就代表ID是唯一的,继续存大表,存入不成功就代表ID不唯一,直接失败.

  • 相关阅读:
    python--函数的返回值、函数的参数
    python--字典,解包
    Vue--ElementUI实现头部组件和左侧组件效果
    Vue--整体页面布局
    jmeter--non GUI
    python--切片,字符串操作
    celery--调用异步任务的三种方法和task参数
    celery--实现异步任务
    celery--介绍
    开发问题记录
  • 原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/8249748.html
Copyright © 2011-2022 走看看