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 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

工具 | 如何在Python中调用R语言包?

R语言是非常强大的做统计分析和建模方面的开源软件,它有非常丰富的统计软件包,做统计可以说只有你想不到的,没有R办不到的。Python又是当下最流行的编程软件之一...

5028
来自专栏数据之美

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应...

5457
来自专栏扎心了老铁

django celery的分布式异步之路(二) 高并发

当你跑通了前面一个demo,博客地址:http://www.cnblogs.com/kangoroo/p/7299920.html,那么你的分布式异步之旅已经起...

4126
来自专栏生信技能树

linux命令行文本操作一文就够

主要是 awk/grep/sed这三驾马车,加上vi这个神器,最后辅助一些小工具,包括 wc,cat,diff,join,paste,cut,uniq 这里 简...

3329
来自专栏北京马哥教育

高可用集群基本概念与heartbeat文本配置接口

一、高可用集群基本概念: 什么是高可用集群: 所谓高可用集群,就是在出现故障时,可以把业务自动转移到其他主机上并让服务正常运行的集群构架 > 高...

3077
来自专栏iOSDevLog

pygit:足够的Git客户端创建一个repo,commit,并将自己推送到GitHub

Git因其非常简单的对象模型而闻名(其中包括) - 并且有充分的理由。学习时git我发现本地对象数据库只是目录中的一堆普通文件.git。除了index(.git...

962
来自专栏腾讯Bugly的专栏

Android 动态链接库加载原理及 HotFix 方案介绍

引言 随着项目中动态链接库越来越多,我们也遇到了很多奇怪的问题,比如只在某一种 OS 上会出现的 java.lang.UnsatisfiedLinkError,...

3767
来自专栏技术博文

Linux下ps命令详解

linux上进程有5种状态:  1. 运行(正在运行或在运行队列中等待)  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)  3. 不可中断(...

3394
来自专栏杨建荣的学习笔记

使用logon trigger完成动态的session跟踪(r4笔记第29天)

在之前讨论过 关于oracle中session跟踪的总结,可以参见链接 http://blog.itpub.net/23718752/viewspace-115...

2714
来自专栏攻城狮的动态

简谈冒泡排序

3265

扫码关注云+社区