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
分享到:
相关推荐
样一些日子:您编写了许多包含逻辑方法的类,这些方法会将 Java 对象内的数据映射到关系 数据库管理系统 (RDBMS)内的数据或从 RDBMS 内的数据映射到 Java 对象内的数据。而现在,对于大多数情 况,这种人工...
ibatis 实例配置 一个典型的配置文件如下(具体配置项目的含义见后): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS....
ibatis入门与ibatis迭代的用法
ibatis3.0中in的用法ibatis3.0中in的用法ibatis3.0中in的用法ibatis3.0中in的用法
iBATIS缓存的使用方法
iBATIS是一种“半自动化”的ORM实现。 所谓“半自动”,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从 POJO 到数据库表的全套映射机制。...
将NPetShop的例子下载好之后,由于原来是基于VS2003的版本,在本地用VS2005打开后编译、运行时有一些问题,主要问题和解决方法如下: 1、转换成VS2005的版本 a、直接打开NPetshop.sln文件,按提示一直点击"下一步...
本资源包括两个部分的源码,ibaits和mybaits的源码,都是采用普通java框架实现练习的朋友可以下载来用用
iBatis Web用法实例工程
比较全面的介绍了Ibatis,是入门的比较经典的文档
ibatis.net Tutorial ibatis.net 指导 用法
ibatis: dynamic 使用方法
书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...
比如考虑在iBatis: SQL Maps中的应用例子。这是一个Struts应用允许对一个关系表执行SELECT, INSERT, UPDATE和DELETE的SQL请求。在这个应用中,使用SQL Maps做持续性框架。现在我们要修改这个应用,将这个关系表储存...
自己整理的非常好用 好东西向大家分享 └ ^o^ ┘
ibatis 数据缓存,讨论了ibatis 数据缓存方面的概念,即用法,用到ibatis 数据缓存的可以参考一下
本工程用于研究Ibatis和MySQL结合使用的方法 本工程编码方式:UTF-8 须执行的SQL语句: CREATE DATABASE `test`; USE `test`; DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` char(36) NOT NULL...
可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...
通过本示例的学习,初学者可轻松掌握ibatis框架的基本使用方法与基本技能
iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,这是一个...