iBatis.Net(2):基本概念与配置

写完第一篇,有朋友给我发邮件,说想让我配合实例写会不会更好一些,可是呢,我觉得这就相当于那些北大的什么鸟给无辜的孩子们吃快餐一样,我是坚决反对那样的,知其然不知其所以然,可能你当下可以从那里学点东西然后找到个工作,但是那样的知识体系是不适合我们发展的,当然了,这也是小白的个人观点,毕竟人那什么鸟比我飞的漂亮的多,至于iBatis这东西,说简单不简单,说难不难,很多基础的概念配置的东西,还是很有必要研究一下的,至于他的使用倒是很简单,所以也希望朋友们能真正吃透他,您的功力如何,并不在于您有多么锋利的武器,而在于您能把它的锋利发挥到一个什么程度,好了    闲话少说,书归正传

iBaits的配置是以SqlMap.config的XML描述为核心,该文件提供了详细的数据源配置,数据映射以及一些其他的配置,在程序执行的时候,这个文件将首先被分析,确定数据库提供者,数据源等等的内容,然后返回一个应用程序中的DataMapper对象,sqlMapper类是DataMapper框架的核心,他是程序与DataMapper框架的API,通过创建SqlMapper类完成DataMapper客户的创建,每种配置文件对应一个数据源,但是在一个应用程序中可以使用多个DataMapper客户,通过创建多个配置文件,并在初始化DataMapper客户的时候把配置文件名作为参数传入,就可以在一个应用程序中使用多个DataMapper客户,对于多个DataMapper客户应用程序的这些配置来说,可以使用不通的配置命名,而数据源却是同一个数据库,这是完全可以的

勘误:在上一篇中我把xsd文件的存放路径写错啦,正确的应该是 “VS2008安装路径\Xml\Schemas ”,其他版本的VS我没有注意过有没有区别,大家可以自己试一下啦,如果找不到的话可以@我

SqlMap.config配置

在整个iBatis应用中,这个文件起着一个中枢的作用,是最关键的一个配置文件,这一篇我主要写一下他详细的配置方式,这里我先给出一个示例,然后详细的解释一下他的配置方式

<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <properties>
    <property resource="DataAccessInfo.config"/>
  </properties>
  
  <settings>
    <setting useStatementNamespaces="false"/>
    <setting cacheModelsEnabled="true"/>
    <setting validateSqlMap="false"/>
  </settings>
  
  <providers embedded="providers.cinfig"/>
  
    <!-- Database connection information -->
    <database>
        <provider name="sqlServer2005"/>
        <dataSource name="NorthWind" connectionString="Data Source=${DataSource};Initial Catalog=aspnetdb;Persist Security Info=True;User ID=sa;Password=123123."/>
    </database>
  <alias>
    <typeAlias alias="Customers" type="iBatisSample.Domain.Customers,iBatisSample"/>
    
  </alias>
    <sqlMaps>
            <sqlMap resource="Maps/Customers.xml" />
    <sqlMap resource="Maps/Orders.xml"/>
    </sqlMaps>

</sqlMapConfig>

在你的iBatis组件包里,你应该可以找到一个sample.sqlmap.config的文件,这是一个示例性的文件

首先properties节点,在它下面可以定义若干个property节点来引用文件或者配置一些键值对,这些,这些键值对或者引用文件中的键值对会在所有的配置中经常使用,而也会有频繁更改的可能,比如数据库连接串,所以我们就可以把它定义为一个键值对,或者定义在引用的文件里,起到统一管理的作用,引用的方式有以下三种

resource:通过相对路径来确定文件的位置

url:通过绝对路径来确定文件位置

embedded:通过嵌入资源方式来确定文件位置

被引用的文件示例如下(DataAccessInfo.config)

<?xml version="1.0" encoding="utf-8" ?>
<setting>
  <add key="DataSource" value="XIAOYAOJIAN"/>
</setting>

这样我们就可以使用“${DataSource}”的方式在其他位置使用它了,而要更改他的值的时候,只许要更改一处

然后是Settings节点,在这个节点里,可以设置一些iBatis的属性,根据我们项目的需求,分别配置,达到我们对DataMapper的最优化,我们可以添加的设置项和含义我下面给出

useStatementNamespaces

默认为false,如果为true在程序中通过名称访问数据查询语句的时候,需要使用他的全局完整命名空间

cacheModelsEnabled

默认为true ,是否启动缓存,这只是一个全局设定,也就是说还可以在以后临时更改

validateSqlMap

默认为false,是否启用SqlMapConfig.xsd来验证工程中的映射文件

useReflectionOptimizer

默认为true,是否使用c#的reflection机制来访问c#中对象的属性

useEmbedStatementParams

这个我暂时还不知道是什么意思#24

然后是providers节点,这个节点定义了我么需要使用的数据库提供者和数据库提供者的连接信息,说是“定义”倒不如说是“指定”,因为所有的“定义”都是在providers.config中,我们在SqlMap.config中只需要指定使用哪种数据库和提供一些连接信息就可以啦,不过不要忘记了在proviers.config把我们要使用的那种数据库名后面紧跟着的enabled属性设置为true,在SqlMap.config中指定的提供者名称一定要与providers.config中的提供者名称完全一致,例如,我在这里使用的就是sqlServer2005,另外,也可以把providers.config中某个provider的default设置为true或者1,就不需要在SqlMap.config中指定要使用的提供者啦,不过这就只可以使用一种数据提供者啦,在iBatis中,提供了很多中数据库提供者,已经完全可以满足我们使用啦

接下来是alias节点,通过这个节点可以给一些很长的类名指定一个别名,这样,在iBatis的使用过程中就省去和很多麻烦,让我们的使用更方便也更直接,例如

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

这里,我为我项目(iBatisSample)下的Domain下的Customers类指定了一个别名Customers,

在iBatis中,已经为我们预设了很多的别名,我们可以直接使用他们,同时在定义我们自己的别名的时候注意不要与预定义的重名,具体内容如下图所示

接下来是database节点了,我想这个的意义就不用我说了吧,在这个节点下需要一个provider和一个datasource元素,如果我们使用默认的数据库提供者,可以不添加这个provider元素,datasource元素用来确定数据源连接字符串,并给它指定一个名称,在SqlMap.config中,可以有多个database节点,在最上面的示例用数据库连接字符串我通过${DataSource}的方式使用了我们在DataAccessInfo.config中的DataSource的值“XIAOYAOJIAN “

最后就是SqlMaps节点啦,在基于数据映射的情况下,应用程序的映射文件定义了SQL语句和存储过程,同时也定义了输入参数和返回对象的类型,随着应用程序的复杂化,我们就需要把很多映射文件放在不同的文件中分别管理和使用,所以就有了这个SqlMaps节点,在他下面可以有若干个<SqlMap/>节点来分别指定要引用的映射文件,同样引用方式也有三种  就是resource、url和embedded

至于映射文件的配置和写法,我会在下一篇以及以后配合实例讲的,这一篇就写到这里啦

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux、Python学习

黑客们会用到哪些Python技术?

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工具)。Python允许开发...

2114
来自专栏听雨堂

【7】AccessDB快速数据访问

阅读目录 C#和VB数据访问的比较 AccessDB的设计 数据库的连接 三种主要操作 错误输出及调试 小结 C#和VB数据访问的比较 C#中要进行...

20210
来自专栏平凡文摘

一次恐怖的 Java 内存泄漏排查实战

3544
来自专栏Seebug漏洞平台

Joomla 权限提升漏洞(CVE-2016-9838)分析

0x00 漏洞概述 1.漏洞简介 Joomla 于12月13日发布了3.6.5的升级公告,此次升级修复了三个安全漏洞,其中 CVE-2016-9838 被官方定...

36510
来自专栏代码世界

Python之线程

操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种...

5938
来自专栏Java3y

从零单排学Redis【黄金】

好的,今天我们要上黄金段位了,如果还没经历过青铜和白银阶段的,可以先去蹭蹭经验再回来:

1302
来自专栏专注于主流技术和业务

axios2教程

axios 是一个基于 promise 的 HTTP 库,用于浏览器和node.js的http客户端,支持拦截请求和响应,自动转换 JSON 数据, 客户端支持...

9612
来自专栏JavaEdge

操作系统之文件管理一、文件与文件系统二、文件控制块和文件目录三、文件的物理结构四、文件系统的实现五、文件系统实例(UNIX)六、UNIX文件系统一、文件系统实例(FAT)二、文件操作的实现三、文件系统

5946
来自专栏Java技术栈

一次恐怖的 Java 内存泄漏排查实战

最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》(第二版)这本书,理论+实践结合,深入浅出,强烈推荐给大家。

1573
来自专栏AndroidTv

讲讲断点续传那点儿事提问理论基础代码示例

这次想来讲讲断点续传,以前没相关需求,所以一直没去接触,近阶段了解了之后,其实并不复杂,那么也便来写一篇记录一下,分享给大伙,也方便自己后续查阅。

1032

扫码关注云+社区

领取腾讯云代金券