一、各个配置文件的作用说明

  providers.config:指定数据库提供者,.Net版本等信息。

  xxxxx.xml:映射规则。

  SqlMap.config:大部分配置一般都在这里,如数据库连接等等。

二、默认配置文件的存放位置

  在Windows应用项目或者类库项目中,需要放在项目的/bin/debug/目录下。

  在Web应用程序中,需要放在应用程序根目录。

  当然,这也不是强制性的,也可以很灵活地配置

        public IList<PersonModel> GetList(){//ISqlMapper mapper = Mapper.Instance();DomSqlMapBuilder builder = new DomSqlMapBuilder();ISqlMapper mapper = builder.Configure(@"C:\Users\Administrator\Desktop\Ibatis.Net测试\Ibatis.Net测试\SqlMap.config");IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null);  //这个"SelectAllPerson"就是xml映射文件的Idreturn ListPerson;}

  例如以上代码,就从指定的位置去加载了SqlMap.config。注意,虽然SqlMap.config是从指定的位置,但是要注意里面的resource引入的资源,还是从原来的默认目录开始找,例如

<providers resource="providers.config"/>

  SqlMap.config里面的providers.config这个东西,还是需要在原来默认位置。

三、SqlMap.config

  下面先放上一个在官网直接下载后的sample.SqlMap.config

<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><properties resource="../../../Files/properties.config"/><settings><setting useStatementNamespaces="false"/></settings><providers resource="../../../Files/providers.config"/><!-- Database connection information --><database><provider name="OleDb2.0"/><dataSource name="Blogs" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../../Files/Blogs.mdb"/></database><sqlMaps><sqlMap resource="../../../Files/Maps/Access/Post.xml" /><sqlMap resource="../../../Files/Maps/Access/Blog.xml" /><sqlMap resource="../../../Files/Maps/Access/Author.xml" /></sqlMaps></sqlMapConfig>

  1、properties节点

  properties节点通常用于引入在外部定义一些键值对配置文件,以方便在后面统一调用,这样修改的时候,只修改就可以了。

  它的引入方式有3种:

  •   resource: 通过相对路径来确定文件的位置。
  •   url:     通过绝对路径来确定文件位置。
  •   embedded:通过嵌入资源方式来确定文件位置。

  <sqlMap embedded = "命名空间.文件名.后缀名, 命名空间"/>

  例如,你在外部的config文件中,定义了一个数据库连接

<?xml version="1.0" encoding="utf-8" ?>
<setting><add key="connectionString" value="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/>
</setting>

  这样在SqlMap.config文件就可以这样写:

  <!--数据库连接字符串--><database><provider name="sqlServer2008"/><dataSource name="Test" connectionString="${DataSource}"/></database>

  2、Settings节点

  Settings节点里,可以配置以下5个信息:

  • useStatementNamespaces:默认flase,是否使用全局完整命名空间。
  • cacheModelsEnabled :默认true,是否启用缓存。
  • validateSqlMap:默认false,使用启用SqlMapConfig.xsd来验证映射XML文件。
  • useReflectionOptimizer:默认true,是否使用反射机制访问C#中对象的属性。
  • useEmbedStatementParams 是否使用嵌入的方式声明可变参数

  示例:

  <settings><setting useStatementNamespaces="false"/>  --使用全局完整命名空间</settings>

  使用全局命名空间时,不同的xml映射文件,id互不影响。如果出现提示出现 重复的sql Id的情况,大多是没启用。如果启用,则执行sql语句时,要用命名空间.id的方式。这个理所当然要启用的。区分清楚点好,否则很容易出现xml 的 sql id重复的情况。

  3、Providers节点

  示例:

<providers resource="providers.config"/>

  这里使用引入外部配置文件的方式实现。

  4、alias节点

  alias节点用于为类指定一个别名,通常用于为一些很长的类名指定一个别名,这样可以减少一些代码。

<typeAlias alias="Person" type="iBatis.Domain.Person,iBatisSample"/>

  以上代码的意思是,为iBatis.Domain.Person类指定一个别名Person。Person就代表iBatis.Domain.Person这个类。

  起初我以为别名只是起了缩短配置类的作用,但后来我发现别名是还有其他作用的,它还指明了IBatis.net应该到哪个程序集去找实体类。

  如果程序偶尔报如下错误,那么你就要考虑加上别名了。

  “/”应用程序中的服务器错误。

  Could not load type from string value 'xxx'

<alias><typeAlias alias="Field" type="Nx.Domain.Common.Field, Nx.Domain" />
</alias>

  Ibatis.Net有很多默认的别名:

  

  5、database节点

  指定一个你选择使用的数据库,和数据库连接。

  示例:

  <database><provider name="sqlServer2008"/><dataSource name="Test" connectionString="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/></database>

  6、SqlMaps节点

  SqlMaps节点,用于配置映射信息。通常在映射信息写在外部,在这个节点引入。

四、映射文件

  映射文件与NHibernate类似,都是指定哪个属性名,对于哪个列名。不过貌似没有NHibernate那么复杂,东西貌似不多,不过也可能只是我了解得太少。

  下面来看看省略的写法(当property与column完全相同时,可以这样写):

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance"><statements><select id="SelectAllPerson" resultClass="Ibatis.Net.Domain.PersonModel">select * from person</select></statements>
</sqlMap>

  下面再来看看全部写全的写法,为了展示不同,我将Id和Name的属性名改为PersonId,PersonName:

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance"><resultMaps><resultMap id="Person" Class="Ibatis.Net.Domain.PersonModel">   <!--id会被statements节点所用,Class实体类所在位置--><result property="PersonId" column="Id"/>  <!--property实体类的属性名,column对应的列名--><result property="PersonName" column="Name"/></resultMap></resultMaps><statements><select id="SelectAllPerson" resultMap="Person">  <!--id在程序中会被SqlMapper实体类所调用,resultMap就是resultMap节点的id-->select * from person</select></statements>
</sqlMap>

  resultMaps部分:定义了数据库字段名与实体类属性名之间的关系。当然,如果你数据库字段名与实体类属性名完全一样,那么resultMaps部分是可以省略的。另外要注意一点,ResultMap的列比你查询的列不能少,也不能多。它不会说,ResultMap里映射的列多了,该属性就自动将select返回的列自动置null,而是直接所有列都不映射赋值。也就是说,Person表有Id,Name,Age3列,如果你只想要SELECT两个列(Id,Name),那么ResultMap里面的3列映射没用了,你必须另外搞一个ResulpMap只映射两列的。不爽。

  statements部分:用于定义你需要执行的语句,在程序中通过select的id调用。

属性

说明

parameterMap

参数映射,需结合parameterMap节点对映射关系加以定义,对于存储过程之外的statement而言,建议使用parameterClass作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现更加出色

parameterClass

参数类。指定了参数类型的完整类名(包括命名空间),可以通过别名避免每次书写冗长的类名

resultMap

结果映射,需结合resultMap节点对映射关系加以定义

resultClass

结果类。指定了结果类型的完整类名(包括命名空间),可以通过别名避免每次书写冗长的类名

cacheModel

Statement对应的Cache模块

extends

重复使用SQL子句

  1、extends

  extends用于提取一段重复使用的SQL语句而避免重复书写

<select id="SelectAllCustomers" resultMap="Customer">SELECT * FROM Customers
</select><select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer" extends="SelectAllCustomers">ORDER BY CustomerID
</select>

  2、parameterMap的属性

  它可以接受三个属性,id/class/extends,其中是有id是必须的,class用于声明使用的实体类名称,可以是别名,也可以是全名,extends,可想而知,不解释
在它下一级节点中应该包含若干个parameter元素,来指定对象属性与当前变量的映射规则,parameter有如下常用属性:

  1. property:指定类中的一个属性
  2. columu:定义的参数名称
  3. direction:用于声明存储过程的参数方向(input,output,inputoutput)
  4. dbType:用于指定property映射到数据库中的数据类型
  5. type:用于为参数的对象指定CLR类型
  6. nullValue:指定在property为何值时,将会在存储数据时候,替换为null,这是经常会被用到的
  7. size:用于指定最大值

  3、resultMap的属性

  它的属性很多是和parameterMap想对应的,但是值得一提的是它下面可以添加一个constructor元素来匹配一个构造函数。当然,这个的前提是Customers类中有这样一个构造函数。例如:

<resultMaps><resultMap id="Customer" class="Customers"><constructor><argument argumentName="PersonId" column="PersonID"/><argument argumentName="PersonName" column="PersonName"/></constructor><result property="PersonId" column="PersonID"/><result property="PersonName" column="PersonName"/></resultMap>
</resultMaps>

  4、存储过程

  这里有一点区别就是,只可以使用parameterMap,而不可以使用parameterClass,其实想一想,您难道还会为每一个存储过程定义个传入的实体类吗?还有一点,就是他的参数完全是按照 parameterMap中的定义自动匹配的。

<procedure id="demoProcedure" parameterMap="procedureDemo">CustOrderHist
</procedure>

  5、对SQL片段的引用

  在编写SqlMaps的时候,经常需要把一个SQL语句进行拆分,然后在不通的地方引用它我们可以使用sql和include的组合来完成。

<sql id="order">ORDER BY PersonID
</sql>
<select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer">SELECT * FROM Person<include refid="test"/>
</select>

五、$与#的区别

  • SELECT * FROM TABLE WHERE Id = #id# 其中如果字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号。如果id为整型,那么#id#就是整型;
  • SELECT * FROM TABLE WHERE Id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符串类型,那么Sql语句应该写成 SELECT * FROM TABLE WHERE Id = '$id$',否则会出错,因为它不会自动增加单引号。

转载自 http://www.cnblogs.com/kissdodog/p/3293381.html

转载于:https://www.cnblogs.com/qifei-jia/p/8033486.html

【IBatis.Net】 各种配置说明相关推荐

  1. Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明

    Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...

  2. iBatis的CRUD操作详细总结

    昨天晚上看了一下关于iBatis的一个讲解的视频,讲的和我的这个简单的总结差不多.... 思考了一下还是把主要操作都总结一下吧,当然这里也不是全的,知识简单的CRUD... 首先我觉得持久层的操作主要 ...

  3. linux kvm虚拟化命令,Linux系统下kvm虚拟化(三)日常管理常用命令和配置说明

    根据我们之前创建和一些操作可以知道,KVM虚拟机的管理主要是通过virsh命令对环境下kvm虚拟机进行管理,下边这里整理一些常用的配置说明以及如何进行日常管理维护. 1,查看KVM虚拟机配置文件 KV ...

  4. Angular应用中tsconfig.json文件配置说明及配置全局路径映射

    tsconfig.json文件配置说明 1. tsconfig.json文件中的选项配置 2. 配置全局路径映射 1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的 ...

  5. IBatis.Net学习笔记九--动态选择Dao的设计分析

    在IBatis.Net中可以通过配置文件动态选择数据库.动态选择Dao对象. Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式.Ado的方式.NHibernet的方式 ...

  6. 【转】ibatis的简介与初步搭建应用

    [转]ibatis的简介与初步搭建应用 一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完 ...

  7. iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】

    iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post). Oracle设置 Xml代码   <!-- O ...

  8. DNN和IBatis.Net几乎同时发布新版本

    DotNetNuke发布了最新的版本4.5.0,确实让人期待了很久,据说这个版本在性能上有很大的提升. IBatis.NET几乎在同一时间也发布了新版本DataMapper 1.6.1,也有不少的改进 ...

  9. Hibernate和iBATIS 优缺点比较

    选择Hibernate还是iBATIS都有它的道理: Hibernate的特点: Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hiberna ...

最新文章

  1. 自动驾驶技术现状与需求分析
  2. github RL: DP
  3. RF无线电射频接口静电保护方案图
  4. 一道百度前端线上笔试题
  5. Streams全库复制
  6. adb命令中的keyevent事件
  7. 《音乐达人秀:Adobe Audition实战200例》——实例7 定时录制网络音乐节目
  8. JavaScript代码片段
  9. 工作239:内容过长省略号失败 直接改的样式表
  10. 行为设计模式 - 解释器设计模式
  11. 华为HG255d WEB刷OpenWrt
  12. mac tree命令
  13. 《东周列国志》第二十三回 卫懿公好鹤亡国 齐桓公兴兵伐楚
  14. Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?
  15. 深入浅出计算机组成原理:冒险和预测(一)-hazard是“危”也是“机(第22讲)...
  16. 惠普暗影精灵8Pro和联想拯救者Y9000P哪个好
  17. Latex 数学符号和公式模板整理
  18. ABAP数据字典和数据表的读取
  19. web的首屏加载优化
  20. 我的世界Java版最大村庄_我的世界:java版完美种子,开局两村庄齐铁套

热门文章

  1. css设置title字体_CSS中简写属性要注意TRouBLe的顺序,避免踩坑
  2. 用MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()
  3. android fastjson漏洞_【漏洞预警】Fastjson 远程代码执行漏洞(暂无PoC)
  4. AI理论知识整理(8)-素数与最大公因数
  5. (视频+图文)机器学习入门系列-第15章
  6. 【Python】一行python代码利用人工智能去除工作照背景
  7. 【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度...
  8. 【深度学习】搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了
  9. 【计算机基础】漫画:什么是 “设计模式” ?
  10. 【机器学习基础】数学推导+纯Python实现机器学习算法6:感知机