这一章我们主要介绍一下IbatisNet里面的动态sql语句的运用,比如有时候我们想进行模糊查询,参数是动态加入的。或者要实现top n ,order by ,分页等功能的时候,我们就不得不用动态拼接sql语句。

好了,下面我们就用一个小例子来说明一下如何使用IbatisNet的动态sql。

首先看下面的配置文件,然后我再讲解这些配置节点的含义。

 <?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Classes" xmlns="http://ibatis.apache.org/mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<!--配置你的实体类的别名,一般的都是一个实体类对应一个xml-->
<alias>
<typeAlias alias="classes" type="Model.Calsses,Model" />
</alias> <!--找到你的实体类与数据库字段的对应关系,如果数据库字段与实体类一样 这个可以省略不要--> <resultMaps>
<resultMap id="SelectAllResult" class="classes">
<result property="Id" column="calsses_id" />
<result property="Name" column="classes_name" />
<result property="Description" column="classes_description" />
</resultMap>
</resultMaps>
<!--切记这里不能再起别名,比如 calsses_id as Id等,这样它会报异常。因为在这里它会根据上面自动对应(只限返回值为SelectAllResult)-->
<statements>
<select id="SelectAllClasses" resultMap="SelectAllResult" parameterClass="classes">
select calsses_id,
classes_name,
classes_description
from calsses WHERE =
<dynamic prepend="and">
<isParameterPresent>
classes_name like '%$Name$%'
</isParameterPresent>
</dynamic>
<dynamic prepend="and">
<isParameterPresent>
classes_description like '%$Description$%'
</isParameterPresent>
</dynamic>
order by calsses_id desc
</select>
<delete id="DeleteClassByname" parameterClass="string">
delete calsses
where calsses_id=
<dynamic prepend="or">
<isNotNull>
classes_name=#Name#
</isNotNull>
</dynamic>
</delete>
</statements>
</sqlMap>

xml配置

<dynamic>节点是条件的开始节点,你可以在里面配置的条件,prepend属性表示你要用的连接符比如:and,or等…………property属性表示你的参数。

完整的结构如下:

<dynamic  prepend ="字符串(and or等)">

<关键字 property="判断条件的对象属性名" compareValue="如果是属性关键字是比较条件时,字符串存放要比较的值">

要显示的条件名

</关键字>

</dynamic>

下面主要列表一下常用的关键字:

关键字                                                   含义

<isEqual>                                             参数等于值
                 <isNotEqual>                                          参数不等于值
                 <isGreaterThan>                                       参数大于值
                 <isGreaterEqual>                                      参数大于等于值
                 <isLessEqual>                                         参数小于等于值
                 <isPropertyAvailable>                                 参数被使用
                 <isNotPropertyAvailable>                              参数没有使用
                 <isNull>                                              参数 is null
                 <isNotNull>                                           参数 is not null
                 <isEmpty>                                             参数为空
                 <isNotEmpty>                                          参数不为空
                 <isParameterPresent>                                  参数类不为NULL
                 <isNotParameterPresent>                               参数类为NULL

好了 ,这一章就介绍到这儿,关于动态sql比较简单,多练习一下估计就差不多了(如果想更深入的理解可以自己查看一下框架的源码)。下一章我们将介绍一下Ibatisnet如何返回DataTable,DataSet。

源码下载地址:http://download.csdn.net/detail/woaixiaozhi/5835671

跟初学者学习IbatisNet第三篇的更多相关文章

  1. 跟初学者学习IbatisNet第四篇

    这一章我们主要介绍一下IbatisNet里面的其它用法主要有以下几点: 1,如何得到运行时ibatis.net动态生成的SQL语句? 2,如何获取DbCommand? 3,如何返回DataTable, ...

  2. 跟初学者学习IbatisNet第二篇

    在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程. 我们一般把存储过程分为两种 ...

  3. RabbitMQ学习总结 第三篇:工作队列Work Queue

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  4. 学习KnockOut第三篇之List

    学习KnockOut第三篇之List 欲看此篇---------------------------------------------可先看上篇.          第一步,先搭建一个大概的框架起来 ...

  5. 我们一起学习WCF 第三篇头消息验证用户身份

    前言:今天我主要写的是关于头消息的一个用处验证用户信息 下面我画一个图,可以先看图 第一步:我们先开始做用户请求代码 首先:创建一个可执行的上下文对象块并定义内部传输的通道 using (Operat ...

  6. Egret入门学习日记 --- 第三篇 (书中 3.4 内容)

    第三篇 (书中 3.4 内容) 今天还是要把昨天项目运行后,EXML文件里的界面没有出现的问题解决了才行. 去了群里,没人回.去了官网看文档,看不懂. 不过倒是看到了一个好东西: 还挺便宜啊,一个月要 ...

  7. 跟初学者学习IbatisNet第一篇

    写在前面的话:我自己也是一个初学者,写这个专题只是为了对学过知识的巩固,如果有什么不对的地方,欢迎大家指正…………………… 第一篇就简单介绍一下什么是IbatisNet,然后写一个简单的Demo,在后 ...

  8. JavaWeb学习总结第三篇--走进JSP页面元素

    JavaWeb学习(三)—走进JSP页面元素 JSP:Java Server Pages,译为Java服务器页面.其脚本采用Java语言,继承了Java所有优点.JSP元素可以分为指令元素.脚本元素和 ...

  9. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

随机推荐

  1. AtCoder Regular Contest 076 E - Connected?

    题目传送门:https://arc076.contest.atcoder.jp/tasks/arc076_c 题目大意: 给定一个\(R×C\)的矩阵,然后给定\(N\)对点,每对点坐标为\((X_{ ...

  2. python programming

    1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list

  3. Backbone学习记录(7)

    事件委托 <form> <input type="text" class="txt"> <input type="but ...

  4. scau 1144 数星星 bit + 扫描线的思想

    这题如果用二维树状数组,则会直接爆内存. 那么可以运用扫描线的思路. 就是,它同时被x和y限制了,那么可以在查询的时候,确保x先满足了,(把x按小到大排序) 然后就相当于是关于y的一个一维bit了, ...

  5. 从零开始docker部署flask

    1.下载一个Ubuntu镜像 2.启动镜像,使用apt-get安装python.安装pip,建议也装个vim吧 3.通过以上的容器生成一个新的镜像,命令如下docker commit afcaf46e ...

  6. 【转】Java泛型方法

    1. 定义泛型方法 (1) 如果你定义了一个泛型(类.接口),那么Java规定,你不能在所有的静态方法.静态初块等所有静态内容中使用泛型的类型参数.例如: public class A<T> ...

  7. JS进阶-特殊形式的函数-返回函数的函数/重写自己的函数

    返回函数的函数 // 返回函数的函数 function a() { alert("aa"); return function () { alert("bb"); ...

  8. java实现单向链表的增、删、改、查

    单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...

  9. flask_SQLAlchemy 中常用的过滤和执行器

    常用的SQLAlchemy查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的 ...

  10. WPF知识点全攻略01- WPF相对WinFrom的优缺点

    对比WPF和WinFrom前,先来了解下GUI现阶段在用的其他一些开发技术: MFC:微软基础类库,以C++的形式封装了Windows API,加上一些实用工具类. QT:奇趣科技开发的跨平台C++图 ...