`

兼顾效率,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<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.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动态SQL标签用法

    iBatis动态SQL标签用法 iBatis是Java持久层框架,提供了动态SQL标签来实现动态查询。动态SQL标签可以根据不同的条件生成不同的SQL语句,从而提高查询效率和灵活性。 动态SQL片段 iBatis提供了动态SQL片段的功能,...

    详细介绍Ibatis的用法

    ### 详细介绍Ibatis的用法 #### Ibatis概述与特点 Ibatis是一个开源的持久层框架,它通过简单的XML配置文件将JavaBean映射到SQL语句上,从而极大简化了对关系数据库的操作。与其他数据库持久层框架如JDO、...

    ibatis入门与ibatis迭代的用法

    **ibatis入门** iBatis,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码...在实际项目中,熟练掌握iBatis能极大地提升开发效率。

    iBatis Web用法实例

    在这个"iBatis Web用法实例"中,我们将深入探讨如何在Web项目中集成并使用iBatis,以及相关的最佳实践。 1. **iBatis 概述**: iBatis 作为轻量级的ORM(对象关系映射)框架,它的核心思想是将SQL与Java代码分离,...

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    iBATIS缓存的使用方法

    ### iBATIS缓存的使用方法 在数据库访问框架iBATIS中,缓存机制是一项重要的功能,它能够显著提高应用程序的性能。本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL...

    ibatis的使用教程

    Ibatis 提供了一些基本的API,如查询、添加、删除和修改方法。通常,会通过 SqlMapClient 的工厂类创建 SqlMapClient 实例,以管理数据库操作。例如,使用 SqlMapClientBuilder 创建 SqlMapClient 对象,然后执行...

    ibatis demo,ibatis例子,ibatis示例

    通过这个demo,你可以了解到Ibatis的基本用法,如何编写SQL映射文件,如何设计Mapper接口,以及如何在Java代码中调用这些接口执行数据库操作。同时,也能掌握Ibatis的动态SQL特性,以及如何配合Spring进行更高效的...

    ibatis入门

    这个入门级别的教程将引导你了解 Ibatis 的基本概念和使用方法,包括增删改查操作、多条件查询以及单对象和数据集合查询。 1. **安装与配置** 在开始使用 Ibatis 之前,你需要在项目中引入 Ibatis 的依赖。如果是 ...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    通过阅读和理解iBatis的源码,我们可以更深入地了解其设计思路,从而更好地利用这个框架,提升我们的开发效率和代码质量。同时,源码学习也能帮助我们解决实际项目中遇到的问题,增强我们在ORM领域的专业技能。

    Ibatis入门例子,Ibatis教程

    Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作,极大地提高了开发效率。在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入...

    ibatis应对批量update

    ### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...

    ibatis api,ibatis文档,ibatis说明文档

    7. 执行性能:提供优化建议,如批处理、缓存使用等,以提升应用程序的运行效率。 总之,Ibatis是一个强大且灵活的Java持久层框架,其API、文档和说明文档为开发者提供了全面的工具和指导,帮助他们高效地进行数据库...

    ibatis教程,ibatis帮助文档

    2. 执行映射的Statement,iBATIS框架创建PreparedStatement,使用参数对象,执行SQL并从结果集中构建返回对象。 3. 返回结果,如果是更新操作,返回受影响的行数;如果是查询,返回单个对象或对象集合。 五、基础...

    iBatis执行非查询语句(CRUD,函数和过程)

    这篇博客“iBatis执行非查询语句(CRUD,函数和过程)”深入探讨了如何在iBatis中执行创建、读取、更新和删除(CRUD)操作,以及调用数据库存储过程和函数。 一、iBatis简介 iBatis最初由MyBatis的创始人Clinton ...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    此外,iBATIS还提供了一些辅助工具,如`ParameterMap`用于管理SQL语句的输入参数,`ResultMap`用于处理查询结果的映射,以及`Cache`机制,用于缓存查询结果,提高系统性能。这些工具类使得开发者能够更方便地进行...

    Ibatis

    Ibatis 的一大亮点是支持动态 SQL,开发者可以在 SQL 映射文件中使用条件判断、循环等结构,使得 SQL 语句能够根据传入参数的不同而变化。 **4. MyBatis vs Ibatis** 尽管 Ibatis 在后期演进成了 MyBatis,两者在...

    IBATIS_IN_ACTION

    本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用技巧,是iBATIS学习者和使用者不可或缺的参考资料。 ### IBATIS哲学 iBATIS的哲学强调简洁性与灵活性,它旨在提供一个轻量级的...

    ibatis api 帮助文档+IBATIS 开发文档

    总的来说,IBATIS API和开发文档是学习和使用IBATIS不可或缺的资源,它们涵盖了IBATIS的所有关键特性和用法,无论你是初学者还是有经验的开发者,都能从中受益匪浅。通过深入理解和实践,可以充分利用IBATIS的灵活性...

    ibatis3.0中in的用法

    ### ibatis3.0中`in`的用法详解 #### 一、引言 在进行数据库查询时,经常会遇到需要根据多个值进行查询的情况,这时`IN`语句就显得尤为重要。`IN`语句可以用于判断某个字段的值是否在一个指定的列表之中,非常适用...

Global site tag (gtag.js) - Google Analytics