兼顾效率,iBatis一些非见用法(10条)

2009-09-18 10:33:03

标签:iBatis 休闲 职场
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/202886
兼顾效率,iBatis一些非见用法(10条)
 
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 
                        ]]> 
                        </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.id                vid, 
                a.img             imgurl, 
                a.img_s         imgfile, 
                b.vfilename vfilename, 
    b.name            name, 
                c.id                sid, 
                c.url             url, 
                c.filename    filename, 
                c.status        status 
        </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()); 
                        } 
                } 
        }
 
打印结果:
--------------------------- 
sid  1 
vfilename  200905252009235799 
url  http://d18.v.iask.com/f/1/f47817a394730dc682e660b943e84cc41006606.flv 
status  0 
filename  200905252009235799-00.flv 
imgfile  200905252009234399.jpg 
vid  1 
imgurl  http://p4.v.iask.com/95/595/1757503_1.jpg 
--------------------------- 
sid  2130 
vfilename  2009062615063867492 
url  http://lz.dhot.v.iask.com/f/1/0ee2ae8b973988f6a93c071c8045ca5217266409.mp4 
status  0 
filename  2009062615063867492-00.mp4 
imgfile  2009062615063825434.jpg 
vid  93 
imgurl  http://cache.mars.sina.com.cn/nd/movievideo//thumb/2/1502_120160.jpg 
--------------------------- 
sid  2131 
vfilename  2009062615064184076 
url  http://lz5.dhot.v.iask.com/f/1/36d3dadacb8d6bda434a58e7418ad3cc19037464.flv 
status  0 
filename  2009062615064184076-00.flv 
imgfile  2009062615064136733.jpg 
vid  94 
imgurl  http://cache.mars.sina.com.cn/nd/movievideo//thumb/6/2106_120160.jpg
 
 
由于iBatis从2.3.4版本后就改为MyIBatis了,为了研究源码方便,特上传2版本的源码和发布包。

iBatis一些非见用法(相当实用)的更多相关文章

  1. Spring源码分析之IOC的三种常见用法及源码实现(二)

    Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...

  2. absolut绝对定位的非绝对定位用法

    一.absolute绝对定位的流行用法 一般而言,我们会用absolute绝对定位做什么呢?就是绝对定位,顾名思意,定死在某个位置上.例如,lightbox效果就是使用的绝对定位,例如新浪微博的弹出提 ...

  3. ibatis (六) dynamic的用法

    view plain copy print? dynamic可以去除第一个prepend="and"中的字符(这里为and),从而可以帮助你实现一些很实用的功能.具体情况如下: 1 ...

  4. Meterpreter常⻅见⽤用法

    0x01 背景 meterpreter作为后渗透模块有多种类型,并且命令由核⼼心命令和扩展库命令组成,极⼤大的丰富了了攻击⽅方式. 需要说明的是meterpreter在漏漏洞洞利利⽤用成功后会发送第二 ...

  5. iOS---GCD的三种常见用法

    1.一次性代码:dispatch_once 有时候,有些代码在程序中只要被执行一次. 整个程序运行过程中,只会执行一次. - (void)viewDidLoad { [super viewDidLoa ...

  6. Spring源码分析之IOC的三种常见用法及源码实现(一)

    1.ioc核心功能bean的配置与获取api 有以下四种 (来自精通spring4.x的p175) 常用的是前三种 第一种方式 <?xml version="1.0" enc ...

  7. ibatis中iterate的用法(conjunction="or" ",")

    例子一 查询条件dto public class queryCondition{ private String[] stuIds; private String name;} 查询sqlMap < ...

  8. jdbc三种常见用法

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  9. python-常见用法

    一.注释 单行注释:#后全部注释 多行注释:'''所有内容'''  或者使用 """所有内容"""  ,多行注释用三对单引号或双引号包裹 二 ...

随机推荐

  1. 【Selenium】Selenium IDE(alt+ctrl+s)

    ttp://www.yiibai.com/selenium/selenium_ide_tool_features.html     学习 Selenium IDE安装 http://seleniumh ...

  2. javascript中的window.open()被浏览器拦截

    最近做项目的时候,点击事件的时候遇到了window .open()被浏览器拦截的情况,虽然在自己的开发环境中都能正常使用,但是放在测试环境中window.open()就是不能使用, 后来经过测试,单纯 ...

  3. 【收藏】socket 中的 recv与send函数

    收藏自世道:http://www.cnblogs.com/jianqiang2010/archive/2010/08/20/1804598.html 1.send 函数 int send( SOCKE ...

  4. phpcms列表页内容如何替换?

    以aboutus.html页面为例. 1.将aboutus.html重新命名为list-aboutus.html: 2.在后台页面,在栏目列表中将栏目列表页模板设置为 list-aboutus.htm ...

  5. CoordinatorLayout+沉浸式状态栏

    没有gif 说个*B 注意看 状态栏的瑶瑟变化 (如果我是你 我不会去计较下边的toast) 之前为了这个效果我查了好多文章 博客什么的   ,,要么就是刚开始图片背景没有填充到状态栏下   要么就是 ...

  6. JAVA基础-JSON

    /** * 1.根据接收到的JSON字符串来解析字符串中所包含的数据和数据对象 */ System.out.println("1.根据接收到的JSON字符串来解析字符串中所包含的数据和数据对 ...

  7. Django 模型和数据库 总结

    模型和数据库 模型 首先我们在创建一个model的时候,这个类都是继承自 django.db.models.Model, 各种Model Field类型 AutoField,自动增长的IntegerF ...

  8. [Tool] Git 使用 与 Git Flow

    目录 简介 Git 命令 Git Flow 简介 Git是目前世界上最先进的分布式版本控制系统(没有之一). Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Lin ...

  9. .NET C#到Java没那么难,Servlet篇

    前言 .NET C#到Java没那么难,都是面向对向的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到MVC,都是一样一样的,只是JAVA的配制项比较多而已,只要配好一个,后面都 ...

  10. jquery一次绑定多个元素事件

    jquery一次绑定多个元素事件 $(".peoplenum,input[name$='otherAmount'],#aa,#bb").bind("change" ...