一、解决的问题
前文为解决数据库操作设计的 TestMysql 类,仅简单地封装了一个Query函数,代码如下:
public class TestMysql{public static string SqlserverConnectStr = "server=127.0.0.1;charset=utf8;user id=root;persistsecurityinfo=True;database=test;Password=hynu504.";public static DataSet Query(string SQLString){using (MySqlConnection connection = new MySqlConnection(SqlserverConnectStr)){DataSet ds = new DataSet();try{connection.Open();MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);command.Fill(ds, "ds");}catch (MySql.Data.MySqlClient.MySqlException ex){throw new Exception(ex.Message);}return ds;}}}
很显然,一个函数去解决所有数据库中所有表的描述、操作,肯定是远远不够,即使完成系统功能也会使代码非常复杂。因此需要封装更多的功能。
二、ORM
ORM 是 Object Relational Mapping 的缩写。意思是对象关系映射,是对象和关系型数据库之间的数据交互问题的解决方案的一种规范。
简而言之:把数据库中的表、视图等,用类来描述(数据表示),然后在定义的数据基础根据业务逻辑(就是系统需要啦)封装出一个个对类进行操作的功能。——以此实现对数据库的操作。
第一步当然是数据描述,首先了解一下JAVA中所谓POJO的概念:
“Plain Old Java Object”“简单java对象”。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
这与所谓的实体类等概念是比较类似的,可以理解为就是描述数据——不考虑行为、不考虑派生、多态等等!
其实也符合编程解决问题的思想: 以数据为中心,再考虑行为——有了篮球的定义再去设计投篮、传球、运球等操作!
于是就有了所谓的解决问题的层次问题:
实体层(Model 或者 POJO 或者Entity或者Bean 比较近似的概念):往下对数据表进行描述,往上提供给数据访问层操作的对象;
数据访问层(DAL 或者 DAO等等):往下操作的对象为实体类,往上实现用户所需的业务逻辑,本层关心的数据库CURD等操作的具体实现;
业务逻辑层(BLL 或者Server等等):往下对DAL层的操作进行调用,往上提供用户逻辑接口;
以上个人见解,大体意思类似于TCP/IP等网络模型各层功能的划分:各层实现对上一层的支撑和功能实现,对其他层是 ”透明“ 的;
三、动软
动软是可以根据数据库表自动生成对应的 实体、数据访问和业务逻辑层的工具(也包括WEB,一般不用),当然也包括了所需要的DLL和LIB(不同数据库有不同的DLL)。启动界面:
第一步,新建数据库连接:
第二步,选择对应的数据库,以MYSQL为例,点击下一步,填写数据库的连接信息:
第三步,测试连接成功后,点确定,提示需要关闭动软。关闭后重新启动界面:
第四步,新建项目,选择简单三层结构即可
第五步,点击下一步,选择数据库和数据表,然后点击开始生成:
其中命名空间等默认即可,修改后比较麻烦。
生成后会自动弹出生成的目录:
1、BLL:业务逻辑
2、DAL:数据访问
3、Model 实体
4、DBUitity 工具类
5、LIB 对应所需的DLL
将以上五个目录拷贝到工程所在的目录:如前文的TestWeb
最后将四个工程在VS中添加到解决方案:右键解决方案-》添加-》现有项目
添加过程中提示升级,点确认即可:效果如下:
其中LIB不需要添加(也无法添加),它提供了所需要的数据库操作DLL。
以上完成动软自动生成简单的ORM三层,关于三层的调用,后文再介绍。