在用iBatis.net与数据库打交道的过程中,发现iBatis.net拼接字符串不能直接拷贝然后在dbms里执行(获取runtime时的sql语句都是带@param1,@param2,@param3,...这样的形式)。有时候sql语句一个小小的标点(都怪自己学艺不精,呵呵)都会造成执行错误。其实,直接手写的sql字符串也可以通过iBatis来执行,而且支持select,insert,delete,update和存储过程。下面通过一段简单的代码来说明如何使用iBatis.net直接执行sql语句。
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Person.xml的方法对应的配置文件如下:
< statement id ="ExecuteSelectSql" parameterClass ="string" remapResults ="true" resultMap ="SelectAllResult" >
sqlsql
</ statement >
注意:
1、如果你没有设置remapResults="true",测试时你会发现,尽管你传入的sql语句虽然不同,但总是执行返回第一次传入的sql语句的结果。原因就是iBatis.net的缓存设置在起作用,所以,一定要设置remapResults="true"。
2、sqlsql的写法是安全的写法,<![CDATA[ sqlsql ]]>也比较常见,但是#sql#的写法可能自动生成'',sql语句就会有问题。所以最保险的方式就是采取sqlsql的写法。
ps:示例使用iBatis.net直接成功执行select和insert操作。里面有一个分页的小功能。是笔者花了一天时间测试通过(就是常见的select top 方式),扩展性不是很好,但是很实用,而且很好调试,希望对你有帮助。
分页部分代码:
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
查询条件和sql拼接部分代码:
1、查询基类
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
2、实际查询类
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
在页面中的调用:
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
页面的cs代码:
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
最后,希望您能给出改进意见和建议。
本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/10/26/1512550.html,如需转载请自行联系原作者