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判断。

    三:总结

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

  • 相关阅读:
    Dynamics AX 2012 R2 配置E-Mail模板
    Dynamics AX 2012 R2 设置E-Mail
    Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
    Dynamics AX 2012 R2 耗尽用户
    Dynamics AX 2012 R2 创建一个专用的批处理服务器
    Dynamics AX 2012 R2 创建一个带有负载均衡的服务器集群
    Dynamics AX 2012 R2 安装额外的AOS
    Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
    Dynamics AX 2012 R2 从代码中调用SSRS Report
    Dynamics AX 2012 R2 IIS WebSite Unauthorized 401
  • 原文地址:https://www.cnblogs.com/wuhao1991/p/4260687.html
Copyright © 2011-2022 走看看