iBatis.Net系列(九)-动态sql

能执行sql语句并并没有什么特别的,对于下面2条sql语句
select * from Student where id=14
select * from Student where id=14 and name=‘张三‘
这2条sql语句前半部分是相同的,如果按照以前的话,我们得写2个xml配置节点,
现在我们只需要这样写
<select id="SelectStudent" parameterClass="Student" resultClass="Student">
select * from student
<dynamic prepend="where">
<isGreaterThan property="Id" prepend="and" compareValue="0">
Id=#Id#
</isGreaterThan>
<isNotEmpty property="Name" prepend="and">
Name=#Name#
</isNotEmpty>
</dynamic>
</select>
1 dynamic节点是个动态节点,表示里面的内容可有可无,如果里面有内容的话在内容前加where,这就是prepend属性的作用
2 isGreaterThan节点:拿属性Id(property="Id")跟0(compareValue="0")做比较,如果大于0则该节点会生成 and Id=#Id#(当然在编译的时候发现前面有where,又会去掉and)
3 isNotEmpty节点:如果Name属性不为null或"",该节点会生成 and Name=#Name#

我们写一个这样的方法
public IList<Student> Select()
{
return mapper.QueryForList<Student>("SelectStudent",this);
}
当我们这样调的时候
1 IList<Student> list = new Student().Select(); //select * from student
list就是数据库中所有数据记录
2 IList<Student> s = new Student() { Id = 15 }.Select(); //select * from student where Id=15
查询的id=15的记录
3 IList<Student> s = new Student() { Id = 15, Name="张三" }.Select(); //select * from student where Id=15 and Name=‘张三‘
查询的是id=15 and Name=‘张三‘的信息

而更新可以这样写
<update id="UpdateStu" parameterClass="Student">
   update Student
<dynamic prepend="set">
<isNotEmpty prepend="," property="Name">
   Name=#Name#
</isNotEmpty>
<isNotEmpty prepend="," property="Sex">
   Sex=#Sex#
</isNotEmpty>
</dynamic>
   where Id=#Id#
</update>
这样就可以根据不同的对象属性生成不同的sql语句了
这样的动态节点还有很多
<isEqual></isEqual> 等于某个值的时候执行
<isLessEqual></isLessEqual> 小于等于某个值的时候执行
<isGreaterEqual></isGreaterEqual> 大于等于某个值的时候执行
....
其他的根据xsd的提示和英文的意思来猜,不会错的.

tips:如果数据库的字段大小写与程序中对象的大小写不一致的话可能返回的信息映射不成功哦.

时间: 2024-08-14 08:42:00

iBatis.Net系列(九)-动态sql的相关文章

iBatis.Net系列(七)-执行sql语句

前面几节中,我们在Student.xml文件中配置了2条简单的sql语句,那么在程序中怎么使用呢?IBatis给我们封装了Mapper类,这个类的一个静态方法Instance()返回了一个ISqlMapper接口,这个接口将会是我们后期调用sql语句的入口 public class Student { public int Id { get; set; } public string Name { get; set; } public string Sex { get; set; } publi

深入浅出Mybatis系列(九)---强大的动态SQL(转载)

原文出处:http://www.cnblogs.com/dongying/p/4092662.html 上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis强大的动态SQL. 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Myba

深入浅出Mybatis系列(九)---强大的动态SQL

原文地址:http://www.cnblogs.com/dongying/p/4092662.html 上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis强大的动态SQL. 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Myba

ibatis 动态SQL

直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子: <select id="getUserList" resultMap="user"> select * from user <isGreaterThan prepend=

MyBatis系列:(5)动态SQL

1.动态SQL操作之查询 查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL     <select id="dynamicFind" parameterType="map" resultMap="empMap">         select emp_id,emp_name,emp_sal from emp         <where>             <if test="pid 

IBatis.net动态SQL语句

在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id="SelectPersonById" resultMap="Person" parameterClass="Int32" > SELECT * FROM Person WHERE Id = #Id# --这样传入一个参数 </select>

MyBatis系列目录--4. MyBatis别名、字段冲突、动态sql、日志、xml其他组件等若干优化

一.mybatis执行日志 加入log4j/logback能看到mybatis更详细的执行情况,以logback为例子 Xml代码   <logback.version>1.0.13</logback.version> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${l

SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据

转自:http://www.cnblogs.com/beniao/archive/2011/03/22/1989310.html 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC规范.KML规范)的

iBatis动态SQL标签用法

1.动态SQL片段 通过SQL片段达到代码复用 <!-- 动态条件分页查询 -->         <sql id="sql_count">                 select count(*)         </sql>         <sql id="sql_select">                 select *         </sql>         <sql i