iBatis.Net 动态查询

动态查询

iBatis.Net提供查询的灵活性主要体现在支持动态查询上,即可以动态的生成SQL语句。也只有掌握好动态查询,才能充分的感受iBatis框架所带来的便捷和高效。这也是很多软件公司和开发人员选择该框架的重要原因。

在开发中经常遇到这种查询,当用户没有输入查询条件时查询所有记录,如果用户输入了查询条件将根据查询条件进行查询。比如上面提到的条件查询,如果没有输入用户名信息将返回所有用户信息。这个时候就需要用到动态查询,根据参数值是否为空,生成两条不同的SQL语句。XML数据映射配置信息为:

 

<selectid="SelectSysuserDynamic1"parameterClass="System.Collections.IDictionary"resultMap="SysuserResult">

<![CDATA[ SELECT * FROM DEAN.SYSUSER ]]>

<dynamicprepend="WHERE">

<isNotEmptyprepend="AND"property="LOGINNAME">

<![CDATA[ LOGINNAME = #LOGINNAME# ]]>

</isNotEmpty>

</dynamic>

</select>

dynamic元素用来区分SQL语句的动态部分,dynamic是一个可选项,它中间可以包含任意数据的条件元素。上面的配置信息会根据输入参数LOGINNAME的值是否为空生成两条SQL语句。如果为空SELECT * FROM DEAN.SYSUSER,如果不为空SELECT * FROM DEAN.SYSUSER WHERE LOGINNAME = #LOGINNAME#。

调用程序代码为:

protectedvoid Button3_Click(object sender, EventArgs e)

{

//动态查询1

try

{

Hashtable hash = newHashtable();//声明哈希表

hash.Add("LOGINNAME", TextBox2.Text); //获取查询参数用户名

ISqlMapper mapper = Mapper.Instance(); //得到ISqlMapper实例

IList<iBatisTest.Domain.Sysuser> plist = mapper.QueryForList<iBatisTest.Domain.Sysuser>("Test3Map.SelectSysuserDynamic1", hash);//调用QueryForList方法

if (plist != null && plist.Count > 0)

{

GridView1.DataSource = plist;

GridView1.DataBind();

}

Label1.Text = "动态查询1成功";

}

catch (Exception ex)

{

Label1.Text = ex.Message;

}

}

}

在iBatis.Net中,动态查询的条件元素包含以下几种:二元条件元素、一元条件元素和其他条件元素:

posted @ 2014-05-04 15:27  Artemis29  阅读(363)  评论(0编辑  收藏  举报