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
imgurl
http://cache.mars.sina.com.cn/nd/movievideo//thumb/6/2106_120160.jpg
分享到:
相关推荐
- **ibatis-2.3.4.726.jar**:这是iBATIS 2.x系列的较新版本,可能包含了一些bug修复、性能优化和新的特性。例如,可能会对之前版本的不稳定性问题进行了改进,或者添加了对某些数据库方言的支持。 - **ibatis-2.3....
在2.3.4.726这个版本中,我们可以期待看到一些关键组件,如SqlMapConfig.xml配置文件的解析逻辑,SqlMapClient的构建和执行SQL的方法,以及Statement类型的定义(例如,SelectStatement、InsertStatement等)。...
映射器是Ibatis的主要组件,它定义了数据库操作与Java方法之间的对应关系。SQL映射文件则包含了具体的SQL语句和结果映射,这些文件通常以XML格式存在,也可以用注解方式来实现。SqlSession则负责与数据库进行交互,...
在实际使用Ibatis时,首先需要在项目中引入ibatis-2.3.0.677.jar包,然后配置SqlMapConfig.xml文件,这是整个Ibatis的全局配置文件,用于设置数据源、事务管理器以及其他核心组件。接下来,开发者可以创建具体的...
此外,iBATIS还提供了一些辅助工具,如`ParameterMap`用于管理SQL语句的输入参数,`ResultMap`用于处理查询结果的映射,以及`Cache`机制,用于缓存查询结果,提高系统性能。这些工具类使得开发者能够更方便地进行...
"simple_example"目录包含了一些简单的示例,用于演示iBatis的基本用法和功能。通过这些例子,开发者可以快速上手,了解如何配置和使用iBatis进行数据库操作。 "src"目录是源代码的核心所在,包含了iBatis的各个...
本文将深入探讨这个核心库的内部结构和主要功能,帮助开发者更好地理解和使用iBatis。 一、iBatis框架概述 iBatis源于MyBatis的早期版本,由Clinton Begin创建,旨在解决传统的DAO(Data Access Object)模式与SQL...
2. 映射器接口:Ibatis支持使用Java接口来代表一个数据库操作的集合。接口方法的名称和参数类型对应着SQL映射文件中的SQL语句和参数,这样就可以通过简单的调用接口方法实现数据库操作。 3. 数据源配置:`ibatis-...
- **映射语句**:iBATIS使用XML映射文件来定义数据库操作,这些映射文件包含了SQL语句以及它们与Java对象之间的映射关系。每个映射文件都包含了一系列的`<select>`、`<insert>`、`<update>`和`<delete>`元素,每个...
在Java开发领域,MyBatis是一个非常流行的持久层框架,它简化了数据库操作与Java对象之间的映射工作。`ibatis-core-3.0.jar`是MyBatis的核心库文件,包含了MyBatis框架的主要功能。`org.apache.ibatis.annotations....
Ibatis,一个轻量级的Java持久层框架,以其简单易用、高度可...总的来说,这三者构成了Ibatis的基本运行环境,对于理解Ibatis的工作原理和使用方法,以及在项目中有效地利用Ibatis进行数据访问操作,都是非常重要的。
2. **动态SQL**:Ibatis支持动态SQL,可以在SQL语句中使用条件判断、循环等,使SQL更加灵活,适应各种复杂的业务场景。 3. **数据对象与数据库表的映射**:Ibatis通过Mapper接口和Mapper XML文件实现了Java对象与...
3. 参数映射:通过XML配置文件或注解,开发者可以指定Java对象的属性如何映射到SQL语句的参数,如使用`<parameterMap>`标签定义参数集合,或者使用注解`@Param`来标记方法参数。 4. 结果映射:同样通过XML或注解,...
3. **示例代码**:展示了如何在实际项目中应用IBatis.DataAccess的典型用法。 4. **最佳实践**:提供了在开发过程中应遵循的准则,以优化性能和代码质量。 通过学习和使用这些文档,开发者能够更好地理解和利用...
本教程基于iBatis 2.3.3.720版本,旨在帮助开发者深入了解并掌握这一经典版本的功能和用法。 1. iBatis简介 iBatis起源于MyBatis的早期版本,它将SQL语句与Java代码分离,通过XML或注解的方式定义SQL映射,实现了...
3. 结果映射:`<resultMap>`元素是iBatis中非常关键的部分,它定义了如何将数据库查询结果映射到Java对象。例如,可以使用`<id>`, `<result>`, `<association>`和`<collection>`等子元素来指定主键、普通字段、关联...
iBATIS DAO是Java开发中的一个关键组件,它在企业级应用中被广泛使用,特别是在数据访问层(DAO,Data Access Object)的设计中。iBATIS DAO 2.2.0.638是一个特定版本的iBATIS框架,这个版本提供了对数据库操作的...
Ibatis.Net是一个流行的.NET平台上的持久层框架,它允许开发者将SQL映射到.NET对象,提供了灵活的数据访问层。在给定的压缩包文件中,包含的组件是"Ibatis.Net.Domain"和"IBatisNet.Common",这两个组件是Ibatis.Net...
此外,源码中还包含了丰富的测试用例,这些用例不仅验证了iBatis的功能,也为我们提供了实际应用中的使用示例,对于快速上手和调试都非常有帮助。 总之,通过对iBatis 2.3.0.677源码的分析,我们可以掌握其设计理念...