日期:2014-05-17  浏览次数:20878 次

Ibatis的不理解
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