iBatis

  • iBATIS一词来源于“internet”和“abatis”的组合。
  • 是一个基于SQL映射支持Java和·NET的持久层框架。
  • 是一种轻量级的对象关系映射(ORM)框架。
  • 是一种“半自动化”的ORM实现。

iBatis.NET

重要配置文件
  • Providers.config:数据库连接驱动配置文件,我们主要用 SQLServer 数据库连接驱动
  • Mapper.xml:例如: DataPermissions.xml,定义 SQL 语句和结果集映射关系
  • SqlMap.config:统一管理数据库连接驱动、连接信息、Mapper 文件列表
  • Database_***.Config 文件:存储数据库的连接信息

各文件示例:



‘ # ’和‘ $ ’什么区别?为什么‘ $ ’有 SQL 注入风险?

$不会进行类型匹配,仅仅是替换,#号会进行类型匹配,会转化成相应的数据类型。这
样的话,直接替换就会存在被注入的风险 。

Dao 接口中的方法为什么必须和 SqlMapper 文件中的 SqlID 保持一致?

组件采用了代理模式动态生成的代码实现,内部根据方法名获取的 id。

  • 需要注意,大小写敏感,而且对类型也敏感。若 SQL 没有返回值(如 insert), dao层定义了非 void 类型,会报错。
如何将泛型循环遍历至SQL中

使用iterate
例如:

<iterate conjunction=";" open="" close="" property="ListForInsert">INSERT INTO [table] ( [ID] ) VALUES ( #ListForInsert.ID#)
</iterate>
实现一个分页查询功能拼接语句

子句:

<!--分页前缀-->
<sql id="PagePrefix">FROM (SELECT ROW_NUMBER() OVER(ORDER BY
</sql>
<!--分页中缀-->
<sql id="PageInfix">) AS ROW_NUM,
</sql>
<!--分页后缀-->
<sql id="PageSuffix">) AS TABLEDATA<dynamic><isNotNull property="Page"><isNotNull property="Rows">WHERE ROW_NUM BETWEEN ($Page$-1)*$Rows$+1 AND ($Page$-1)*$Rows$+$Rows$</isNotNull></isNotNull></dynamic>
</sql>

使用:

<select id="Get" resultMap="InfoMap" parameterClass="Dto">SELECT[Table_ID],[Table_State] ,[Table_ShopID]<include refid="PagePrefix"></include>[Table_State] ASC<include refid="PageInfix"></include>[Table_ID] ,[Table_State] ,[Table_ShopID]FROM [Table] WITH(NOLOCK)WHERE DelFlag ='0'<isNotEmpty prepend="AND" property="ID">[Table_ID] = #ID#</isNotEmpty><isNotEmpty prepend="AND" property="State">[Table_State] = #State#</isNotEmpty><isNotEmpty prepend="AND" property="ShopID">[Table_ShopID] = #ShopID#</isNotEmpty><include refid="PageSuffix"></include>
</select>
如何处理对xml和代码特殊字符的混淆

使用CDATA
示例:

<!-- 避免XML注释中的‘<’与SQL中做比较的‘<’ 混淆 -->
<![CDATA[
CASE
WHEN [RPSE_StartTime] < GETDATE() AND [RPSE_EndTime] > GETDATE() THEN 2
WHEN [RPSE_EndTime] < GETDATE() THEN 3
WHEN [RPSE_StartTime] > GETDATE() THEN 1
ELSE 0
END
]]> AS ActivityState
如何多层嵌套子查询

resultMap 中嵌套子查询语句

<resultMaps><resultMap id="MemberExclusivePriceActivityAllInfoMap" class="MembersPriceActivityAllInfoVM"><result property="ID" column="SABI_ID"/><result property="CityList" column="RPSE_ID=SABI_ID" select="GetRedPacketActivityCitysSubquery"/><result property="GoodsTypeList" column="RPSE_ID=SABI_ID" select="GetRedPacketActivityGoodsTypesSubquery"/><result property="GoodsList" column="SABI_ID=SABI_ID" select="GetMembersPriceAcitivityGoodsSubquery"/><result property="MemberList" column="SABI_ID=SABI_ID,SABI_ShopID=SABI_ShopID" select="GetMemberExclusivePriceActivityMembersSubquery"/></resultMap>
</resultMaps>

子查询语句用HashMap接受参数值

<select id="GetMemberExclusivePriceActivityMembersSubquery" resultMap="MemberListMap" parameterClass="HashMap">
</select>
填写参数类型

入参为string类型:

<select id="GetRedPacketActivityCitys" resultMap="CityListMap" parameterClass="string">
</select>
<select id="GetRedPacketActivityCitys" resultMap="CityListMap" parameterClass="String">
</select>

入参为自定义实体类:

<alias><typeAlias alias="GetRedPacketSharingActivityDto" type="Teld.EC.Mall.Promotion.SPI.GetRedPacketSharingActivityDto,Teld.EC.Mall.Promotion.SPI"/>
</alias>
<statements><select id="GetRedPacketSharingActivityAllInfo" resultMap="RedPacketSharingActivityAllInfoMap" parameterClass="GetRedPacketSharingActivityDto"></select>
</statements>

入参为泛型:

<select id="UpdateRedPacketActivityGoodsTypes" parameterClass="list">
</select>

入参为键值对类型:

<select id=""  resultMap="" parameterClass="System.Collections.IDictionary">
</select>

map中嵌套select传参:

<select id="GetRedPacketListByActivitySubquery" resultMap="PersonRedPackeListMap" parameterClass="HashMap">
</select>
常用的判断类的SQL拼接标签
<dynamic prepend="where"><isNotEmpty prepend="AND" property="Type">[AS_Type]=#Type#</isNotEmpty><isNotNull prepend="AND" property="Type">[AS_Type]=#Type#</isNotNull ><isEqual property="UserType" compareValue="1" prepend="AND"></isEqual><isEqual property="UserTypeA" compareProperty="UserTypeB" prepend="AND"></isEqual><isNotEmpty  property="CityID"><isNotEqual prepend="and"  property="CityID" compareValue="*">BGO_CityID = #CityID# </isNotEqual></isNotEmpty></dynamic>
入参为单纯的 list< string > 时,无成员名称

C#-iBatis.NET使用小结相关推荐

  1. spring+springmvc+ibatis整合小结

    最近在整合Spring和ibatis时,不管applicationContext.xml放在哪儿,在web.xml中怎么配置,tomcat启动时始终报applicationContext.xml的错. ...

  2. ibatis转成Mybatis问题小结

    在数据层ibatis转换成mybatis的时候,遇到了点问题. 区别1: ibatis的结构是Service->ServiceImpl->Dao->DaoImpl->Domai ...

  3. IbatisNet开发使用小结

    一. 介绍 平常做企业级应用,需求变化是经常的事,而很多基础代码重复也是很让人头疼的问题.所以很多人会使用一些ORM框架来增强项目的可维护性.可扩展性.IBatis.Net就是一个比较易用的ORM框架 ...

  4. ibatis mysql 配置文件详解_MyBatis Generator 配置文件详解

    MyBatis Generator (MBG) 是由一个XML配置文件驱动的.这个配置文件中会声明以下内容: 如何连接数据库 要生成什么对象,以及如何生成它们 哪些表需要应用于对象生成. 根元素 ge ...

  5. iBatis.Net实现返回DataTable和DataSet对象

    如题.要返回一个ADO.NET对象好像没有使用ORM的必要,而且从编程的角度看这样的实现一点也不OO,但是实际的开发场景中还是会碰到这种需求的.下面我就借鉴前人的经验,结合实际的示例,再总结一下.如果 ...

  6. iBATIS In Action:执行非查询语句(二)

    本章内容包括 iBATIS API的更多内容 插入数据 更新和删除数据 使用存储过程 5.3 更新和删除数据 至此,我们已经学习了如何向数据库插入数据以及获取相应记录的键值,再来看看如何更新和删除数据 ...

  7. iBATIS In Action:使用映射语句(二)

    为IDictionary,则property是相应key的名称.同一property值可以出现多次,这取决于它在语句中出现的次数. column 用于定义存储过程的参数名称. direction 可用 ...

  8. mybatis plus当月数据查询_mybatis plus的3种查询方式(小结)

    本文是基于springboot框架下的查询. 一:基本配置: 1.仓库依赖 alimaven aliyun maven http://maven.aliyun.com/nexus/content/gr ...

  9. 启动报错:Caused by: org.apache.ibatis.binding.BindingException汇总解决

    报错 Springboot启动时从nacos拉取配置.启动报错: Caused by: org.apache.ibatis.binding.BindingException: Invalid boun ...

最新文章

  1. 常用Linux命令(续)
  2. 4698: Sdoi2008 Sandy的卡片
  3. python3 打印对象的全部属性
  4. mysql8区分大小写_mysql8 参考手册--区分大小写
  5. jetty部署多个web应用及将jetty配置成服务
  6. bin文件编辑_为MediaWiki安装可视化编辑器VisualEditor
  7. Swing超市收银系统附图
  8. 遇到local variable ‘e‘ referenced before assignment这样的问题应该如何解决
  9. python中series是什么_pandas中的series数据类型详解
  10. IDEA格式化HTML页面
  11. 安装tensorflow踩的那些坑
  12. 清除Chrome浏览器的历史记录、缓存
  13. Python 自除数
  14. (20201209已解决)从window访问wsl地址
  15. Cadence学习三:如何快速的建立artwork层?
  16. LLVM IR转CFG
  17. 批处理文件*.bat打开后闪退的处理方法
  18. 未来的世界是,方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!
  19. Appium统计iOS或者Android应用的性能
  20. mysql时间和时间戳转换工具_时间戳转换工具

热门文章

  1. WINDOWS7 安装node最新版本成功
  2. 数据采集仪的优势及应用,打破传统信息采集终端弊端
  3. insightfacde 算法学习
  4. 人工智能行业市场分析
  5. udec采场开挖教程_基于UDEC的岩质边坡开挖爆破节点拟静力稳定性计算方法
  6. c#生成图片、生成二维码、读取excel、自动匹配路径
  7. fitnesse二次开发-项目部署
  8. 【财务分析】用友专用方案:预设分析模型、对标上市公司
  9. lis双工常见设置!
  10. c语言两位共阴数码管00,两位数码管动态显示C语言程序