- Java code
首先我要做的就是查出一个集合,添加到另外一个表里,之前是没用到RKRQ,是可以添加的,后来加了一个RKRQ,就怎么也不能加,一直报错,说好像是找不到属性?详情:查出集合的数据,里面是Map,Map里有一个字段是RKRQ 就是入库日期,之前用批处理出错了,又改成现在这个样子,还是一样的错误
- Java code
public int batchAddGrQyGlb(List<Map> gxList){// doBatch(gxList, "Grxy.batchAddGrQyGlb"); for(int i = 0; i < gxList.size(); i++){ Map map = gxList.get(i); sqlMapClient.insert("Grxy.batchAddGrQyGlb", map); } return 1; }
批处理的代码是这样的
- Java code
@SuppressWarnings("unchecked") public void doBatch(final List<Map> replyList, final String ibatisId){ // 执行回调 sqlMapClient.execute(new SqlMapClientCallback(){ // 实现回调接口 public Object doInSqlMapClient(SqlMapExecutor executor){ // 开始批处理 try{ executor.startBatch(); for(Map map : replyList){ // 插入操作 sqlMapClient.insert(ibatisId, map); } executor.executeBatch(); }catch(SQLException e){ e.printStackTrace(); } return null; } }); }
Ibatis查询代码是:
- XML code
<select id="getGxRecords" parameterClass="java.util.HashMap" resultClass="java.util.HashMap"> select fr.SFZJMC, fr.SFZJHM, isNull(dj.FDDBR, fr.XM) XM, dj.NBXH, bg.RKRQ YXQX, dj.RKRQ LASTRKSJ from db_zxxt.ZX_GS_QYDJ dj left join db_zxxt.ZX_GS_FDDBR fr on dj.NBXH = fr.NBXH left join db_zxxt.ZX_GS_BGNR bg on fr.NBXH = bg.NBXH where dj.RKRQ >= #lastRksj# order by dj.RKRQ asc </select>
Ibatis添加代码是:
- XML code
<insert id="batchAddGrQyGlb" parameterClass="java.util.HashMap"> insert into db_grxy.QYXG_GRQYGLB (SFZJMC, SFZJHM, XM, XYDJ, NBXH, GRLB, YXQX, LASTRKSJ) values ( #SFZJMC:VARCHAR#, #SFZJHM:VARCHAR#, #XM:VARCHAR#, #XYDJ:VARCHAR#, #NBXH#, 'fr', #YXQX:DATE#, #LASTRKSJ:DATE# ) </insert>
请高手帮我解决一下,下面是错误信息。
------解决方案--------------------
你查一下什么原因造成了空指针异常
------解决方案--------------------
dj.RKRQ >= #lastRksj#
请确保的map里的LASTRKSJ的格式与值是否为空
如果为日期格式改为dj.RKRQ >= to_char(#lastRksj#,'yyyy-MM-dd hh24:mi:ss')试试
------解决方案--------------------
我换种方式就可以,本来想用map里的LASTRKSJ给数据库的LASTRKSJ赋值,结果不行。不理解就是这里.
后来我新加一个更新方法,用parameterClass="string",从map里取到LASTRKSJ传进去就能执行更新就可以.
这什么道理?
我想看你的 resultMap 把resultMap贴出来把。。
还有上面的代码,没有什么不好理解的。。你如果用map,则你的map中一定要有LASTRKSJ这个属性。并且是区分大小写的。但是你改成parameterClass="string"的时候是不用区分的,名字好像也不用一样(我记得好像是这样。只要你传过一个String 过来就行,楼主可以试试,待考证)
我猜你空指针应该就是这个原因。。传进来的属性名字不匹配。。。
------解决方案--------------------
ibaties 分页 很简单
sqlMap.queryForList("querySPPL-SPPL", form, (currPage - 1) * pageSize, pageSize);
(currPage - 1) * pageSize 起始
pageSize 每页多少
对应的语句
<select id="querySPPL-SPPL" parameterClass="sppl" resultMap="result_querySPPL-SPPL">