Oracle数据库
2026/7/5 2:19:19 网站建设 项目流程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

publicclassOracle : IDBAccessor

{

#region IDBAccessor 成员

privatestringcommandStr =string.Empty;

privatestaticstringconnectionString ="";

privateSystem.Data.IDbConnection oraConnection =newSystem.Data.OracleClient.OracleConnection(connectionString);

publicintExcute()

{

if(oraConnection.State != System.Data.ConnectionState.Open)

oraConnection.Open();

try

{

using(System.Data.IDbCommand command = oraConnection.CreateCommand())

{

command.CommandText = commandStr;

returncommand.ExecuteNonQuery();

}

}

catch(System.Exception)

{

return-1;

}

finally

{

}

}

publicvoidQuery()

{

thrownewNotImplementedException();

}

#endregion

}

其他的几个类型的数据库我们就不一一举例说明了,当然我这里面的接口中并没有考虑把数据库连接也定义成接口,让所有的都从这个接口进行继承,因为这个不是

本章讨论的重点,本章只是简单的分析与设计如何实现通用把数据层访问。

下面我们来说说对象关系映射的实现。

我们比较常见的方式目前就这样的2种方式,第一种方式想必大家都比较了解的,无论是JAVA中的Hibernate还是.NET中的Nhibernate都是这样的方式,以XML文

件的方式把数据库中的表列属性与实体的属性一一对应。第二种方式则是在类文件中硬编码书写数据库列与实体之间的映射关系。

下面我们来分析下这二种方式的利弊:

以上大概描述了各自的有点,下面再阐述下各自的缺点。

当然以上的2种形式各有优缺点,我们已经讲述了XML配置文件中现有的开源框架中采用这种形式的框架有Nhibernate。而采用类文件映射的框架其实有很多,但

是他们的思想相对来说都是一样的。不管是XML文件形式,还是类文件形式,他们的主要观点都是实现如何把实体的属性与数据库表字段的对应,这个才是核心的内容。

下面我们给出一种简单的思路去完成这样的映射,当然我们这里是以类文件形式给出示例。

其实博客园的很多人都写过类文件映射的实例。我这里当然也只是抛砖引玉,不足之处在所难免,还请大家多多提出意见。

我给出的方式是通过特性(Attribute)+反射(Rflection)的思想来实现ORM映射。

具体相应代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

/// <summary>

/// Model中的字段属性特性

/// </summary>

[AttributeUsage(AttributeTargets.All, AllowMultiple =false)]

publicclassPropertyAttribute : Attribute

{

privatestringdbColumnName;

privateboolisPrimary;

privateDbType dbType;

privateobjectdefaultValue;

privateboolisIdentify;

privateintlength;

publicstringDbColumnName

{

get

{

returnthis.dbColumnName;

}

set

{

this.dbColumnName = value;

}

}

publicboolIsPrimary

{

get

{

returnthis.isPrimary;

}

set

{

this.isPrimary = value;

}

}

publicboolIsIdentify

{

get

{

returnthis.isIdentify;

}

set

{

this.isIdentify = value;

}

}

publicDbType DbType

{

get

{

returnthis.dbType;

}

set

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询