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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

ORM的分析之二iBatisNet(现在叫MyBatis)的应用之二实体类对象的映射  

2012-08-03 14:41:15|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

ORM的分析之二iBatisNet(现在叫MyBatis)的应用之二实体类对象的映射

 

昨天弄了一个最简单的WEB的,今天讲一个FORM的,交叉着来,这样用着更清楚。新建立一个工程:WebToFormORMfromFirstWeb

先讲一下页务流程,就是一个FORM上,查询指定的人员和调用存储过程,两个文本框,一个datagridview控件,几个按钮。

这里还是分成几大块:

一、配置文件

配置文件包括老哥三:provider.config ,sqlmap.config,database.config,不过因为现在是两个实体类Person 和TestPerson ,所以增加了一个XML文件,变成了两个XML文件了。

这里只谈几个问题,不再详细的介绍这几个文件。

1、在Stream stream =assembly.GetManifestResourceStream("WebToFormORMfromFirstWeb.SqlMap.config")时,stream的值总是NULL,很是奇怪,按照上一篇文件把资源都改成嵌入式的,还是不成,增加名空间前缀或减少都不行,实在没办法了,调用了

string [] str = assembly.GetManifestResourceNames();这个函数,遍历资源,结果发现真有这个资源,但是,大小写错了,狂晕,不是在WIN下不区分大小写么,看来还是严格的写大小写啊。

2、加载sqlmap.config时,总是报格式不对,查资料,说是高版本的IBATIS使用的XML,可这里就是用的XML啊,后来才发现,多了一套<settings>,去掉就OK了,真是无语了。

3、加载TextPerson.xml时总是报ParamUpdateOutput这个值有错误,试了很多方法,真是无奈了,最后只好把它注释,调试通过后回来再弄他,想了半天看到他后面的class键值为IDictionary,而且好象记得资料上说只要是实现这个接口的类都可以,于是将其改成了Hashtable,通过了,在网上查资料,发现有的写成后者,有的写成前者,但为什么前者在有的工程里也是可以用的呢?怀疑是与版本有关系,但没有确定。

4、database.config的介绍

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

<settings>

    <add key="userid" value="sa" />

    <add key="password" value="123456" />

    <add key="database" value="MyTest" />

    <add key="datasource" value="(local)" />

    <add key="selectKey" value="select @@IDENTITY as value" />

    <add key="directory" value="Maps" />

    <add key="useStatementNamespaces" value="false" />

</settings>

其实很简单,只是把原来SqlMap.config中的挪到这里,看名字大家都知道,就不用细讲了,这里值得一提的是selectKey,这个做为一个变量使用,在后面可以用前面讲过的$selectKey$的方法来使用。

 

二、数据层

数据层Person ,TestPerson两个实体类,

    [Serializable]

    public class Person

    {

        private int id;

        private string firstName;

        private string lastName;

        private DateTime? birthDate;

        private double? weightInKilograms;

        private double? heightInMeters;

 

        public Person() { }

 

        public int Id

        {

            get { return id; }

            set { id = value; }

        }

 

        public string FirstName

        {

            get { return firstName; }

            set { firstName = value; }

        }

 

        public string LastName

        {

            get { return lastName; }

            set { lastName = value; }

        }

 

        public DateTime? BirthDate

        {

            get { return birthDate; }

            set { birthDate = value; }

        }

 

        public double? WeightInKilograms

        {

            get { return weightInKilograms; }

            set { weightInKilograms = value; }

        }

 

        public double? HeightInMeters

        {

            get { return heightInMeters; }

            set { heightInMeters = value; }

        }

    }

问号的意思是这个东西可以设置为NULL,最上面的关键字说明这个类可以序列化。没啥,他和IBATIS连接起来,是通过其XML文件,也就是上面提到的Person.xml中的

  <resultMaps>

 

    <resultMap id="SelectAllResult" class="Person">

      <result property="Id" column="PER_ID" />

      <result property="FirstName" column="PER_FIRST_NAME" />

      <result property="LastName" column="PER_LAST_NAME" />

      <result property="BirthDate" column="PER_BIRTH_DATE" />

      <result property="WeightInKilograms" column="PER_WEIGHT_KG" />

      <result property="HeightInMeters" column="PER_HEIGHT_M" />

    </resultMap>

 

    <resultMap id="SelectByPersonId" class="Person">

      <result property="Id" column="PER_ID" />

      <result property="FirstName" column="PER_FIRST_NAME" />

      <result property="LastName" column="PER_LAST_NAME" />

      <result property="BirthDate" column="PER_BIRTH_DATE" />

      <result property="WeightInKilograms" column="PER_WEIGHT_KG" />

      <result property="HeightInMeters" column="PER_HEIGHT_M" />

    </resultMap>

 

  </resultMaps>

这样,返回的值会自动映射到你的Person的实体类上。

三、数据处理层

这一层主要是把IBATIS和数据库连接起来。

主要有三个服务类baseservice类,personservice类, testpersonservice类,还有两个查询类,basequerycondition,personquery。

其中SERVICE主要是用于和IBATIS交互执行SQL,而查询主要是得到查询条件并设置,获得一些具体的查询SQL字符串,这其实算是一个辅助的类吧。

其实精华还是在前两层,后面这个看代码大家都会。所以说,源码之前了无秘密,秘密的是配置文件的操作,这个真得太伤人,一点儿不对,都通不过,而且还不好查找,看LOG4NET会不会给人一些惊喜吧,这都是后话了。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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