欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

ibatis 兼顾效率的十种写法,ibatis十种,iBatis一些非见用法

来源: javaer 分享于  点击 36648 次 点评:90

ibatis 兼顾效率的十种写法,ibatis十种,iBatis一些非见用法


iBatis一些非见用法,基本上解决所有棘手问题,下面总结如下:

1、动态SQL片段

通过SQL片段达到代码复用

   <!-- 动态条件分页查询 -->    <sql id="sql_count">    select count(*)    </sql>    <sql id="sql_select">    select *    </sql>    <sql id="sql_where">    from icp    <dynamic prepend="where">    <isNotEmpty prepend="and" property="name">    name like '%$name$%'    </isNotEmpty>    <isNotEmpty prepend="and" property="path">    path like '%path$%'    </isNotEmpty>    <isNotEmpty prepend="and" property="area_id">    area_id = #area_id#    </isNotEmpty>    <isNotEmpty prepend="and" property="hided">    hided = #hided#    </isNotEmpty>    </dynamic>    <dynamic prepend="">    <isNotNull property="_start">    <isNotNull property="_size">    limit #_start#, #_size#    </isNotNull>    </isNotNull>    </dynamic>    </sql>    <select id="findByParamsForCount" parameterClass="map" resultClass="int">    <include refid="sql_count"/>    <include refid="sql_where"/>    </select>    <select id="findByParams" parameterClass="map" resultMap="icp.result_base">    <include refid="sql_select"/>    <include refid="sql_where"/>    </select>

2、数字范围查询

所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段

  <isNotEmpty prepend="and" property="_img_size_ge">    <![CDATA[    img_size >= #_img_size_ge#    ]]>    </isNotEmpty>    <isNotEmpty prepend="and" property="_img_size_lt">    <![CDATA[    img_size < #_img_size_lt#    ]]>    </isNotEmpty> 

多次使用一个参数也是允许的

  <isNotEmpty prepend="and" property="_now">    <![CDATA[    execplantime >= #_now#    ]]>    </isNotEmpty>    <isNotEmpty prepend="and" property="_now">    <![CDATA[    closeplantime <= #_now#    ]]>    </isNotEmpty>

3、时间范围查询

   <isNotEmpty prepend="" property="_starttime">    <isNotEmpty prepend="and" property="_endtime">    <![CDATA[    createtime >= #_starttime#    and createtime < #_endtime#    ]]>    </isNotEmpty>    </isNotEmpty> 

4、in查询

   <isNotEmpty prepend="and" property="_in_state">    state in ('$_in_state$')    </isNotEmpty>

5、like查询

   <isNotEmpty prepend="and" property="chnameone">    (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')    </isNotEmpty>    <isNotEmpty prepend="and" property="chnametwo">    chnametwo like '%$chnametwo$%'    </isNotEmpty> 

6、or条件

   <isEqual prepend="and" property="_exeable" compareValue="N">    <![CDATA[    (t.finished='11'or t.failure=3)    ]]>    </isEqual>   <isEqual prepend="and" property="_exeable" compareValue="Y">    <![CDATA[    t.finished in ('10','19') and t.failure<3    ]]>    </isEqual>

7、where子查询

   <isNotEmpty prepend="" property="exprogramcode">    <isNotEmpty prepend="" property="isRational">    <isEqual prepend="and" property="isRational" compareValue="N">    code not in    (select t.contentcode    from cms_ccm_programcontent t    where t.contenttype='MZNRLX_MA'    and t.programcode = #exprogramcode#)    </isEqual>    </isNotEmpty>    </isNotEmpty>   <select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_material.result">    select *    from cms_ccm_material    where code in    (select t.contentcode    from cms_ccm_programcontent t    where t.contenttype = 'MZNRLX_MA'    and programcode = #value#)    order by updatetime desc    </select>

9、函数的使用

   <!-- 添加 -->    <insert id="insert" parameterClass="RuleMaster">    insert into rulemaster(    name,    createtime,    updatetime,    remark    ) values (    #name#,    now(),    now(),    #remark#    )    <selectKey keyProperty="id" resultClass="long">    select LAST_INSERT_ID()    </selectKey>    </insert>    <!-- 更新 -->    <update id="update" parameterClass="RuleMaster">    update rulemaster set    name = #name#,    updatetime = now(),    remark = #remark#    where id = #id#    </update>

10、map结果集

  <!-- 动态条件分页查询 -->    <sql id="sql_count">    select count(a.*)    </sql>    <sql id="sql_select">    select a.idvid,    a.img imgurl,    a.img_s imgfile,    b.vfilename vfilename,    b.namename,    c.idsid,    c.url url,    c.filenamefilename,    c.statusstatus    </sql>    <sql id="sql_where">    From secfiles c, juji b, videoinfo a    where    a.id = b. videoid    and b.id = c.segmentid    and c.status = 0    order by a.id asc,b.id asc,c.sortnum asc    <dynamic prepend="">    <isNotNull property="_start">    <isNotNull property="_size">    limit #_start#, #_size#    </isNotNull>    </isNotNull>    </dynamic>    </sql>    <!-- 返回没有下载的记录总数 -->    <select id="getUndownFilesForCount" parameterClass="map" resultClass="int">    <include refid="sql_count"/>    <include refid="sql_where"/>    </select>    <!-- 返回没有下载的记录 -->    <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap">    <include refid="sql_select"/>    <include refid="sql_where"/>    </select>

注意:在使用Map作为结果集返回类型时候,必须这么设置结果集类型resultClass="java.util.HashMap",这时候,需要根据字段的名称来取值,值类型为Object,key类型为String,这点要注意了: 定义的DAO方法实现如下:

   public List<Map<String,Object>> findUndownFiles(Map map) {        return getSqlMapClientTemplate().queryForList("secfiles.getUndownFiles", map);    }

通过DAO读取并操作Map结果集数据:

  public void test_findUndownFiles() {       List<Map<String, Object>> co = ser.findUndownFiles(new HashMap());       StringBuilder s = new StringBuilder();       for (Map<String, Object> map : co) {          System.out.println("^^^^^^^^^^^^^^^^^^^^^");          for (Map.Entry<String, Object> entry : map.entrySet()) {             System.out.print(entry.getKey()+"/t");             System.out.println(entry.getValue());          }      }   }

打印结果:

   sid1    vfilename200905252009235799    urlhttp://d18.v.iask.com/f/1/f47817a394730dc682e660b943e84cc41006606.flv    status0    filename200905252009235799-00.flv    imgfile200905252009234399.jpg    vid1    imgurlhttp://p4.v.iask.com/95/595/1757503_1.jpg   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   sid2130    vfilename2009062615063867492    urlhttp://lz.dhot.v.iask.com/f/1/0ee2ae8b973988f6a93c071c8045ca5217266409.mp4    status0    filename2009062615063867492-00.mp4    imgfile2009062615063825434.jpg    vid93    imgurlhttp://cache.mars.sina.com.cn/nd/movievideo//thumb/2/1502_120160.jpg   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   sid2131    vfilename2009062615064184076    urlhttp://lz5.dhot.v.iask.com/f/1/36d3dadacb8d6bda434a58e7418ad3cc19037464.flv    status0    filename2009062615064184076-00.flv    imgfile2009062615064136733.jpg    vid94    imgurlhttp://cache.mars.sina.com.cn/nd/movievideo//thumb/6/2106_120160.jpg
相关栏目:

用户点评