ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)
前言:由于这段时间公司的事情比较的繁忙,每天都要学习新的东西,所以好久没有写博客了,今天抽空写写博客来记录我这段时间研究的东西,给自己加深一下印象,我用easyUI的组件开发了一个简单操作数据库的小样例,一些常用的数据库操作都实现了,希望能和博客园里面的博主们交流交流意见。
首先我用的开发环境是Visual Studio 2010,ASP.NET MVC2.0,SQL SERVER2005,我用的NHibernate的版本是1.2.1,Spring.net的版本是1.1.0。
首先在这里将我的疑惑先说出来,希望有人能够给我解答解答,在这里谢过了,我在用版本的时候我发现NHibernate1.2.1和spring.net1.1.0(低版本)结合最好,Nhibernate3.0和spring.net 1.3.1(高版本)结合做好,不知道我的认为正确吗?但是低版本的话不能使用Nhibernate.Linq,只有Nhibernate3.0以上的版本支持Nhibernate,但是高版本的话我们项目里面有一个功能我们没有做出来,就是我们故意把数据库的连接字符串写错误,然后我执行不经过数据操作的页面的话,比如这个页面我就输出一句话,但是也会报错,说无法连接数据库,用户登录失败,但是我想要的是在没有操作数据库的页面可以正常显示,在操作数据库的页面在提示错误即可?不知道哪位博友有什么好方法呢?这种效果在低版本下面我可以实现了。
- 第一步:建立数据库
(1) 打开数据库SQL Server 2005,新建一个数据库bjk241,然后再此数据库中新建一张表,起名为:User_DepInfo,用来存放我们录入的数据,表的建立样式如下图所示:
- 第二步:建立项目,类库等
(1) 打开Visual Studio 2010集成开发环境,在Visual Studio 2010中建立一个ASP.MVC 2.0的项目,给项目其名称是NewKJ241,将会生成微软封装好的自带的MVC的整个架构结构,然后在项目里面建立几个类库,用来存放我在后面建立的一些项目,当我们建立完成之后如图所示:
(2) 当我们看到这张图的时候,我们是不是在疑惑这都是干什么的呢?不要着急,下面我就介绍一下各个项目和类库的作用。
1) 首先我们看到了NewKJ241里面的内容和我们刚建立的不一样吧,那是因为我重新建立了几个文件夹,将没有的文件夹介绍一下,Configs文件夹里面放的是spring.net的XML节点,实现的作用是链接数据库和映射整个框架,下面我会详细介绍的,dlls文件夹里面放的是我们所要引用的dll,如图所示:
,easyUI文件夹里面是存放的是我们需要引用的easyUI的类库,其他的都是建立的时候自动生成的,后面会讨论的。
2) NewKJ241.Model类库的作用是存放映射的数据库的文件。
3) NewKJ241.IDao类库的作用是实现了我们所需要的在项目中实现数据库方法的接口。
4) NewKJ241. NhibernateDao类库的作用是实现了IDao的接口,完成了接口所要实现的方法的代码。
5)NewKJ241.IBLL类库的作用是实现了我们在项目中要使用Spring.NET所要使用的接口,和NewKJ241.IDao接口的写法一模一样。
6)NewKJ241.BLL类库的方法是实现了Nhibernate的实现方法,继承自IBLL项目,是为了使用Spring.NET所写的方法。
下面我就讲我写的东西详细的讲述一下,有什么不足或者缺点我们可以讨论。
- 第三步:NHibernate映射文件
(1) 首先我们要映射出数据库中表的信息的文件,这里我们怎么映射呢,那么多的代码??别着急,我们可以用一个自动生成映射文件的组件CodeSmith软件,这个软件可以快速的帮助我们生成映射文件,关于这个软件怎么使用可以看我以前写的篇博客,那里详细的叙述了如何使用这个软件:http://www.cnblogs.com/hanyinglong/archive/2012/04/21/2462302.html。
(2) 接下来我们在NewKJ241.Model里面建立一个文件夹Mappings,在这个文件夹里面我们存放了映射的文件,生成之后附加到项目中如图所示:
1) UserDepInfo的作用是定义数据库中的字段,再用CodeSmith生成的时候模式字段属性是不加Virtual的,我们人为的给字段属性加上,代码如下:
protected int _id;
protected int _depID;
protected string _depName;
public UserDepInfo() { }
public UserDepInfo(int depID, string depName)
{
this._depID = depID;
this._depName = depName;
}
public virtual int Id
{
get { return _id; }
set { _id = value; }
}
public virtual int DepID
{
get { return _depID; }
set { _depID = value; }
}
public virtual string DepName
{
get { return _depName; }
set
{
if (value != null && value.Length > 50)
throw new ArgumentOutOfRangeException("Invalid value for DepName", value, value.ToString());
_depName = value;
}
}
2) 然后映射文件的代码如下:注意,在这里我们需要把这个XML文件改成嵌入的资源,不然后面我们事先不了功能,怎么改呢?很简单,右键——属性——生成操作改成嵌入的资源,这样就OK了,前期准备工作完成了下面我们就开始写方法了。在这里又看不懂是什么意思的,可以看我的博客:http://www.cnblogs.com/hanyinglong/archive/2012/04/20/2459314.html。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NewKJ241.Model.UserDepInfo"
namespace="NewKJ241.Model.UserDepInfo">
<class name="NewKJ241.Model.UserDepInfo,NewKJ241.Model" table="User_DepInfo" lazy="false">
<!--下面是使用缓存所使用的一句话,但是本项目里面的二级缓存注释掉了,所以这里也注释-->
<!--<cache usage="read-write"/>-->
<!--部门表主键ID-->
<id name="Id" type="Int32" unsaved-value="null">
<column name="ID" length="4" sql-type="int" not-null="true" unique="true"/>
<generator class="native" />
</id>
<!--部门表ID-->
<property name="DepID" type="Int32">
<column name="DepID" length="4" sql-type="int" not-null="false"/>
</property>
<!--部门表名称-->
<property name="DepName" type="String">
<column name="DepName" length="50" sql-type="varchar" not-null="false"/>
</property>
</class>
</hibernate-mapping>
- 第四步:建立Dao接口,实现操作数据库的方法
(1) 在NewKJ241.IDao类库下面新建一个类,起名为:IUserDepInfoDao,然后在此类中写要实现方法的接口,代码如下:
//where表明了对类型变量T的约束关系,where T : class表示类型变量T是继承自class或者class本身
public interface IUserDepInfoDao<T> where T : class
{
/// <summary>
/// 获取实体
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体</returns>
T Get(object id);
/// <summary>
/// 获取实体
/// </summary>
/// <param name="id">主键</param>
/// <returns>实体</returns>
T Load(object id);
/// <summary>
/// 插入实体
/// </summary>
/// <param name="entity">实体</param>
/// <returns>插入的数据</returns>
object Save(T entity);
/// <summary>
/// 修改实体
/// </summary>
/// <param name="entity">实体数据</param>
void Update(T entity);
/// <summary>
/// 保存或者修改实体
/// </summary>
/// <param name="entity">实体数据</param>
void SaveOrUpdate(T entity);
/// <summary>
/// 删除实体
/// </summary>
/// <param name="id">主键ID</param>
void Delete(object id);
/// <summary>
/// 删除实体
/// </summary>
/// <param name="odList">主键ID的集合,删除多个项</param>
void Delete(string idList);
/// <summary>
///读取如果用户不输入任何信息进行查询的方法
/// </summary>
/// <param name="sort">按照某个字段进行排序</param>
/// <param name="order">按照某个字段进行排序</param>
/// <returns></returns>
IList<UserDepInfo> loadByAll(string sort, string order);
/// <summary>
/// 读取用户输入条件进行查询的方法
/// </summary>
/// <param name="sort">按照某个字段进行排序</param>
/// <param name="order">按照某个字段进行排序</param>
/// <param name="name">只用户输入的信息</param>
/// <returns></returns>
IList<UserDepInfo> loadAllCheck(string sort, string order, string name);
/// <summary>
///
/// </summary>
/// <param name="total">总的数量</param>
/// <param name="page">当前的页数</param>
/// <param name="rows">每页所显示的数量</param>
/// <param name="order">按照某个字段进行排序</param>
/// <param name="sort">按照某个字段进行排序</param>
/// <param name="DepName">只用户输入的信息</param>
/// <returns></returns>
IList<UserDepInfo> LoadAllByPage(out long total, int page, int rows, string order, string sort, string DepName);
}
这里就没什么说的了,写法都很固定!!
- 第五步:建立NhibernateDao项目,实现IDao接口的方法
(1) 在NewKJ241.Nhibernate类库下面建立类,起名为:UserDepInfoDao,在该方法中继承自IDao接口,实现了IDAO接口里面的所有方法,在书写本代码的时候,我们必须引入dll,引入的dll如图所示:
代码如下:
public class UserDepInfoDao<T> : HibernateDaoSupport, IUserDepInfoDao<T> where T : class
{
public T Get(object id)
{
return this.HibernateTemplate.Get<T>(id);
}
public T Load(object id)
{
return this.HibernateTemplate.Load<T>(id);
}
public virtual object Save(T entity)
{
return this.HibernateTemplate.Save(entity);
}
public void Update(T entity)
{
this.HibernateTemplate.Update(entity);
}
public void SaveOrUpdate(T entity)
{
this.HibernateTemplate.SaveOrUpdate(entity);
}
public void Delete(object id)
{
var entity = this.HibernateTemplate.Get<T>(id);
if (entity == null)
{
return;
}
else
{
this.HibernateTemplate.Delete(entity);
}
}
public void Delete(string idList)
{
string[] idl = idList.Split(',');
int len = idl.Length;
for (int i = 0; i < len; i++)
{
var entity = this.HibernateTemplate.Get<T>(int.Parse(idl[i].ToString()));
if (entity == null)
{
return;
}
else
{
this.HibernateTemplate.Delete(entity);
}
}
}
public IList<UserDepInfo> loadByAll(string sort, string order)
{
string hql = "from UserDepInfo order by " + sort + " " + order;
return this.HibernateTemplate.Find<UserDepInfo>(hql).ToList();
}
public IList<UserDepInfo> loadAllCheck(string sort, string order, string name)
{
string hql = "from UserDepInfo where DepName like ? order by " + sort + " " + order;
return this.HibernateTemplate.Find<UserDepInfo>(hql, new object[] { "%" + name + "%" }).ToList();
}
public IList<UserDepInfo> LoadAllByPage(out long total, int page, int rows, string order, string sort, string DepName)
{
IList<UserDepInfo> list = null;
if (DepName == null)
{
list = this.loadByAll(sort, order);
}
else
{
list = this.loadAllCheck(sort, order, DepName);
}
total = list.LongCount();
list = list.Skip((page - 1) * rows).Take(rows).ToList();
return list;
}
}
哎,工作一天了,累了,回学校了,明天继续,今天写的这些都是基础,后面还会在写这个项目的,一直到这个项目写完!!,也是最有知识点了,所谓学习吗,一步一个脚印,慢慢来吧!!!
下载地址:http://www.chuxinm.com/Shop/Detail/Detail?id=b88e9907dbaa4b3db297443081ab238d
转载于:https://www.cnblogs.com/hanyinglong/archive/2012/05/24/2517000.html
ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)相关推荐
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- ASP.NET MVC实践系列5-结合jQuery
现在做web开发肯定都听说过jQuery,jQuery在ASP.NET MVC被支持的很好,而且据说vs2010中也会集成进去,所以使用ASP.NET MVC了解jQuery肯定有莫大的好处,所以这里 ...
- asp.net MVC的EF与easyui DataGrid数据绑定
页面代码 @{Layout = null; }<!DOCTYPE html><html> <head><meta name="viewport&qu ...
- C# ASP.NET MVC 微信和支付宝H5支付开发及Demo
微信和支付宝H5支付 最近开发任务遇到了一个要在手机浏览器里面调起微信和支付宝去支付的开发需求,以前都是做的扫码支付或者JSAPI都是在软件内部支付的,没遇到过在自己浏览器内唤醒微信或者支付宝的支付这 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)
前言目录 前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进 ...
- Spring.net与Asp.net Mvc结合示例《转载》
一.介绍 因为项目要用到Ioc框架,所以要为Ioc框架选型,优秀的Ioc框架好几款,例如:sping.net,castle,unity--当然还不止三款,还有其它的Ioc框架,castle跟unity ...
- 使用 asp.net mvc和 jQuery UI 控件包
如果你使用asp.net mvc,而且使用的js库是jQuery, 那么一定别错过使用jQuery UI,使用jQuery UI 有个一套的mvc套件值得使用jQuery ASP.Net MVC Co ...
- ASP.NET MVC 3.0学习系列文章(开始学习MVC)
Visual Studio 11安装ASP.NET MVC4体验 Nic Pei 2011-09-27 23:15 阅读:2891 评论:11 微软build大会.net平台大事汇总 Nic Pe ...
- Pro ASP.NET MVC 3 Framework 译文(一)
ASP.NET MVC3简介 2011年10月22日 12:49 对于使用微软平台的开发人员来说,ASP.NET MVC框架有了一个根本的转变.它强调"干净的"体系.设计模式.可测 ...
最新文章
- Python图像处理,cv2模块,OpenCV实现人脸检测蔡徐坤
- js 选择 checkbox
- php将字符串转换为json格式,js中将字符串转换为json格式的三种方法
- 如何安装 Linux 下的 Adobe Reader
- C++(STL):29 ---关联式容器map 迭代器
- pmp项目变更的流程图_PMP流程图
- 知到大学生创业基础(上海理工大学)期末考试试题汇总(含答案)
- 测试用例设计方法————正交表法
- 对称矩阵的逆矩阵也是对称矩阵吗
- SIP协议详解eXosip源码库用法分析
- 美团2015年校园招聘部分笔试题
- VIVO内置应用卸载指南(IQOO NEO5为例)
- 头条号优化 如何提高头条文章阅读量
- PyTorch实现Word2Vec
- php读取pdf文件乱码_PHP读取文件,解决中文乱码UTF-8的方法分析
- 计算机入会大会新生发言稿,新生大会发言稿(精选7篇)
- PHP实现微信公众号H5支付
- LaTeX公式编辑和希腊字母
- 富士施乐3065扫描教程_精简高效灵活 富士施乐3065使用测试
- 美国B2签证申请要准备哪些材料?
热门文章
- python职场应用_大学粗略学习过Python,在进入职场后如何进一步学习Python
- linux shell 等待输入_linux运维——基础篇
- Windows和VMware虚拟机相互间无法复制的解决方案
- 基于matlab的状态反馈与极点配置
- eclipse html自动对齐,MyEclipse和Eclipse中jsp、html格式化自动排版问题
- oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
- windowbuilder点击按钮出现新界面_掌握这几招,轻松设计出高点击率的行为召唤按钮...
- 如何用 J-Link 来串口调试?
- 八千字硬核长文梳理Linux内核概念及学习路线
- 来,看看你的单片机程序有多大!