(全力支持博客实名化)
1
系统的数据层采用 Spring.net 框架。
项目对数据的要求
1) 每一个业务表的业务信息只能注销,不能物理删除(也就是我们经常说的保存历史数据)
2)不能将表的失效信息暴露在实体类中
2 解决流程
解决的流程
Step one 通过Session中的SessionFactory 查找到业务实体类的ORM信息
在这里,我们最关注ORM信息中的有两点
1) 业务实体类 -------- 数据库中表
2) 业务实体类的主键属性 ---数据库中列信息
补充说明:
在这边我们支持类的映射信息配置的主键主要包含了三个组成方式
1 类的主键类型为复合主键且子主键为key-property
2 类的主键类型为复合主键且子键中包含了key-property 也包含了key-many-to-one
3 类的主键类型直接为property
Step Two 根据ORM信息 取对应数据库中表的列 对应的业务实体属性值
Step Three 将Step Two 提取出来的的信息 转化成我们需要数据格式
属性 属性说明
TableName 表名
IdentifierColumnNames 主键对应数据库表中的列名
identifierValues 业务实体中的主键属性值
KeyNum 主键的列数目
Step Four 根据 step three 的信息 拼装SQL语句并执行
3类的设计
类图
3.1 ClassMappingInfo 类
功能说明:存储了类和数据库表之间的NHibernate配置信息
属性
属性名
属性含义
属性数据类型
TableName
表名
String
IdentifierColumnNames
主键列名
String[]
IdentifierValues
主键对应的对象属性值
ColumnLength
主键列的数目
Int
3.2 ClassMappingInfoBuilder类
功能说明:
根据类和Isession来获取ClassMappingInfo
函数
public ClassMappingInfo Get(object obj, ISession session)
参数 :
Obj :数据持久类
Session:NHibernate 的Session实例
返回类型 ClassMappingInfo
3.3 DeleteCommandCreater类
根据ClassMappingInfo 映射信息,来生成删除功能的sql语句
public override string GetSqlCommand()
返回类型 string
4 核心代码说明
下面是核心函数
参数接口为 业务实体对象的类型 ,业务实体对象,spring.net 中的Session对象
实现的功能是:
提取业务实体对象的主键信息(包含实体中主键属性值和数据表中的主键列的信息)
posted on 2009-02-18 22:08 徐文兵 阅读(1692) 评论(0) 编辑 收藏 所属分类: 开源组件
Powered by: 博客园 Copyright © 徐文兵