当前位置: 首页 > news >正文

【ASP.NET MVC】使用动软(一)(9)

一、解决的问题

前文为解决数据库操作设计的 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三层,关于三层的调用,后文再介绍。

http://www.lryc.cn/news/113579.html

相关文章:

  • 【Jsp课设】3款基于JavaWeb的学生选课管理系统
  • 系统架构设计师笔记第35期:表现层框架设计
  • 力扣 -- 467. 环绕字符串中唯一的子字符串
  • Hi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs
  • 面试热题(字符串相加)
  • 我的创作纪念日【第一个2048day】
  • 内网穿透-————SSH远程连接树莓派
  • 一键开启ChatGPT“危险发言”
  • RISC-V基础之函数调用(一)简单的函数调用(包含实例)
  • apt、aptitude、apt-get/apt-cache语法的区别
  • 华为认证 | HCIA和HCIP有啥区别?
  • JavaScript基础知识
  • vue2 todoapp案例(静态)
  • qt5.14 和 qt5.15的区别
  • 如何使用自己域名进行远程访问内网群晖NAS 6.X
  • PHP判处重复延长队列执行时间
  • flask中的应用上下文
  • cocos creator 的input.on 不生效
  • WFPlayer
  • Netty面试题
  • 基于Home Assistant远程开门
  • Docker相关的参数配置
  • 【CSS3】CSS3 2D 转换 - scale 缩放 ③ ( 使用 scale 设置制作可缩放的按钮案例 )
  • Stable Diffusion教程(6) - 图片高清放大
  • freeswitch 1.10.10-dev录音早期媒体卡通道的bug分析
  • Zebec Protocol ,不止于 Web3 世界的 “Paypal”
  • Gcd 2023牛客暑期多校训练营6 G
  • 常用C++编译器推荐
  • C++QT教程1——QT概述(下载与安装)
  • 在oracle SQL中创建返回表的函数