之前做的一个java+iBatis的程序,现在要往vb.net上移形。偶然间得知针对.Net也有iBatis.Net构架,狂喜~~
找来各种配置资料,看了看都是C#的,虽说应该差不多但是心里还是别扭(就没人在vb.net上用这个??)
算了,按照人家的资料来吧。可能是跟人家的水平差距过大,按照人家的我都没配出来,着急还生了场病。。。
今天病好了,也想明白了,终于让我弄出来了。呵呵~~
以下是根据《iBATIS In Action:iBATIS的安装和配置》为基础,外加自己亲身实验得到的小白配置说明:
系统环境:win XP + VS 2008 + SQL Server 2008
一、系统配置:将从官网下载的Schema文件(SqlMap.xsd,SqlMapConfig.xsd,providers.xsd)添加到VS.NET安装目录
注:
①这些Schema文件可以从官网免费下载(Ibatis.DataMapper.1.6.2.bin):http://code.google.com/p/mybatisnet/downloads/list?can=3
②我用的是VS2008,所以安装路径:C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas
二、程序配置:
1.在vs中“新建项目”--“windows窗体应用程序”(其实你建一个“类库”也可以,我这不是为了以后程序方便么)
2.在“解决方案资源管理器”中,引入以下文件:iBatisNet.DataMapper.dll,iBatisNet.DataAccess.dll(可选的),iBatisNet.Common.dll,Castle.DynamicProxy.dll
(根据《iBatis In Action》一书中的解释:如果您使用的Mapper单例(singleton),那么唯一需要引用的是DataMapper程序集。IBatisNet.Common和Castle.DynamicProxy在运行时是需要的,但VS.NET会帮您解析这些依赖关系。如果使用Data Access Objects框架,那么还需要添加对DataAccess的引用。)
注:这些dll文件可以从官网免费下载(Ibatis.DataMapper.1.6.2.bin):http://code.google.com/p/mybatisnet/downloads/list?can=3
3.在程序根目录下创建文件夹Maps,将你的SQL文xml放在其中
4.SQL文xml基本格式如下:其中namespace后面的xmlns内容固定,不要修改。
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMap namespace="sql"
xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<statements >
<!-- 测试1-->
<select id="selectAllAccounts" resultClass="int">
select count(*) from customer
</select>
</statements>
</sqlMap>
注:关于SQL文的xml中各个字段的说明,可以参见:
iBatis.net中SQL文xml的说明(转载)
http://hi.baidu.com/bigheadsheep/blog/item/8b9f6c157cc1e29386d6b64a.html
5.将从官网下载的Ibatis.DataMapper.1.6.2.bin中的providers.config,SqlMap.config(官网提供的是“sample.SqlMap.config”,咱们用的时候需要改名)放入到程序的 bin\debug 目录中
注:其实放错位置也没事儿,后面程序运行的时候,会报错,告诉你在程序的bin\debug中找不到SqlMap.config (我就是这么试出来的,没办法,谁让咱们是小白呢)
6.修改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" >
<!--以上为固定格式,从这里开始以下是用户配置项 -->
<!-- 指定一个属性源,相当与设置一些属性变量,在SqlMap.config中用"${xxx}"这种形式引用的变量,xxx在该属性源文件中定义 -->
<!-- <properties resource="properties.config"/> -->
<settings>
<!-- 当该选项为true时,你在调用指定的映射时你总是必须给出完整的名称例如:queryForObject(“Namespace.statement.Id”); -->
<setting useStatementNamespaces="false"/>
<!-- 该选项指示是否使用缓存,默认为true -->
<setting cacheModelsEnabled="true"/>
<!-- 该选项指示配置要不要启示验证映射文件,默认是false-->
<setting validateSqlMap="false"/>
</settings>
<!-- 配置数据驱动提供类配置文件的路径和文件名-->
<providers resource="providers.config"/>
<!-- Database connection information -->
<!-- 数据库的信息,包括使用哪些数据库驱动和数据连接字符串的配置 -->
<database>
<provider name="sqlServer2.0"/>
<dataSource name="Pharma" connectionString="data source=CNB;database=Pharma; user id=sa;password=123;"/>
</database>
<!--指定映射的文件的位置,注意此处由于SqlMap.config在bin\debug路径下,所以设定resource时需要以根目录为基准设定 -->
<sqlMaps>
<sqlMap resource="Maps/sql.xml" />
</sqlMaps>
</sqlMapConfig>
注:
1.sqlMapConfig 后面的xmlns内容固定,不要修改。
2."providers.config"名称也不要修改。
3.由于我链接的是SQL Server2008,所以使用provider中的"sqlServer2.0".
在provider.config文件中,将"sqlServer2.0"的"enabled"和"default"设定为"true".这一点一定要确认,否则连接数据库时会出错!!
("enabled"只能有一个是"true" !!!)
4.关联SQL的xml文件位置,要在sqlMap resource中设定清楚。一定要注意SqlMap.config的保存目录是bin\debug,所以xml的路径是针对根路径来说的(即:以上内容中的"Maps/sql.xml")
7.在form的Form1_Load处理中,追加测试代码:
Imports System
Imports System.Collections.Generic
Imports IBatisNet.DataMapper
Imports IBatisNet.DataMapper.Configuration
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim builder As DomSqlMapBuilder = New DomSqlMapBuilder()
Dim mapper As ISqlMapper
mapper = builder.Configure
Dim list1 As IList = mapper.QueryForList("selectAllAccounts", DBNull.Value)
MsgBox(list1.Count)
End Sub
End Class
第一次运行注意:
1.第一次运行程序的时候,由于sql.xml不能自动编译,所以一定要将Maps/sql.xml拷贝到bin\Debug目录下,否则会出错