轻松搞定数据访问层[续]

原创 2004年07月28日 18:34:00

数据库表<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Tbl_Teacher

数据字段名称

类型

说明

teaID

Int

自动编号

teaCode

Char(20)

教师员工号

teaName

Nchar(10)

?

teaGender

Bit

?

teaNation

Nchar(6)

?

teaAge

TinyInt

?

 

Tbl_Student

数据字段名称

类型

说明

stuID

Int

自动编号

stuCode

Char(20)

学生证号

stuTeacherCode

Char(20)

班主任的员工号

stuName

Nchar(10)

姓名

stuGender

Bit

性别

stuNation

Nchar(6)

民族

stuAge

TinyInt

年龄

stuClassID

Int

班级的ID

 

用以描述这两张表的XML文件,该XML文件存放的是这两种表的结构信息

假设该文件的名称位? DB.XML

Tbl_Teacher

Name

DBName

Type

Seed

Key

ID

teaID

Integer

1

1

Code

teaCode

String

0

0

Name

teaName

String

0

0

Gender

teaGender

Boolean

0

0

Nation

teaNation

String

0

0

Age

teaAge

Integer

0

0

 

Tbl_Student

Name

DBName

Type

Seed

Key

ID

stuID

Integer

1

1

Code

stuCode

String

0

0

TeacherCode

stuTeacherCode

String

0

0

Name

stuName

String

0

0

Gender

stuGender

Boolean

0

0

Nation

stuNation

String

0

0

Age

stuAge

Integer

0

0

ClassID

stuClassID

Integer

0

0

 

必须的类

clsSQLHelper:微软的数据访问辅助类

clsSQLBuilder:根据配置文件生成相应SQL语句的类 见轻松搞定数据访问层[续1]

clsDataAccessOper:所以操作类的父类,提供通用的数据操作方法 见轻松搞定数据访问层[续2]

clsDataAccess:暂时没有什么用

 

数据类和访问类

实体类clsTeacher 的属性(Property),与数据库字段一一对应

Property ID as Integer

Property Code as String

Property Name as String

Property Gender as Boolean

Property Nation as string

Property Age as integer

 

实体类clsStudent

Property ID as Integer

Property Code as String

Property TeacherCode as String

Property Name as string

Property Gender as Boolean

Property Nation as string

Property Age as Integer

Property ClassID as Integer

注意:上面两个类的具体代码就不用写了吧

 

访问类clsTeacherOper clsDataAccessOper 继承

Public class clsTeacherOper

     Public  Function getAll()  as  ArrayList

          Return clsDataAccessOper.Select((New clsTeacher).GetType)

     End  Function

     Public  Function  getTeacherByCode(Code as string) as clsTeacher

         sDataAccessOper.SelectKeys("Code") = Code

Return clsDataAccessOper.Select((New clsTeacher).GetType).Item(0)

     End Function

    '以下方法类似,实现的是一些如 getXXX by YYY 的查询

    '据操作如添加/删除/修改全部从 clsDataAccessOper 中继承

    '这里的查询方法都可以用 clsDataAccessOper.SelectKeys(“”)=… 实现

    '只是为了提供更友好的接口,如果你时间紧迫可以把

    ' clsDataAccessOper.SelectKeys/Select 方法提交给逻辑层或表示层的程序员

End Class

访问类 clsStudentOper clsDataAccessOper 继承

( clsTeacherOper )

 

上篇<<轻松搞定数据访问层>>文章有人说我代码太少,看不懂。其实我只想说明一下道理。

现在,我贴出 clsSQLBuilder clsDataAccessOper 这两个核心类的全部代码。这也只是想更明白的说清楚道理。这两个类还是第一版本,代码质量不是很高,一些异常没有抛出.只是实现了一些功能。

顺便提到的是,实体类可以通过数据库脚本生成,这个工具当然是要自己写的了。工具很简单,两三百行就可以搞定。还有那个数据库结构信息的XML文件自己写也很麻烦,所以也可以写一个自动生成它的工具。

这都不是这个文章讨论的重点,这里就不介绍怎样才能生成那些模样几乎相同的代码了。

 

这种数据访问方法的优点在于:

如果你的数据库有变动,比如说tbl_Teahcer 表加了一个字段职称(teaTitle),那么你只需要在 clsTeacher 表里加一个属性 Property Title,然后在 DB.XML 文件中的 tblTeacher 里加一条记录 Title|teaTitle|String|0|0就可以了。

编码速度快,除了这两个核心类,数据实体类可以自动生成,访问类也只是简单的写一些查询方法.

不用写SQL语句。

 

 

使用方法举例:

添加一个教师

Dim newTeacher as New clsTeacher

With newTeahcer

 此处如果有ID的赋值,将被忽略,因为是自动增加值。见 clsSQLBuilder

 .Name=”Haha”

 .Code=”<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2001”

.Gender=True

End With

clsTeacherOper.Add(newTeacher)

添加一个学生

Dim newStudent as new clsStudent

With newStudent

 .Name=”Tom”

 .Gender=True

 .TeacherCode=”2001”

 

End with

clsStudentOper.Add(newStudent)

 

更新删除类似(这里就不举例了)

现在再就添加一个教师的程序流程大概介绍一下。

当执行 clsTeacherOper.Add(newTeancher) 后,clsDataAccessOper.Add 会把 newTeacher继续传递给 clsSQLBuilder.Add() 方法,在这个方法里,clsSQLBuilder首先取得该对象的类型

在这里是 “clsTeacher” 这个类型字符串和 DB.XML 文件中 tblTeacher 有一一对应的关系,这里是去掉前缀 cls,加上前缀 tbl.你也可以用其它更灵活的方法,:把映射关系记录到文件中.

然后遍历DB.xml文件中的tblTeacher 表的所有行,其中用到反射方法,以 在知道对象属性名称的情况下取得该属性的值(这其中我也波折了一下,开始用 InvokeMember调用,好麻烦.最后发现竟然有一个 CallByName的方法,用起来特简单.其实它也是封装了InvokeMember,).最终生成这样的SQL语句返回.

Insert Into tblTeacher(Name,Code,Gender…) values (‘Haha’,’2001’,1…)

(有几点要注意,Add/Delete/Update不同的操作方法里面,对数据表字段有不同的要求.比如在添加时,不能对自动编号ID赋值,所以上面的SQL语句就没有ID字段.这里我只用了SeekKey的字段属性,其实还可以添加其它属性,如数字型的最大值,字符型验证的正则表达式.以在clsSQLBuilder中完成数据验证操作)

最后clsDataAccessOper.Add 方法用这个SQL语句连接数据库,进行操作.

clsDataAccessOperclsSQLBuilder我就不详细解说了.代码都贴出来了,自己看吧

传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)

传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)http://www.kesjc.com/bbs/forum-66-1.html 第00讲.开山篇 第01讲.html介...
  • cgnine
  • cgnine
  • 2014年07月01日 18:08
  • 1332

数据访问层的设计(一)——功能与接口定义

数据访问层的设计我研究了很长时间,关于接口的定义,好几次都推翻重来。 园子看到过很多easyui+MVC+EF的文章,在早期,我的设计也类似。 但是后来为了增强它,想加点功能通用的功能进去,就耗费...
  • dyllove98
  • dyllove98
  • 2013年07月19日 19:19
  • 7942

数据访问层的设计和实现(分布式系统七)

(1)如何对外提供数据访问层的功能 数据访问层就是方便应用进行数据读写访问的抽象层,在该层上解决各个应用通用的访问数据库的问题。 上图显示了三种方式,第一种是为用户提供专有API,不过不推...
  • u011393781
  • u011393781
  • 2016年10月08日 17:41
  • 1484

三层架构:表示层-业务逻辑层-数据访问层

三层架构和MVC是两个东西。 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页面(类)对应MVC中的Co...
  • ruiguang21
  • ruiguang21
  • 2016年12月25日 11:29
  • 2077

.net中的数据访问层的封装

当年.net项目中自己封装的数据访问层,个人感觉使用非常方便
  • kevin_xf
  • kevin_xf
  • 2016年12月05日 15:53
  • 764

分布式数据访问层(DAL)

概述分布式(Distributed)数据访问层(Data Access Layer),简称DAL,是利用MySQL Proxy、Memcached、集群等技术优点而构建的一个架构系统。主要目的是为了解...
  • xcbeyond
  • xcbeyond
  • 2017年02月11日 00:46
  • 1344

数据访问层MyBatis解析

一、背景         最近在研究Java的框架,刚刚接触到java对于数据访问层封装的框架之一,MyBatis,不得不说使用起来很是方便,跟写sql语句的感觉一样一样的;顺便读了少部分官方文档,...
  • u012704843
  • u012704843
  • 2017年04月06日 17:46
  • 864

三层架构:表示层-业务逻辑层-数据访问层

三层架构和MVC是两个东西。 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页面(类)对应MVC中的Co...
  • m0_37033566
  • m0_37033566
  • 2016年12月21日 16:50
  • 9872

黑马程序员:数据访问层,DAO模式

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- DAO模式好处,组成 1.软件开...
  • u011004873
  • u011004873
  • 2013年10月13日 17:09
  • 1106

中间件-数据访问层

单机情况下数据库在不同语言,不同平台都有各自数据库访问组件,各种类似odbc、jdbc的封装以及orm的处理都已经相当成熟。 数据库压力越来越大,处理方法是优化应用,减少压力。二是对数据库进行读写分...
  • qq_28299831
  • qq_28299831
  • 2015年11月13日 17:01
  • 624
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:轻松搞定数据访问层[续]
举报原因:
原因补充:

(最多只允许输入30个字)