注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

ORM的分析之二iBatisNet(现在叫MyBatis)的应用之一  

2012-08-02 19:35:42|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

ORM的分析之二iBatisNet(现在叫MyBatis)的应用之一

其实从严格意义上来说,mybatis只能说是一个半ORM的东西,不过这里先不讨论这个,先把第一个程序搞好再说。

仍然是先声明一下环境:

  VS2010+SQL2008+ Ibatis.DataMapper.1.6.2.bin

创建一个WEB工程,然后把IBatisNet.Common.dll和IBatisNet.DataMapper.dll这两个库拷贝或添加引用到BIN目录下。最新的版本还会自动添加一些库和XML文件,不用管他。

然后创建一个数据库,这个数据按照你的需求来建立,这里选取一个网上的例程:

create database OrmDB

go

 

use OrmDB

go

create table People

(

         id int primary key identity,

         [name] varchar(250),

         age int

)

Go

在工程下增加一个Maps文件夹。

然后添加三个配置文件providers.config,SqlMap.config,PeopleMap.xml,其中前两个的名字是不能改的而且在IBATIS中有示例,特别是那个providers.config,基本不用动,但也得动。那个sqlmap.config在IBATIS中有一个sample.sqlmap.config拷过来,改了名字就可以了。第三个得根据你的具体情况来使用。

下面逐一说明三个文件:

一、providers.config:

<?xml version="1.0" encoding="utf-8"?>

<providers

xmlns="http://ibatis.apache.org/providers"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 

<clear/>

<provider

           name="sqlServer1.0"

           description="Microsoft SQL Server, provider V1.0.3300.0 in framework .NET V1.0"

           enabled="false"

           assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"

           commandClass="System.Data.SqlClient.SqlCommand"

           parameterClass="System.Data.SqlClient.SqlParameter"

           parameterDbTypeClass="System.Data.SqlDbType"

           parameterDbTypeProperty="SqlDbType"

           dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"

           commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"

           usePositionalParameters="false"

           useParameterPrefixInSql="true"

           useParameterPrefixInParameter="true"

           parameterPrefix="@"

      allowMARS="false"

  />

<provider

           name="sqlServer1.1"

           description="Microsoft SQL Server, provider V1.0.5000.0 in framework .NET V1.1"

           enabled="false"

           default="true"

           assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

           connectionClass="System.Data.SqlClient.SqlConnection"

           commandClass="System.Data.SqlClient.SqlCommand"

           parameterClass="System.Data.SqlClient.SqlParameter"

           parameterDbTypeClass="System.Data.SqlDbType"

           parameterDbTypeProperty="SqlDbType"

           dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"

           commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"

           usePositionalParameters="false"

           useParameterPrefixInSql="true"

           useParameterPrefixInParameter="true"

           parameterPrefix="@"

      allowMARS="false"

  />

<provider

    name="sqlServer2.0"

    enabled="true"

    description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"

    assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

    connectionClass="System.Data.SqlClient.SqlConnection"

    commandClass="System.Data.SqlClient.SqlCommand"

    parameterClass="System.Data.SqlClient.SqlParameter"

    parameterDbTypeClass="System.Data.SqlDbType"

    parameterDbTypeProperty="SqlDbType"

    dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"

    commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"

    usePositionalParameters = "false"

    useParameterPrefixInSql = "true"

    useParameterPrefixInParameter = "true"

    parameterPrefix="@"

    allowMARS="false"

    />

································

大家不要晕,拿出一个来看:

  <provider

     name="sqlServer2005"

     enabled="false"

     description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"

     assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

     connectionClass="System.Data.SqlClient.SqlConnection"

     commandClass="System.Data.SqlClient.SqlCommand"

     parameterClass="System.Data.SqlClient.SqlParameter"

     parameterDbTypeClass="System.Data.SqlDbType"

     parameterDbTypeProperty="SqlDbType"

     dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"

     commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"

     usePositionalParameters = "false"

     useParameterPrefixInSql = "true"

     useParameterPrefixInParameter = "true"

     parameterPrefix="@"

     allowMARS="true"

    />

你会发现,其实其它大多是重复这些消息,这是这个软件提供的解决各种数据库连接方法的一个方案。其中常用的主要是两个,一个enabled="false",另外一个是parameterPrefix="@",特别是第一个,如果你没有改成true的话,那么当你在sqlmap.config中的<database>里写好使用这种方法时,会报一个错误:

[ConfigurationException: Error while configuring the Provider named "sqlServer2.0". Cause : The provider is not in 'providers.config' or is not enabled.]

这说明你的TRUE没有设置,

二、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"/>

    <!—是否启用缓存-->

    <setting cacheModelsEnabled="true"/>

    <!—是否启用验证文件-->

    <setting validateSqlMap="false"/>

  </settings>

 

  <providers resource="providers.config"/>

 

         <!-- Database connection information -->

         <database>

    <provider name="sqlServer2.0"/>

                   <dataSource name="OrmDB" connectionString="Data Source=(local);Initial Catalog=OrmDB;User Id=sa;Password=123456;"/>

         </database>

 

         <sqlMaps>

                            <sqlMap resource="Maps/PeopleMap.xml" />

         </sqlMaps>

 

</sqlMapConfig>

这个如果拷过来的原始的,记得把不需要的注释掉,然后增加适当的自己的配置,重要的是在database里和sqlmaps这两个节点,一定要正确的使用字符串和你的XML文件。

三、在前面的MAPS文件夹下增加PeopleMap.xml

<?xml version="1.0" encoding="utf-8" ?>

<sqlMap namespace="" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <statements>

    <select id="GetPeopleById" parameterClass="string" resultClass="HashTable">

      SELECT * FROM People WHERE Id=#Id#

    </select>

    <insert id="Add" parameterClass="hashtable">

      INSERT  dbo.People (name ,age)

      VALUES  (#Name# , #Age#)

    </insert>

    <delete id="Delete" parameterClass="int" restultClass="int">

      DELETE FROM dbo.People WHERE Id=#Id#

    </delete>

    <update id="Update" parameterClass="hashtable" restltClass="int">

      UPDATE People SET name=#Name# WHERE Id=#Id#

    </update>

    <select id="GetAll" resultClass="HashTable">

      SELECT * FROM People

    </select>

  </statements>

</sqlMap>

 

这个没啥可讲的,大家一看就明白了,需要说明的是#和$这两符号的使用,前者是替换成相应的类型数据,是字符串就是’’,不是就不加,而后者则是一个纯粹的变量,直接这个变量是什么就弄成什么,举个例子:

Select #name# from #table#

Select $name$ from $table$

假设:name='name#' table='A'

则两者为:

Select ‘name#’ from ‘A’

Select name# from A

并且前者会报错。

 

配置文件的加载方式有两种,一种使用resource的方式,一种使用嵌入式资源的方式,看你的配置文件里怎么写了。如果是后者配置文件里是:<sqlMap embedded="Maps/XXX.xml" />。

前面写另外一个程序的时候儿,还遇到过这样一个问题:

未能解析引用的程序集“XXX”,因为它对不在当前目标框架“XXX”具有依赖关系。请删除对不在目标框架中的程序集的引用,或考虑重新确定项目的目标。 

出现这个问题是在一用log4net 动态库是出现的

 

原因在于程序的目标是.net 4 framework client profile

在项目的属性中 选择.net 4 framework 就OK了。

这个太简单没有用到自定义数据表的对象,下面再一一完善。

好好学习,天天向上。

  评论这张
 
阅读(1454)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017