煤矿智能仓储系统研究与设计
- 仓储粮害虫防治研究进展 [2022-03-03]
- 面向电网企业的仓储配送网络优化... [2022-03-03]
- 基于ISM和BN的危险品仓储系统安... [2022-03-03]
- 转型途中,江苏仓储业期待“轻装... [2022-02-23]
IBatis.NET在移动仓储系统中的应用
1 IBatis概述
IBatis是一种开源的持久化中间件产品, 使得SQL语句或者stored procedures与实体对象更容易映射起来, 用更少的代码获得更多的数据库访问功能。它解决了将Sql语句从代码中分离的问题, 实现了Sql语句到实体的映射。
2 MWH资源层 (Data Access)
资源层主要职责是提供领域层对象的持久化机制和数据读取功能。在MWH中, 资源层从总体分为两大类:“MWH Data Access”和“SAP Service Adapter”。MWH Data Access主要提供MWH系统内部对象持久化和数据访问功能。MWH Data Access主要是封装开源组件“IBatis.NET”。该组件在业界已经有很广泛的应用。IBatis.NET是相对比较成熟的持久化框架。IBatis.NET提供了很好的对象关系映射机制, 比较适应于“充血模型”组件的开发。同时也将业务逻辑和数据库SQL脚本相隔离。既可以提高开发效率, 同时也使得的系统更具有灵活性。IBatis.NET较业界的其它对象关系映射组件相比具有一定的优势。IBatis.NET解决了对象与关系性数据库之间的映射管理, 同时也可以让开发人员对SQL进行自主控制, 从而保证了系统的执行效率。
3 实例分析
MWH项目中的持久化机制是采用IBatis.NET开源框架来实现。MWH软件架构中, 客户要求按“充血模型” (领域模型) 方式来实现, IBatis.NET提供了很好的数据库访问对象与业务实体映射的机制。同时IBatis.NET有具有很大的灵活性, 可以让开发人员在SQL性能和开发效率之间得到平衡。IBatis.NET这个框架能够更好的在.NET应用中设计和实现实体层。这个框架有两个主要的组成部分, 一个是SQL Maps, 另一个是Data Access Objects。
3.1 SQL Maps
SQL Maps是这个框架中最核心的部分。它是整个IBatis数据访问层的核心价值所在。通过使用SQL Maps可以显著的节约数据库操作的代码量。SQL Maps使用一个简单的XML文件来实现从实体到SQL Statement的映射。跟其他的框架或者对象映射工具相比, SQL Maps最大的优势是简单。它需要学习的东西很少, 在连接表或复杂查询时也不需要复杂的scheme。使用SQL Maps, 开发人员可以自由的使用SQL语句。
3.2 Data Access Objects (DAO)
在充血模型中, 一种重要的实现机制就是通过一个通用API层把实体操作的细节封装起来。Data Access Objects允许你通过一个简单接口的来操作数据, 从而隐藏了实现的细节。使用DAO, 可以动态配置应用程序来访问不同的实体存储机制。如果有一个复杂的应用需要用到几个不同的数据库, DAO可以允许建立一个一致的API, 让系统的其他部分来调用。
在MWH中实现持久化层的开发需要完成以下多个步骤:
3.2.1 在领域层定义实体对象类
位置:Domain.XX.Entity.YY。“XX”:代表具体的领域组件, 如:Goods Receiving代买收货, Authorization代买权限认证等。“YY”:代表具体的实体类, 如收货明细对象:Gr Item。举例:收货Item实体类名为:ABB.Mobile WH.Domain.Googs Receiving.Entity.Gr Item;有关实体类的定义, 和普通的类对象的定义没有什么区别, 不在此细说。
3.2.2 创建实体类与数据库的映射Xml文件
位置:Domain.XX.Entity.YY.Maps.ZZ.Xml。“XX”:代表具体的领域组件, 如:Goods Receiving代买收货, Authorization代买权限认证等。“YY”:代表具体的实体类, 如收货明细对象:Gr Item。举例:收货Item实体类名为:ABB.Mobile WH.Domain.Googs Receiving.Entity.Gr Item;ZZ代表具体的映射文件名称, 建议按实体类的名称命名。举例, Gr Item的映射文件:Gr Item.xml。
有关实体类与数据库的映射文件的配置需要完全的遵从IBatis.NET的标准。配置文件中具体元素关系, 如图1。
映射文件举例, 如图2。
配置SQLMap.config文件, 如图3。
4 结束语
仓储管理系统利用IBatis.NET实现了Sql与实体之间的映射, 解决了数据持久化问题, 做到了实体与数据之间的隔离, 使整个系统的架构更加松散。