`
luyuwww
  • 浏览: 96418 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ibaits 的动态sql语句 ,动态的表,动态的表结构,动态的拼凑 union

阅读更多

 | 旧一篇: java 调 exe程序

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script> 近来业务需要很灵活的sql语句.但是又不想拼凑sql语句.就不得不用ibatis.
这里只拿 动态的拼凑 union来具例子.有错误请大家指正

背景: 系统有一些相同表结构的表,命名有规则.比如 table_1,table_2....table_n为了方便多表查询.支持多关键字查询

现将ibaits的配置文件如下:
    <select id="baseQueryTable" parameterClass="java.util.Map" resultMap="tableMap">
        <dynamic>
            <iterate property="code" conjunction="UNION ALL">
                 SELECT ID,NAME,AGE,SEX,MESSAGE FROM TABLE_$code[]$ WHERE
                    <iterate property="keys" conjunction="$operator$">
                         MESSAGE LIKE '%$keys[]$%'
                    </iterate>
            </iterate>
        </dynamic>
            ORDER BY ID
    </select>
执行语句如下:
 SELECTID,NAME,AGE,SEX,MESSAGE FROM TABLE_0 WHERE  MESSAGE LIKE '%1%' AND  MESSAGE LIKE '%2%' AND MESSAGE
LIKE '%ibatis%' UNION ALL   
SELECT ID,NAME,AGE,SEX,MESSAGE FROM TABLE_3 WHERE  MESSAGE LIKE '%1%' AND  MESSAGE LIKE '%2%'  AND  MESSAGE LIKE '%ibatis%' UNION ALL   
 SELECT ID,NAME,AGE,SEX,MESSAGE  FROM TABLE_8 WHERE MESSAGE LIKE '%1%' AND MESSAGE LIKE '%2%'  AND MESSAGE
LIKE '%ibatis%'   ORDER BY ID

大家可以看到以上是三个表union连接的
下面将以上配置文件说明一下
  1.  id="baseQueryTable" 就不说了
  2.  resultMap="tableMap" 是自己表的映射bean 由于多表结构相同.所以共用一个bean就可以了
  3.  parameterClass="java.util.Map" 由于参数布置一个所以采用了Map来做parameterClass
          传如的map如下:
             key          :         value
            code          :        new Long{0L , 3L ,8L}
             keys         :       new String{"1","2","ibatis"}
            operator      :       and (或者 or)
  4. <dynamic>
            <iterate property="code" conjunction="UNION ALL">
                 SELECT ID,NAME,AGE,SEX,MESSAGE FROM TABLE_$code[]$ WHERE    
      由于需要三个表连接这里把select 写入了<dynamic>
            <iterate property="code" conjunction="UNION ALL">
      这里面 code就是上面的code的值 new Long{0L , 3L ,8L}.当然也可以用List来代替
      由于表内无重复数据所以使用了UNION ALL(传说可以提高效率)
      TABLE_$code[]$  由于表名的结构是 Table_[动态的数字] 所以会把 new Long{0L , 3L ,8L}的值
      依次赋给TABLE_所以就有了 TABLE_0, TABLE_3 ,TABLE_8,要注意的是$ $符号不要替换成## 还有codle[]
      的[]是必须的.否则ibatis可能会将你的惨说当成String去处理.
      iterate 是ibatis提供的迭代器.具体使用去查书吧
  5.  <iterate property="keys" conjunction="$operator$">
                         CONTEXT LIKE '%$keys[]$%'
      </iterate>
       内部的ierate 是为了动态拼凑where子句 大体结构同4.
       注意 conjunction="$operator$" operator是页面传入的 and 或者or
如题上面的几个动态都有了.还有一个动态的表结构.如果你把resultMap="tableMap"换成java.util.Map
这样基本就可以达到动态的效果 map里面key的值是列名 value就是每一值,如果返回的是List则List里面的每一个元素都是Map
剩下的事情就是解析map了. 这里没有考虑分页.如果需要可能还要改动.

好了.就这么多.有问题大家交流. luyuwww@126.com

分享到:
评论

相关推荐

    DB查询分析器批量执行多条SQL语句并查看各自的执行时间

    ### DB查询分析器批量执行多条SQL语句并查看各自的执行时间 #### 一、引言 在数据库管理和维护过程中,频繁需要执行一系列SQL语句。然而,大多数数据库管理系统(DBMS)并未提供直观的方式展示每条SQL语句的具体...

    ibatis UPDATE 动态XML与insert

    动态XML是MyBatis提供的一种灵活的SQL编写方式,允许在XML映射文件中动态地构建SQL语句。 首先,让我们来深入了解一下MyBatis的动态SQL。动态SQL是MyBatis的一个强大特性,它允许你在XML映射文件中编写条件语句,...

    ibaits例子

    2. **动态SQL**:Ibatis支持动态SQL,可以在XML映射文件中编写条件语句,如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签,可以根据传入的参数动态地生成不同的SQL。 3. **参数映射**:Ibatis提供了两种参数...

    spring-ibatis-ext-plugin.1.0.0 扩展ibaits原生SQL

    基本思路就是找到ibatis执行sql的地方,截获sql并重新组装sql。通过分析ibatis源码知道,最终负责执行sql的类是 com.ibatis.sqlmap.engine.execution.SqlExecutor,此类没有实现任何接口,这多少有点遗憾,因为...

    ibaits例子曾删改

    Ibatis的动态SQL功能非常强大,可以基于条件动态构建SQL语句,如if、choose(when/otherwise)、where、trim等标签。 7. **ResultMap和ParameterMap** ResultMap用于配置结果集的映射规则,定义字段与Java对象...

    ibaits源码以及样例

    3. 动态SQL:Ibatis允许在XML映射文件中编写动态SQL,可以根据条件动态生成SQL语句,提高了代码的灵活性和可维护性。例如,`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`等标签。 4. 参数映射:Ibatis...

    Ibaits例子与PPT

    4. **动态SQL**:Ibatis支持动态SQL,允许根据条件在XML配置文件中构建SQL语句,提高了SQL的灵活性。例如,if、choose、when、otherwise等标签可以用于条件判断,foreach用于循环处理。 5. **结果映射**:Ibatis...

    IBAITS学习总结

    IBatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句直接写在配置文件中,从而实现了 SQL 与 Java 代码的分离,使得开发者能够更加专注于 SQL 语句的编写,提高了开发效率。IBatis 提供了灵活的映射机制,可以...

    springboot ibaits mysql整合 01

    接下来,创建实体类(例如User.java),这将代表数据库中的表结构。同时,创建Mapper接口(例如UserMapper.java),该接口将包含SQL查询方法,这些方法将由iBatis自动映射到XML配置文件中的SQL语句。 接着,编写...

    java项目应用中自定义sql在ibaits框架中的使用.docx

    通过查询这张控制表,卸数程序可以动态适应表结构变化,无需修改代码。 3. iBatis框架中执行自定义SQL字符串 在DAO层定义方法,接受SQL字符串作为参数,然后在iBatis的配置文件中添加自定义查询方法。在配置时,要...

    springboot ibaits mysql整合

    2. **iBatis**:iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,避免了DAO层大量重复代码的编写。iBatis与Spring的整合可以实现事务管理,提供更灵活的数据访问方式,同时支持动态SQL...

    IbatisDemo03

    IbatisNet是其.NET平台上的实现,同样致力于简化数据库操作,尤其是在处理复杂和动态的SQL语句时。本示例"IbatisDemo03"将带你深入理解如何在.NET环境中利用IbatisNet来应用动态SQL。 动态SQL是IbatisNet的一个重要...

    ibaits2.3.4源代码

    不久也会发表SSI(Spring2.5+Struts2+Ibaits)整合配置的系列文章。?????? 该篇主要描述所需jar文件以及编写数据库连接部分。需要的jar文件有数据库连接相关jar文件如下:commons- dbcp.jarcommons-logging.jarcommons...

    ibaits guide resource

    iBATIS 提供了动态 SQL 支持,使得在运行时可以根据条件动态构建 SQL 语句。 在压缩包中,有三个文件: 1. "Manning[1].iBATIS.in.Action.Jan.2007.eBook-BBL.pdf" - 这是《iBATIS in Action》这本书的电子版,由 ...

    ibaits学习例子

    在Java开发领域,iBatis(现更名为MyBatis)是一个流行的数据持久层框架,它提供了灵活的SQL映射机制,使得开发者可以方便地将SQL语句与Java代码分离,从而提高了开发效率和代码可维护性。这个"ibaits学习例子...

    spring+struts+ibaits实例.zip

    它允许开发者直接在XML配置文件或注解中写SQL语句,与ORM(Object-Relational Mapping)工具相比,iBatis在SQL定制化方面具有更高的灵活性。 **整合使用** 在"FirstIbatisDemo"项目中,Spring、Struts和iBatis的...

    Ibatis2.x学习实战

    Ibatis2.x的一大亮点就是支持动态SQL,可以通过条件标签(if、where、choose、when、otherwise等)来构造动态的SQL语句,极大地提高了代码的可维护性和灵活性。 五、映射器接口与Mapper XML 1. 映射器接口:定义...

    ibatis优缺点

    - 示例:使用ibatis时,可以编写如`update table set column = #column_1# where id = #id#`这样的SQL语句,实现对数据库表的精确更新操作。 2. **性能优势**:由于ibatis直接支持SQL语句的编写,因此在某些情况...

    Ibatistest

    此外,Ibatis还支持动态SQL,可以在SQL语句中使用条件判断,大大增强了SQL的灵活性。例如,我们可以根据某个参数决定是否添加WHERE子句: ```xml SELECT * FROM users != null"&gt; AND name LIKE #{name} !=...

    IBatis官方资料

    使用动态查询是iBatis一个非常强大的功能。有时你已经改变WHERE子句条件的基础上你的参数对象的状态。在这种情况下的iBATIS提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的动态SQL标签。

Global site tag (gtag.js) - Google Analytics