<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语句并查看各自的执行时间 #### 一、引言 在数据库管理和维护过程中,频繁需要执行一系列SQL语句。然而,大多数数据库管理系统(DBMS)并未提供直观的方式展示每条SQL语句的具体...
动态XML是MyBatis提供的一种灵活的SQL编写方式,允许在XML映射文件中动态地构建SQL语句。 首先,让我们来深入了解一下MyBatis的动态SQL。动态SQL是MyBatis的一个强大特性,它允许你在XML映射文件中编写条件语句,...
2. **动态SQL**:Ibatis支持动态SQL,可以在XML映射文件中编写条件语句,如`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签,可以根据传入的参数动态地生成不同的SQL。 3. **参数映射**:Ibatis提供了两种参数...
基本思路就是找到ibatis执行sql的地方,截获sql并重新组装sql。通过分析ibatis源码知道,最终负责执行sql的类是 com.ibatis.sqlmap.engine.execution.SqlExecutor,此类没有实现任何接口,这多少有点遗憾,因为...
Ibatis的动态SQL功能非常强大,可以基于条件动态构建SQL语句,如if、choose(when/otherwise)、where、trim等标签。 7. **ResultMap和ParameterMap** ResultMap用于配置结果集的映射规则,定义字段与Java对象...
3. 动态SQL:Ibatis允许在XML映射文件中编写动态SQL,可以根据条件动态生成SQL语句,提高了代码的灵活性和可维护性。例如,`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<where>`等标签。 4. 参数映射:Ibatis...
4. **动态SQL**:Ibatis支持动态SQL,允许根据条件在XML配置文件中构建SQL语句,提高了SQL的灵活性。例如,if、choose、when、otherwise等标签可以用于条件判断,foreach用于循环处理。 5. **结果映射**:Ibatis...
IBatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句直接写在配置文件中,从而实现了 SQL 与 Java 代码的分离,使得开发者能够更加专注于 SQL 语句的编写,提高了开发效率。IBatis 提供了灵活的映射机制,可以...
接下来,创建实体类(例如User.java),这将代表数据库中的表结构。同时,创建Mapper接口(例如UserMapper.java),该接口将包含SQL查询方法,这些方法将由iBatis自动映射到XML配置文件中的SQL语句。 接着,编写...
通过查询这张控制表,卸数程序可以动态适应表结构变化,无需修改代码。 3. iBatis框架中执行自定义SQL字符串 在DAO层定义方法,接受SQL字符串作为参数,然后在iBatis的配置文件中添加自定义查询方法。在配置时,要...
2. **iBatis**:iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,避免了DAO层大量重复代码的编写。iBatis与Spring的整合可以实现事务管理,提供更灵活的数据访问方式,同时支持动态SQL...
IbatisNet是其.NET平台上的实现,同样致力于简化数据库操作,尤其是在处理复杂和动态的SQL语句时。本示例"IbatisDemo03"将带你深入理解如何在.NET环境中利用IbatisNet来应用动态SQL。 动态SQL是IbatisNet的一个重要...
不久也会发表SSI(Spring2.5+Struts2+Ibaits)整合配置的系列文章。?????? 该篇主要描述所需jar文件以及编写数据库连接部分。需要的jar文件有数据库连接相关jar文件如下:commons- dbcp.jarcommons-logging.jarcommons...
iBATIS 提供了动态 SQL 支持,使得在运行时可以根据条件动态构建 SQL 语句。 在压缩包中,有三个文件: 1. "Manning[1].iBATIS.in.Action.Jan.2007.eBook-BBL.pdf" - 这是《iBATIS in Action》这本书的电子版,由 ...
在Java开发领域,iBatis(现更名为MyBatis)是一个流行的数据持久层框架,它提供了灵活的SQL映射机制,使得开发者可以方便地将SQL语句与Java代码分离,从而提高了开发效率和代码可维护性。这个"ibaits学习例子...
它允许开发者直接在XML配置文件或注解中写SQL语句,与ORM(Object-Relational Mapping)工具相比,iBatis在SQL定制化方面具有更高的灵活性。 **整合使用** 在"FirstIbatisDemo"项目中,Spring、Struts和iBatis的...
Ibatis2.x的一大亮点就是支持动态SQL,可以通过条件标签(if、where、choose、when、otherwise等)来构造动态的SQL语句,极大地提高了代码的可维护性和灵活性。 五、映射器接口与Mapper XML 1. 映射器接口:定义...
- 示例:使用ibatis时,可以编写如`update table set column = #column_1# where id = #id#`这样的SQL语句,实现对数据库表的精确更新操作。 2. **性能优势**:由于ibatis直接支持SQL语句的编写,因此在某些情况...
此外,Ibatis还支持动态SQL,可以在SQL语句中使用条件判断,大大增强了SQL的灵活性。例如,我们可以根据某个参数决定是否添加WHERE子句: ```xml SELECT * FROM users != null"> AND name LIKE #{name} !=...
使用动态查询是iBatis一个非常强大的功能。有时你已经改变WHERE子句条件的基础上你的参数对象的状态。在这种情况下的iBATIS提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的动态SQL标签。