zoukankan      html  css  js  c++  java
  • iBatis之Iterator的使用

    一:前言

        现在这个项目使用的是iBatis,我刚刚开始的时候说是用MyBatis,因为我以前用过,觉得还是比较好用的啊,而且不像iBatis样,查什么一个字段不能多也不能少,觉得好无语啊。

    二:内容

         自己现在接触的iterator有如下两种用处

      (一):批量循环插入

          批量插入的话有可以分开说,一种是在后台代码中,批量插入,一种是在数据库中循环插入

          (1):在先说后台批量插入的,直接上代码

        return (Integer)this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
                
                public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                    executor.startBatch();
                    int count=0;
                    for(User u:list){
                        executor.insert("batchAddUser", u);
                    }
                    count=executor.executeBatch();
                    return count;
                }
            });

      

    insert into user(id,,user_id,user_name,start_time,end_time,) values (#id#,#userId#,#userName#,#startTime#,#endTime#)

        (2):在sql中进行循环插入

          

    <selecet id="batchInsert" parameterClass="java.util.List">
        insert <iterator>
             into user(id,user_id,user_name.start_time,end_time)
    values(#list[].id#,#list[].useId#,#list[].userName#,#list[].startTime#,#list[].endTime#)
        </iterator>
    </select>

      (二):在sql中我们会使用到in这种查询,in里面一般就如(1,2,3,...)这种形式所以我们可以用iterator来循环生成这种形式

        

    <select id="get_user" parameterClass="java.util.Map" 
    resultMap="getUser">
    <![CDATA[
            select * from user o where o.user_role=2
           ]]>
             <isNotEmpty prepend="and" property="list">
                 o.user_id IN
                 <iterate close=")" open="(" conjunction="," property="list">#list[]#</iterate> 
             </isNotEmpty>
    </select>
    这里必须加上property="pilesList",否则会报下面的错误
    --- Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject 
    or property was not a Collection, Array or Iterator.

    二是使用list当作参数

    <select id="getUser" parameterClass="java.util.List" resultMap="get_user"> 
        <![CDATA[
            select * from user o where o.user_role=2
            ]]>
               and  o.pile_id IN
                  <iterate close=")" open="(" conjunction=",">#list[]#</iterate> 
    </select>
    
    这里面就不用加property="list"这个属性,这里还有一点要注意的就是不能加成这样的
    <select id="getUser" parameterClass="java.util.List" resultMap="get_user"> 
        <![CDATA[
            select * from user o where o.user_role=2
            ]]>
    <isNotEmpty property="list">
               and  o.pile_id IN
                  <iterate close=")" open="(" conjunction=",">#list[]#</iterate> 
    </isNotEmpty>
    </select>
    如果加了这个判断也是会报错的,这点使得我很与郁闷啊,这个isNotEmpty判断不了list是否为空的,list的空值是[]写的,所以只能用if判断。

    三:总结

       今天知道了旁边的同事要走,其实挺无语的。不知道怎么的,我的感触还是很深的,每个人都有自己的路去选择,尽量保持平常的心态吧。我的心很大,所以我要坚定下去。努力加油。都冲吧。

  • 相关阅读:
    异常作业
    多态作业
    封装和继承作业
    类和对象作业
    多重循环、方法作业
    选择语句+循环语句作业
    数据类型和运算符作业
    初识Java作业
    C 数据结构堆
    C基础 旋转数组查找题目
  • 原文地址:https://www.cnblogs.com/wuhao1991/p/4260687.html
Copyright © 2011-2022 走看看