初识Ibatis-用odp.net连接oracle11g

说来也怪,工作一直是.Net+Oracle这个平台,与sqlServer没有一点机缘。

多年以来,一直放弃使用Hibernate,不愿受制于Relation Table和Object严格的映射关系。为了方便,自己实现了一个简单的中间件,使用webservice作为数据服务,接收加密的sql或Sql集用于数据库操作。数据载体使用dataset,实现了更改DataSet后自动保存相关表的功能,避免基本功能手动写Insert,Update语句。也尝试过Remoting实现,觉得效率与WebService没有大的区别,后来升级到WCF彻底解决通信协议的问题。

数据服务提供了一个直接操纵数据库的工具,最大的优点是灵活,WinForm客户端不需要安装Oracle客户端。使用DataSet的结果是程序越来越脱离OO,得到了最大的灵活性的同时几乎丧失了所有设计契约。尤其对于程序维护,基本上是谁赶上谁维护,而且系统在使用过程中,最重要的是以最快速度解决问题,增加新的功能或业务变更。设计的约束越来越形同虚设。

可以说,Ibatis的工作方式是Domain(Entity)+Sql的完美结合。即没有丧失Sql的灵活,又能保证业务处理及前端是基于Domain对象进行处理。而对于每个Domain对象都有独特的Map描述,可以随时更改Map而不影响前端程序。如果说唯一的缺陷,就是Map配置的编写略显啰嗦,(灵活+啰嗦的矛盾体),而简单良好的Map格式和语法,虽然啰嗦但很简单,很容易自动生成。而我认为开发者对数据库表应该了然于心,这点对敏捷开发尤其重要。我从来不指望所谓的界面工程师只管界面之类的方法能够奏效,我经历的所有系统,开发的瓶颈都在业务组织和处理,相比之下,界面的工作可以说是微不足道,UI问题基本上都是Google能很快解决的。

Ibatis自带了10几种Provider,其中对Oracle的支持有9.2,10.1版本,还有一个使用微软OracleClient的Oracle驱动,是基于FrameWrok1.1的,很古老了。其实自己增加Oracle11g的Provider很简单,只要复制10.1的<provider />,修改name, description和assemblyName就可以。新增的Provider是下面的样子:

<provider   
name="oracle11.1g"    
description="Oracle, oracle provider V11.1g"   
enabled="true"   
assemblyName="Oracle.DataAccess, Version=2.112.1.2, Culture=neutral, PublicKeyToken=89b483f429c47342"
connectionClass="Oracle.DataAccess.Client.OracleConnection"   
commandClass="Oracle.DataAccess.Client.OracleCommand"   
parameterClass="Oracle.DataAccess.Client.OracleParameter"   
parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"   
parameterDbTypeProperty="OracleDbType"   
dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"   
commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"   
usePositionalParameters="true"   
useParameterPrefixInSql="true"   
useParameterPrefixInParameter="true"   
parameterPrefix=":"   
useDeriveParameters="false"   
allowMARS="false"  />

其中name,description都是可以自己随意写的,只要name不重就没问题。唯一注意的是assemblyName必须写全名称,即fullName。上面用的是ODP.net for oracle 11.2g。

如果不知道fullName怎么写,可以用System.Reflection.Assembly.LoadFile("Oracle.DataAccess.dll的位置").FullName获取,再拷贝粘贴。

总结一下配置Ibatis最精简的文件结构([]表示目录):

providers.config

SqlMap.config

[Domain]

[Domain]/DomainEntity1.cs

[Domain]/DomainEntity2.cs

[Domain]/......

[Maps]

[Maps]/Entity1.xml

[Maps]/Entity2.xml

[Maps]/......

另:win7+oracle11g,在Ibatis的配置过程,连接字符串上浪费了很多时间,现象是sqlplus正常登陆,程序却不能,监听和服务名都正确配置,却总是显示"无法解析服务名",最后写成(DataSource为空-本机) ConnectionString = "Data Source=;User Id=uid;Password=psd",就一切正常了。

转载于:https://www.cnblogs.com/mexi/archive/2011/06/01/IbatisNet.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值