使用简单ORM开发框架进行快速开发
第一部分ORM快速开发框架介绍
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
ORM快速开发框架分为两部分,一部分为ORM核心类库,用于系统与数据库之间的操作交互和实体类与SQL语句之间的转换。另一部分为ORM自动生成工具,用于实体类,前台HTML代码,业务逻辑调用代码的自动生成。
第二部分 使用简单ORM框架进行快速开发
我们以一个简单的新闻系统作为实例来讲解如何使用ORM框架进行快速开发。
一 新闻系统功能介绍
二 业务流程定义
(1)新闻添加
正常流程:用户进入新闻添加页面,输入标题,内容等信息,点提交按钮,完成新闻录入操作。
异常流程:如果用户输入的数据不合法或没有输入标题,内容等信息,系统应该给与提示信息告知用户。
(2)新闻修改
前置条件:用户进入新闻查询页面,进行查询,系统返回新闻查询列表。
正常流程:选择要修改的新闻点击,打开新闻修改页,修改完毕,点保存完成修改操作。
异常流程:如果用户输入的数据不合法或没有输入标题,内容等信息,系统应该给与提示信息告知用户。
(3)新闻删除
前置条件:用户进入新闻查询页面,进行查询,系统返回新闻查询列表。
正常流程:用户选择要删除的新闻点【删除】,系统出现【确认删除?】对话框,点【确认】,完成新闻删除。
异常流程:如果此信息不存在或用户在【确认删除?】对话框,点【否】,则删除操作停止。
(4)新闻查询
前置条件:用户进入新闻查询页面。
正常流程:用户输入新闻标题,点提交,页面返回查询信息的列表。
异常流程:如果查询的信息不存在,则页面返回【您查询的信息不存在】。
三 数据库设计
数据库名称:ORMNewsSystem
表名:ORMNewsTable
表结构:
字段名
|
字段类型
|
是否主键
|
默认值
|
是否可空
|
说明
|
Id
|
int
|
是
|
|
否
|
新闻ID
|
Title
|
nvarchar(50)
|
|
|
否
|
新闻标题
|
Content
|
ntext
|
|
|
是
|
新闻内容
|
CreateDate
|
datetime
|
|
Getdate()
|
|
创建日期
|
四 页面原型设计
页面原型法是一种表达需求和实现软件之间真实程度的很好的表达方式,是在系统未开发出来时,与客户进行沟通的重要方式。通过原型法可以更小的缩短开发与客户需求之间的理解差距,是需求获取和分析阶段的重要的手段之一。
(1)查询页面
(2)添加页面
(3)修改页面
(4)详细页
五 建立解决方案
新闻系统的解决方案分为两个项目,一个项目为Web站点项目,主要实现系统的页面层和业务逻辑层。
另一个为ORMModel类库项目,主要存在数据库与类之间的对应关系(O-R-M)。
两个工程必须引用ORM快速开发框架的核心DLL【SoftWare.SimpleORM.Library.dll】。
Web项目中的Web.config配置如下
<appSettings>
<!--定义ORM数据库访问链接字符串-->
<add key="ORMConnectionString" value="Server=.;database=ORMNewsSystem;uid=sa;pwd=sa;"/>
<!--定义ORM数据库访问提供者-->
<add key="ORMDataBaseProvider" value="System.Data.SqlClient"/>
</appSettings>
六 ORM实体类生成
(1) 打开【ORM生成工具】。
(2)设置要生成的数据库信息,一级批量生成目录【如下图】。
(3)完成批量生成,并把生成后的代码拷贝到项目中。
七 完成业务逻辑
(1)完成模型页面到aspx页面的转换,输入部分可以使用工具自动生成前台代码。
(2)为【添加】,【修改】,【查询】等添加业务逻辑代码,业务逻辑代码可以直接使用生成工具生成。
(3)必须引用的命名空间
using ORMNewsSystem.Model;
using SoftWare.SimpleORM.Library;
(4)添加逻辑
ORMNewsTable model = new ORMNewsTable();
//model.id = (int)this.txtid.Text.Trim();
model.content = this.txtContent.Text.Trim();
model.title = this.txtTitle.Text.Trim();
model.createdate = DateTime.Now;//日期类型不要使用sql server的默认值 防止web服务器与数据库服务器日期不一致
bool result = false;
int identityId = 0;
result = ORMManager.ORMMangerInstance.CreateInsertSQL(model, out identityId);
if (result)
{
Response.Write("新闻添加成功");
}
else
{
Response.Write("新闻添加失败");
}
(5)修改逻辑
public partial class NewsEdit : System.Web.UI.Page
{
private string newsid;//记录新闻Id
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Id"] == null)
{
Response.Write("<script>alert('新闻ID参数传递失败');history.back(-1);</script>");
return;
}
else
{
newsid = Request.QueryString["Id"].ToString();
}
if (!Page.IsPostBack)
{
BindNewsEdit();
}
}
/// <summary>
/// 查询代码
/// </summary>
protected void BindNewsEdit()
{
string strOrderBy = string.Empty;
string strWhere = " AND Id="+newsid;//查询条件
ORMNewsTable model = new ORMNewsTable();
model = ORMManager.ORMMangerInstance.CreateSelectSingleSQL(model, strWhere, strOrderBy);
this.txtTitle.Text = model.title;
this.txtContent.Text = model.content;
}
/// <summary>
/// 更新代码
/// </summary>
protected void btnSave_Click(object sender, EventArgs e)
{
//获取原对象的数据
string strOrderBy = string.Empty;
string strWhere = " AND Id=" + newsid;//查询条件
ORMNewsTable model = new ORMNewsTable();
model = ORMManager.ORMMangerInstance.CreateSelectSingleSQL(model, strWhere, strOrderBy);
//创建新的对象
model.content = this.txtContent.Text.Trim();
model.title = this.txtTitle.Text.Trim();
string insertSQL = string.Empty;
bool result = false;
int identityId = 0;
result = ORMManager.ORMMangerInstance.CreateUpdateSQL(model, out identityId);
if (result)
{
Response.Write("新闻修改成功");
}
else
{
Response.Write("新闻修改失败");
}
}
}
(6)查询,删除逻辑
public partial class NewsList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindNewsList();
}
}
/// <summary>
/// 查询代码
/// </summary>
protected void BindNewsList()
{
IList<ORMNewsTable> list = new List<ORMNewsTable>();
string strOrderBy = string.Empty;
strOrderBy = " Id ASC ";//排序规则
string strWhere = string.Empty;//查询条件
string title = string.Empty;
title = this.txtTitle.Text.Trim();
if (title.Length > 0)
{
strWhere = " AND Title LIKE '%" + title + "%'";
}
ORMNewsTable model = new ORMNewsTable();
list = ORMManager.ORMMangerInstance.CreateSelectSQL(model, strWhere, strOrderBy);
//绑定控件代码
gvList.DataSource = list;
gvList.DataBind();
}
/// <summary>
/// 删除代码
/// </summary>
protected void gvList_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int newsId = 0;
int.TryParse(gvList.Rows[e.RowIndex].Cells[0].Text, out newsId);
ORMNewsTable model = new ORMNewsTable();
string strWhere = string.Empty;
bool result = false;
int identityId = 0;
strWhere = " AND Id= " + newsId.ToString();
result = ORMManager.ORMMangerInstance.CreateDeleteSQL(model, strWhere, out identityId);
if (result)
{
Response.Write("新闻删除成功");
}
else
{
Response.Write("新闻执行失败");
}
BindNewsList();//重新绑定
}
/// <summary>
/// 分页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvList.PageIndex = e.NewPageIndex;
BindNewsList();
}
/// <summary>
/// 查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSearch_Click(object sender, EventArgs e)
{
gvList.PageIndex = 0;
BindNewsList();
}
}
(7)查看详细信息逻辑
public partial class NewsShow : System.Web.UI.Page
{
private string newsid;//记录新闻Id
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Id"] == null)
{
Response.Write("<script>alert('新闻ID参数传递失败');history.back(-1);</script>");
return;
}
else
{
newsid = Request.QueryString["Id"].ToString();
}
if (!Page.IsPostBack)
{
BindNewsShow();
}
}
/// <summary>
/// 查询代码
/// </summary>
protected void BindNewsShow()
{
string strOrderBy = string.Empty;
string strWhere = " AND Id="+newsid;//查询条件
ORMNewsTable model = new ORMNewsTable();
model = ORMManager.ORMMangerInstance.CreateSelectSingleSQL(model, strWhere, strOrderBy);
this.lblTitle.Text = model.title;
this.lblContent.Text = model.content;
this.lblCreateDate.Text = model.createdate.ToString();
}
}
八 系统演示
请直接看代码演示。
演示项目下载地址:http://d.hongxuecn.com/ORMNewsSystem.rar
开发工具下载地址:http://d.hongxuecn.com/Tool.rar
开发框架下载地址;http://d.hongxuecn.com/Library.rar
本文档doc文件整体下载地址:http://d.hongxuecn.com/help.rar
九 共享学习
这套框架和开发工具是业余时间开发完成的,没有经过专业的测试,在这里与大家分享出来,一起讨论交流,里面有很多问题和设计不足的地方,请大家批评指正。
分享到:
相关推荐
CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,数据操作采用Lamada表达式来表示,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作 数据连接以编程方式进行配置,支持多个...
综上所述,ORM开发框架为开发人员提供了便利的数据库操作手段,通过对象化的方式简化了与数据库的交互,支持多种数据库系统,利用Linq进行高效查询,具备快速分页功能,并且具备完善的事务处理机制。在实际项目中,...
在现代软件开发中,ORM框架扮演着重要的角色,它使得开发者无需关注底层SQL语句,就能方便地进行数据操作,大大提高了开发效率。 "简单高效"是ORM框架的重要特征。简单意味着易于理解和使用,让开发者能够快速上手...
CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,条件查询采用Lambda表达式来表示,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查询或操作 数据连接以编程方式进行配置,支持多个...
fohu.EntitySharp就是这样一款轻量级的.NET ORM开发框架,它旨在提供高效、简洁的数据库访问解决方案。 **1. 轻量级设计** fohu.EntitySharp的核心理念是轻量级,这意味着它在保证基本功能的同时,尽可能地减小对...
NFine快速开发框架是一款基于.Net技术栈,集成了Entity Framework(EF)、MVC与Bootchart的通用后台管理系统框架。这个框架旨在提供一个高效、便捷的开发环境,帮助开发者快速构建企业级应用,节省时间和精力,提高...
在.NET ORM开发框架领域,EntitySharp2.0具备以下几个核心特点: 1. **轻量级设计**:EntitySharp2.0框架小巧,易于理解和使用,减少了对项目整体体积的影响,同时也降低了学习和维护的成本。它专注于基本的ORM功能...
Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...
NFine快速开发框架是一款专为敏捷开发设计的高效、易用的开源框架,它整合了多种先进的技术,旨在简化企业级应用的开发流程,提高开发效率。NFine框架的核心目标是提供一个统一的开发平台,使得开发者能够更快地构建...
"自己写的ORM很好用"这个标签可能指的是开发者或者团队自行开发了一个ORM框架,并且在实际项目中表现良好。这样的ORM框架可以根据具体需求进行定制,更好地适应项目的特性和业务逻辑。自定义ORM的优势在于可以更紧密...
通过自己动手开发一个简单的ORM框架,你能更好地理解这些高级特性的工作方式,为今后使用现有的ORM框架打下坚实基础。同时,这也是一个很好的学习和实践Java编程、设计模式和数据库交互的好机会。
### 高效使用JavaEE ORM框架 #### ORM框架概述与原理 对象关系映射(Object-Relational Mapping,简称ORM)是一种程序技术,用于将面向对象的应用程序中的数据与底层数据库系统之间的交互桥接起来。在Java开发领域...
ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码可读性。在本案例中,我们将深入探讨SQLite3的ORM框架以及它如何与C++结合使用。 首先,SQLite3是一个轻量级的...
MyBatis是一个半自动化的ORM框架,它允许开发人员直接编写SQL语句,并将结果映射到Java对象上。MyBatis的主要特性包括: - **SQL映射**:将SQL语句与Java对象进行映射。 - **动态SQL**:支持根据条件动态构建SQL...
在本篇“基于Java简易ORM框架实现(二)”中,我们将深入探讨如何构建一个简单的对象关系映射(Object-Relational Mapping,ORM)框架。ORM框架是Java开发中常用的一种技术,它允许开发者以面向对象的方式操作数据库,...
这里,我们将以一个简单的自定义ORM框架为切入点,了解其基本原理和实现。 首先,我们要明确ORM框架的核心功能:数据对象(DO)与数据库表之间的映射、CRUD(创建、读取、更新、删除)操作的自动化以及事务管理。在...
C#.NET快速开发框架_V1.1程序 NFine是基于C# 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展,让Web开发更迅速、简单。能解决60%重复工作。为您节约更多时间...
在Java、.NET等编程环境中,ORM框架极大地简化了数据库操作,提高了开发效率,并且提高了代码的可移植性。 标题中的“orm框架”指的是这一类技术的总称,它通过建立对象模型与数据库表之间的映射关系,实现了数据的...