使用Spring的getHibernateTemplate()进行批处理(JDBC兼容方案)
一直很抵触hibernate,原因不多说,总知是能不用就不用。最近项目有大量数据导入的需求,一直出现连续导入10w左右就内存溢出之类的情况,开启事物,分页flush session还是挺慢,换对象为SQL,拼装语句块直接执行效果也不理想。看到网上说的使用传统批处理速度要高10倍左右,于是试了试,还算可以。
由于项目其他地方有采用hibernate,甚至还用了iBATIS,不能随意更换框架或者改动接口。
网上很多采用sessionFactory.connection();获取Connection的文章,用过的朋友可能就知道,这个方法在Hibernate3.3.2版本中已被弃用。
替代方法:SessionFactoryUtils.getDataSource(sessionFactory).getConnection();
也可以直接使用:((SessionFactoryImplementor)sessionFactory).getConnectionProvider().getConnection();
获取到Connection后就好说了,做法完全是传统Jdbc的。通过这个方法单独实现一个大批量插入的接口也不是什么难事了,这里不再赘述。
Oracle中varchar2(* char)与varchar2(*)的区别
最近用到Hibernate自动建表,在用到String的时候,默认会创建varchar2类型字段,如:设置length=10,则创建后字段属性为varchar2(10 char),而非varchar2(10)。
由于之前没留意到这个,就网上查了一下,才知道原来基础都没记牢(也许一开始就没接触到,至少印象中一直使用的后者)。其实,这个这两种写法还真有点不一样之处,varchar2(10 char)表示10个字符,这个类型可以存储10个多字节字符的,如如10个汉字,而varchar2(10)实际上市varchar2(10 byte)的简写,表示两个字节,注意,前者是字符,这里是字节,就是说这个类型是不能存储10个多字节字符的。
偶然发现,总结下,以备忘。玩数据库比较少,熟手勿拍!
两种方式清除Ubuntu多余启动项
昨天看到Ubuntu有不少更新(有一段时间没有用了),就升级了下,事后发现有升级内核,导致引导项有两个,强迫症泛滥的时代,绝对是受不了的。所以还是手动清理下吧。
因为Ubuntu是由grub引导启动的。每当Ubuntu升级到新的版本后,grub会自动调整开机启动菜单的顺序,把新的内核放在启动菜单的开始,但不会删除旧的内核版本。这样,当Ubuntu的升级次数一多,启动菜单中将变得非常臃肿。而且那些旧版本的内核基本不会用,不如删除之。通常的解决方案如下
1.找出系统已经安装的内核版本,在终端里输入命令:
dpkg --get-selections | grep linux-image 查看更多...
关闭博客注册功能,关闭游客评论功能
近来垃圾客们越来越猖狂,一直开放注册的博客被注册了1700多用户,还好都是订阅者身份,但每天邮件一堆堆的轰炸,实在受不鸟,果断关了。
真想不通以前为嘛没有关闭呢,作为一个个人博客,也不接受外部投稿,开着真心没用。
另外,对于越来越多的垃圾评论,虽然有多重过滤器,还是过滤不掉,所以还是选择禁止游客评论好了。