动态查询
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中,动态查询的条件元素包含以下几种:二元条件元素、一元条件元素和其他条件元素: