加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

IBatis.Net 老技术新研究

发布时间:2020-12-16 08:51:03 所属栏目:asp.Net 来源:网络整理
导读:我们现在用的数据访问组件封装了IBatis.Net框架,提供了标准的数据访问接口和服务。正好总结一下老技术IBatis.Net 在进行实际的数据访问开发之前,我们先了解一下:IBatis.Net中几个重要的配置文件和一些关键的技术原理: 4个重要的配置文件: Providers.con

我们现在用的数据访问组件封装了IBatis.Net框架,提供了标准的数据访问接口和服务。正好总结一下老技术IBatis.Net
在进行实际的数据访问开发之前,我们先了解一下:IBatis.Net中几个重要的配置文件和一些关键的技术原理:
4个重要的配置文件:

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

关键的技术特性

  1. IBatis是一个半自动化的ORM框架,支持多种业界主流的数据库,支持开发人员写SQL,这样开发人员就可以写出尽可能优化的SQL
  2. SqlMapper文件中主要包含alias类别名,ResultMaps结果集映射,Statements各类SQL语句
  3. SqlMapper文件中,实体类的属性对应ResultMap中的Property,实体类的属性同时对应数据库表中的Column
  4. IBatis中的SqlMapper文件中,#代表SQL绑定;$代表SQL拼接,有SQL注入风险,不建议使用
  5. 基于Castle的代理类技术,支持Dao接口,Dao接口中的方法必须和SqlMapper文件中的SqlID保持一致。这样DaoService在构造Dao接口的代理实现类时才可以定位到指定的SQL,然后执行。
  6. 支持批量SQL操作,例如Insert、Update和Delete
  7. 支持返回一对多,多对多关联结果集
  8. 支持数据库事务
  9. 支持数据缓存:全局缓存和会话缓存

开发一个数据访问的业务功能,主要有以下4个步骤:

  1. 梳理好业务需求,定义接口;
  2. 定义IBatis Mapper文件,根据接口的方法一一实现SQL语句;
  3. 设置好数据库连接,将IBatis Mapper文件的路径添加到SqlMap配置文件中;
  4. 调用DaoService,获取接口的实现,访问数据库。

示例几个关键的写法
1. 一对多关系,批量Insert

 1   <insert id="SaveDomainModel" parameterClass="DomainModel">
 2       begin
 3       INSERT INTO Meta_DomainModel(ID,Name,RootDomainObjectID,IsCache,CacheStrategy,IsLogicallyDeleted,DataLoaderConfig,Version,Creator,LastModifier)VALUES(
 4       #ID#,#Name#,#RootDomainObjectID#,#IsCache:VarChar#,#CacheStrategy#,#IsLogicDelete:VarChar#,#DataLoaderConfig#,#Version#,#Creator#,#LastModifier#)
 5       iterate conjunction=" " open="" close  property="DomainObjects" 6         INSERT INTO Meta_DomainObject(ID,DomainModelID,IsRootObject,ParentObjectID,ClazzReflectType,PropertyName,IsLazyLoad,DataObjectID,LastModifier)
 7         VALUES(#DomainObjects[].ID#,#DomainObjects[].Name#,#DomainObjects[].DomainModelID#,#DomainObjects[].IsRootObject:VarChar#,#DomainObjects[].ParentObjectID#,#DomainObjects[].ClazzReflectType#, 8         #DomainObjects[].PropertyName#,#DomainObjects[].IsLazyLoad:VarChar#,#DomainObjects[].DataObjectID#,#DomainObjects[].Creator#,#DomainObjects[].LastModifier#)
 9       </iterate10       end;
11     insert>

2. 简单批量Insert插入

 1     ="SaveDomainObjectElements"="ArrayList" 3       =""         INSERT INTO Meta_DomainObjectElement(ID,Alias,DisplayName,DomainObjectID,DataType,Length,Precision,DefaultValue,IsAllowNull,ElementType,DataColumnID,1)"> 5         PropertyType,IsForQuery,1)">        VALUES(#[].ID#,#[].Name#,#[].Alias#,#[].DisplayName#,#[].DomainObjectID#,#[].DataType#,#[].Length#,#[].Precision#,#[].DefaultValue#,#[].IsAllowNull:VarChar#,#[].ElementType#,#[].DataColumnID#,1)">        #[].PropertyType#,#[].PropertyName#,#[].IsForQuery:VarChar#,#[].Creator#,#[].LastModifier#)
 8        9 10     >

3. 查询一对多结果集

resultMap ="DataObjectResultMap" class="DataObject" groupby="ID" 2       result property="ID" column="ID" />
="Name"="Name"  4       ="Descriptions"="Descriptions" ="DataSourceName"="DataSourceName"  6       ="LogicTableName"="LogicTableName"  7       ="IsTableSharding"="IsTableSharding" ="IsDatabaseSharding"="IsDatabaseSharding" ="TableShardingStrategyID"="TableShardingStrategy" 10       ="DatabaseShardingStrategyID"="DatabaseShardingStrategy" 11       ="IsView"="IsView" 12       ="IsLogicallyDeleted"="IsLogicallyDeleted" 13       ="Version"="Version" 14       ="Columns" resultMapping="MetadataMapper.DataColumnResultMap"></result15       ="Creator"="Creator" 16       ="CreateTime"="CreateTime" 17       ="LastModifier"="LastModifier" 18       ="LastModifyTime"="LastModifyTime" 19     resultMap20     ="DataColumnResultMap"="DataColumn"21       ="C_ID" 22       ="ColumnName"="ColumnName" 23       ="DisplayName"="DisplayName" 24       ="DataObjectID"="DataObjectID" 25       ="DataTypeID"="DataType" 26       ="Length"="Length" 27       ="Precision"="Precision" 28       ="DefaultValue"="DefaultValue" 29       ="IsNullable"="IsNullable" 30       ="IsPkColumn"="IsPkColumn" 31       ="IsSystem"="IsSystem" 32       ="IsShardingColumn"="IsShardingColumn" />      
33       ="ColumnOrder"="ColumnOrder" 34       ="C_Creator" 35       ="C_CreateTime" 36       ="C_LastModifier" 37       ="C_LastModifyTime" 38     39   

对应的Select 语句

1     select ="GetDataObject" resultMap="string"2       SELECT Meta_DataObject.ID,Meta_DataObject.Name,Descriptions,DataSourceName,LogicTableName,IsTableSharding,IsDatabaseSharding,TableShardingStrategy,DatabaseShardingStrategy,IsView,Meta_DataObjectColumn.Creator,Meta_DataObjectColumn.LastModifier,Meta_DataObjectColumn.CreateTime,Meta_DataObjectColumn.LastModifyTime,1)">3       Meta_DataObjectColumn.ID as C_ID,ColumnName,IsNullable,IsPkColumn,IsShardingColumn,IsSystem,ColumnOrder,1)">4       Meta_DataObjectColumn.Creator as C_Creator,Meta_DataObjectColumn.LastModifier as C_LastModifier,Meta_DataObjectColumn.CreateTime as C_CreateTime,Meta_DataObjectColumn.LastModifyTime as C_LastModifyTime
5       FROM Meta_DataObject
6       LEFT JOIN Meta_DataObjectColumn on Meta_DataObjectColumn.DataObjectID = Meta_DataObject.ID
7       WHERE Meta_DataObject.ID=#id#
8     select>

4. 批量删除多张表

1    delete ="DeleteShardingStrategy"      DELETE FROM Meta_ShardingColumn WHERE ShardingStrategyID=#id#
      DELETE FROM Meta_ShardingStrategy WHERE ID=#id#
6     delete>

5. 删除指定数据

1  ="DeleteShardingColumns"      DELETE FROM Meta_ShardingColumn WHERE DataObjectID=#id#
3     >

6. 查询数据行数

1 ="IsTaskExist" resultClass="int"      SELECT COUNT(1) FROM TableTask WHERE name=#Name#
>

以上就是一些简单的IBatis.Net总结。

?

周国庆

2017/10/14

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读