分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

IBatis.Net 老技术新研究

发布时间:2023-09-06 01:17责任编辑:赖小花关键词:暂无标签

我们现在用的数据访问组件封装了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,Name,DomainModelID,IsRootObject,ParentObjectID,ClazzReflectType,PropertyName,IsLazyLoad,DataObjectID,Creator,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 ??????</iterate>10 ??????end;11 ????</insert>

2. 简单批量Insert插入

 1 ????<insert id="SaveDomainObjectElements" parameterClass="ArrayList"> 2 ??????begin 3 ??????<iterate conjunction=" " open="" close="" > 4 ????????INSERT INTO Meta_DomainObjectElement(ID,Name,Alias,DisplayName,DomainObjectID,DataType,Length,Precision,DefaultValue,IsAllowNull,ElementType,DataColumnID, 5 ????????PropertyType,PropertyName,IsForQuery,Creator,LastModifier) 6 ????????VALUES(#[].ID#,#[].Name#,#[].Alias#,#[].DisplayName#,#[].DomainObjectID#,#[].DataType#,#[].Length#,#[].Precision#,#[].DefaultValue#,#[].IsAllowNull:VarChar#,#[].ElementType#,#[].DataColumnID#, 7 ????????#[].PropertyType#,#[].PropertyName#,#[].IsForQuery:VarChar#,#[].Creator#,#[].LastModifier#) 8 ??????</iterate> 9 ??????end;10 ????</insert>

3. 查询一对多结果集

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

对应的Select 语句

1 ????<select id="GetDataObject" resultMap="DataObjectResultMap" parameterClass="string">2 ??????SELECT Meta_DataObject.ID,Meta_DataObject.Name,Descriptions, DataSourceName, LogicTableName, IsTableSharding, IsDatabaseSharding, TableShardingStrategy,DatabaseShardingStrategy,IsView,IsLogicallyDeleted,Version,Meta_DataObjectColumn.Creator,Meta_DataObjectColumn.LastModifier,Meta_DataObjectColumn.CreateTime,Meta_DataObjectColumn.LastModifyTime,3 ??????Meta_DataObjectColumn.ID as C_ID,ColumnName,DisplayName,DataObjectID,DataType,Length,Precision,DefaultValue,IsNullable,IsPkColumn,IsShardingColumn,IsSystem,ColumnOrder,4 ??????Meta_DataObjectColumn.Creator as C_Creator,Meta_DataObjectColumn.LastModifier as C_LastModifier,Meta_DataObjectColumn.CreateTime as C_CreateTime,Meta_DataObjectColumn.LastModifyTime as C_LastModifyTime5 ??????FROM Meta_DataObject6 ??????LEFT JOIN Meta_DataObjectColumn on Meta_DataObjectColumn.DataObjectID = Meta_DataObject.ID7 ??????WHERE Meta_DataObject.ID=#id#8 ????</select>

4. 批量删除多张表

1 ???<delete id="DeleteShardingStrategy" parameterClass="string">2 ??????begin3 ??????DELETE FROM Meta_ShardingColumn WHERE ShardingStrategyID=#id#4 ??????DELETE FROM Meta_ShardingStrategy WHERE ID=#id#5 ??????end;6 ????</delete>

5. 删除指定数据

1 ?<delete id="DeleteShardingColumns" parameterClass="string">2 ??????DELETE FROM Meta_ShardingColumn WHERE DataObjectID=#id#3 ????</delete>

6. 查询数据行数

1 <select id="IsTaskExist" resultClass="int" parameterClass="string">2 ??????SELECT COUNT(1) FROM TableTask WHERE name=#Name#3 ????</select>

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

周国庆

2017/10/14

IBatis.Net 老技术新研究

原文地址:http://www.cnblogs.com/tianqing/p/7668850.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved