昨天因为当前这个二次开发项目的接近尾声,要求我们将生产环境数据库里的数据迁移到现在新的数据库来,但老数据库里是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不唯一,直接失败.

2018/1/8 学习汇总,kettle简单介绍,集合遍历方式的选择及原理,防止表单重复提交的后台解决方案的更多相关文章

  1. 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。

    1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...

  2. spring boot 学习(七)小工具篇:表单重复提交

    注解 + 拦截器:解决表单重复提交 前言 学习 Spring Boot 中,我想将我在项目中添加几个我在 SpringMVC 框架中常用的工具类(主要都是涉及到 Spring AOP 部分知识).比如 ...

  3. PHP简单利用token防止表单重复提交

    <?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_S ...

  4. [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. PHP简单利用token防止表单重复提交(转)

    <?php/* * PHP简单利用token防止表单重复提交 */function set_token() { $_SESSION['token'] = md5(microtime(true)) ...

  6. (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交

    如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...

  7. java struts2入门学习--防止表单重复提交.OGNL语言学习

    一.知识点回顾 防止表单重复提交核心思想: 客户端和服务器端和写一个token,比较两个token的值相同,则非重复提交;不同,则是重复提交. 1.getSession三种方式比较: request. ...

  8. [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

随机推荐

  1. maven学习3,如何创建一个web项目

      Maven学习 (三) 使用m2eclipse创建web项目   1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...

  2. UEP-自定义持久化类

    HY-UEP提供了两种持久化方式:基于JPA的持久化机制和自定义持久化机制,JPA的持久化机制 比较符合现在的软件开发模式,支持各种主流数据库;自定义持久化时我们平台产品的特有持久化 机制的升级,在综 ...

  3. js keys方法和foreach方法区别

    keys和foreach都有遍历对象的功能,但他们可以遍历的对象类型是不一样的,foreach是数组对象的方法,而keys是Object对象的方法.换句话说,foreach只能数组对象使用,而keys ...

  4. HDU 2544 最短路(模板题——Floyd算法)

    题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...

  5. python+appium+unittest

    一个流行语言,一个主流工具,一个实用框架: For android 实例如下: import unittest from appium import webdriver from time impor ...

  6. 【Jsp/Servlet】获取客户端使用的ip

    一般使用jsp的时候大多数时间都可以使用request.getRemoteAddr() 来获取ip,但是这个前提是未经过反向代理等操作的原始地址,所以,需要在反向代理等操作之后还要获取客户端的ip变得 ...

  7. 【开发技术】eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法

    要格式化代码的时候,右键-source-format能够起效,但ctrl+shift+f不好使了. 原来是和“简繁体快捷键”冲突了.输入法中的这个快捷键我们一般不用,小勾勾去掉就成了. eclipse ...

  8. Codeforces 448 D. Multiplication Table 二分

    题目链接:D. Multiplication Table 题意: 给出N×M的乘法矩阵要你求在这个惩罚矩阵中第k个小的元素(1 ≤ n, m ≤ 5·10^5; 1 ≤ k ≤ n·m). 题解: n ...

  9. [知了堂学习笔记]_css3特效第一篇--旋转的背景&翻书效果

    一.html遮盖层与css3的旋转动画 >效果图(加载可能会慢一点儿,请稍等...): >实现思路:在一个大的div中装入一个底层img和顶层的div(里面的内容按照以上图片呈现的样式布局 ...

  10. linux_运维职责

    运维准则: 不要删文件,移动文件,可以复原,一个月后什么事没有,删除 运维人员主要关注哪些方面? CPU:对计算机工作速度和效率起决定性作用(intel amd) 内存: 临时存放数据:容量和处理速度 ...