mybatis批量新增系列之表的批量新增初探

开发项目中,总是与数据打交道,有的时候将数据放入到一个集合中,然后在遍历集合一条一条的插入,感觉效率超不好,最近又碰到这个问题,插入50条数据用了将近1s,完全满足不了系统的需求.效率必须加快,然后网上查询资料,,历经千万bug,终于搞定,这里指提供mybatis中的配置,至于dao层的调用mybatis就自己上网查询下资料吧

1根据网上搜了一下资料,在sql-mapper.xml文件中写了如下配置可进行批量操作

="insertBatch" parameterType="List"> insert into REAL_DATA_HW(M_LINE_NO,M_TIME,HW_NUM, VOL_A,VOL_B,VOL_C)

values="list" itemseparator=","> (#{obj.M_LINE_NO},to_date(#{obj.M_TIME},’yyyy-MM-dd hh24:mi:ss’),#{obj.HW_NUM},

#{obj.VOL_A},#{obj.VOL_B},#{obj.VOL_C})

然后启动,调用这个操作的时候报错Error setting null parameter. Most JDBC driversrequire that the JdbcType must be specified for all nullable parameters. Cause:java.sql.SQLException:无效的列类型上网继续查询说加上 <![CDATA[ ]]> 即可,好吧配置变成了

<![CDATA[ insert into REAL_DATA_HW()

values ]]> index (#{obj.M_LINE_NO},to_date(#{obj.M_TIME},’yyyy-MM-dd hh24:mi:ss’),#{obj.HW_NUM},

#{obj.VOL_A},#{obj.VOL_B},#{obj.VOL_C})

然后依然报同样的错,查来查去,发现一句坑爹的话这个只是支持mySQL,去年买了个表。。。继续找方法吧,又被我找到一种在ORACLE中可以用的方法,参考网上的步骤,有了如下的配置

insert into REAL_DATA_HW()

index select #{obj.M_LINE_NO},to_date(#{obj.M_TIME},’yyyy-MM-dd hh24:mi:ss’),#{obj.HW_NUM},

#{obj.VOL_A},#{obj.VOL_B},#{obj.VOL_C} from dual

这个的原理应该是参考的insert intotableName select 。。。 from tableName1 这个方式重新启动,然后继续报错,奔溃

org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters…哎 ,找原因,mybaties对null缺乏处理,需要在字段后加上jdbcType=类型,于是添加类型吧,顺带去网上查询了mybatis的类型JdbcType类则由不同的JDBC Driver):Array, BigInt, Binary, Bit, Blob, Boolean, Char, Clob, Datalink, Date, Decimal, Double, Float, Integer, LongVarBinary, LongVarChar, Numeric, Real, Ref, SmallInt, Struct, Time, Timestamp, TinyInt, VarBinary, VarChar.大小写不敏感,,配置如下

insert into REAL_DATA_HW()

index select ,jdbcType=VarChar},’yyyy-MM-dd hh24:mi:ss’),#{obj.HW_NUM

} from dual

调用的时候继续报错,有一个是org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error resolving JdbcType. Cause: java.lang.IllegalArgumentException: No enum const class org.apache.ibatis.type.JdbcType.Double亲,不敏感你妹!!!!!!!!!于是慢慢替换了下Double,终于在Double写成DOUBLE的时候不在报这个错误了,此时配置如下

insert into REAL_DATA_HW()

index select ,jdbcType=VARCHAR},’yyyy-MM-dd hh24:mi:ss’),#{obj.HW_NUM

} from dual

启动,调用这个方法的依然报错。。。

org.springframework.jdbc.BadSqlGrammarException:

人生就是要感受美丽的、善良的,丑恶的、病态的。

mybatis批量新增系列之表的批量新增初探

相关文章:

你感兴趣的文章:

标签云: