年底小回顾(MVC+NHibernate+Jquery+JqueryUI——网站)
1、附:利用MVC+NHibernate+Jquery+JqueryUI这些技术可以做出一个比较好的前台+后台网站。下面是本人对这些技术的笔记,作为私人年底小结吧。呵呵
好久没写文章了,感觉下不了笔吐不出字来。也许想说的太多,也许压根就不会写了。好吧,省时间,下面就以新增用户功能为例吧。
2、练习用例:

相关DLL:

3、要点:
(1)NHibernate作用
(2)NHibernate配置
(3)建用户表、实体以及建立相应的映射
(4)定义数据访问层接口并实现
(5)定义业务层接口并实现
(6)控制器Controller实现
(7)视图层展现
(1)NHibernate作用:
NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。
参阅百度百科:NHibernate。
(2)NHibernate配置:
1、配置文件:
2、不同的数据库,NHibernate的配置稍有区别。这里练习用的数据库是MSSQL,所以我们的配置如下:
<?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.OracleClient.dll provider for Oracle from MS -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=WADE-PC\SQLEXPRESS;initial catalog=TestDB;Integrated Security=SSPI</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <property name="query.substitutions">true , false , yes 'Y', no 'N'</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="hbm2ddl.keywords">none</property> </session-factory>
</hibernate-configuration>
在此附上Oracle的配置以便自己以后用:
<!-- This is the System.Data.OracleClient.dll provider for Oracle from MS -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">
<!--Data Source=SDCGS;user=SDCGS;password=SDCGS2013;Pooling=true;Min Pool Size=;Max Pool Size=-->
Data Source=DMP;user=website;password=website;Pooling=true;Min Pool Size=;Max Pool Size= </property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true , false , yes 'Y', no 'N'</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="hbm2ddl.keywords">none</property> </session-factory>
</hibernate-configuration>
(3)建用户表、实体以及建立相应的映射:
①用户表:

②实体类:


注意:1、Serializable——表示可序列化与反序列化。Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
2、DataContract——数据契约。服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送
③实体映射:
文件——
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Entity" namespace="Entity">
<class name="UserInfo" table="UserInfo">
<id name="UserId" column="UserId" type="int" unsaved-value="0">
<generator class="native" />
</id>
<bag name="UserRoleList" inverse="true" lazy="true" >
<key column="UserId" />
<one-to-many class="UsersInRoles" />
</bag>
<property column="UserName" type="String" name="UserName" />
<property column="PassWord" type="String" name="PassWord" />
</class>
</hibernate-mapping>
注意:UserInfo.hbm.xml需要设置”属性—复制到输出目录—始终复制”,以及“属性—生成操作—嵌入的资源“。要不然会报错找不到映射文件。
(4)定义数据访问层接口并实现:
①定义数据访问层接口

定义接口代码:(新增用户对应的方法:Save())
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity;
namespace IDao
{
public interface IUserInfoDao
{ UserInfo Get(int userId);
IList<UserInfo> LoadAll();
object Save(UserInfo entity);
void Update(UserInfo entity);
void Delete(UserInfo entity);
UserInfo Load(object id);
IList<UserInfo> GetListBySql(string sql);
IList<UserInfo> GetListByHQL(string HQL);
IList<Object[]> GetObjectsByHQL(string HQL);
UserInfo GetUserInfoByNameAndPwd(string userName, string pwd);
}
}
②数据访问层接口实现:

实现代码:(新增用户对应的方法:Save())
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IDao;
using NHibernate;
using Entity; namespace Dao
{
public class UserInfoDao : IUserInfoDao
{
/// <summary>
/// 添加
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public object Save(UserInfo entity)
{
ISession session = NHibernateHelper.getSession();
try
{
var id = session.Save(entity);
session.Flush();
return id;
}
finally
{
session.Close();
}
}
}
}
(5)定义业务层接口并实现
①定义业务层接口

定义代码:(对应的方法Save())
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity; namespace IService
{
public interface IUserInfoService
{
UserInfo getEntityById(int Id);
IList<UserInfo> getAllEntitys();
int AddEntity(UserInfo ar);
void Delete(UserInfo ar);
void UpDate(UserInfo ar);
IList<UserInfo> GetListBySql(string sql);
IList<UserInfo> GetListByHQL(string HQL);
IList<Object[]> GetObjectsByHQL(string HQL); UserInfo GetUserInfoByNameAndPwd(string userName, string pwd);
}
}
②业务层接口并实现

实现代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IService;
using IDao;
using Entity;
using Dao; namespace Service
{
public class UserInfoService : IUserInfoService
{
private IUserInfoDao dao = new UserInfoDao(); public int AddEntity(UserInfo ar)
{
return int.Parse(dao.Save(ar).ToString());
} }
}
(6)控制器Controller实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Transactions;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using DotNetOpenAuth.AspNet;
using Microsoft.Web.WebPages.OAuth;
using WebMatrix.WebData;
using BLUS.Filters;
using BLUS.Models;
using Service;
using IService;
using Entity; namespace BLUS.Controllers
{
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
IUsersInRolesService sr = new UsersInRolesService();
UserInfo user = new UserInfo();
user.UserName = model.UserName;
user.PassWord = model.Password;
int userId = service.AddEntity(user); UsersInRoles userRole = new UsersInRoles();
userRole.UserId = user;
Entity.Roles rl = new Entity.Roles();
rl.RoleId = 2;
rl.RoleName = "普通用户";
userRole.RoleId= rl;
sr.AddEntity(userRole);
UserInfo userInfoLogin = service.getEntityById(userId);
Session["userInfoLogin"] = null;
Session["userInfoLogin"] = userInfoLogin;
return RedirectToAction("Index", "Home");
}
catch (Exception e)
{
ModelState.AddModelError("", e);
}
} // If we got this far, something failed, redisplay form
return View(model);
}
}
}
(7)视图层展现:(这里可以省去,视图层的展现)
小结:MVC+NHibernate+Jquery+JqueryUI,结合这些技术可以建立一个功能和性能一般的网站。我也是第一次运用NHibernate,有很多地方都不怎么理解。有待今后继续研究。
年底小回顾(MVC+NHibernate+Jquery+JqueryUI——网站)的更多相关文章
- MVC+Nhibernate+jquery+easyui递归实现多级菜单
1.新建访问的控制器动作返回视图,在视图中使用easyui的treegrid插件来得到后台得到的json数据显示多级菜单 public ActionResult Menu() { return Vie ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
“MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构.登录窗口.以及主界面) 一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增 ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增删改查的地步.测试好之后再来看这篇文章,我的主框架相对来说简答一点,重点还是实现系统的功能,以及对Jquery-Eas ...
- MVC中JQuery文件引入的路径问题,@Url.Content函数
今天写了个MVC的Demo,文件夹结构很简单,如下: 利用EF生成Model框架并手工加表字段注解,但在页面上JS验证始终没显示.实在无语. 无意中在浏览器里按F12,看见提示: Failed t ...
- 【ASP.Net MVC】在AspNet Mvc使用JQuery AutoComplete组件
在AspNet Mvc使用JQuery AutoComplete组件 官方文档: http://api.jqueryui.com/autocomplete/#entry-examples 要使用JQu ...
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成)
“MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成) 一.这篇文章主要是要实现:图片新闻的添加,无刷新图片的上传,以及添加新闻静 ...
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现)
“MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第四篇(用户管理功能的实现) 一.前三篇的内容是否对您有帮助呢?如果有的话,请您继续关注这篇吧,这篇主要是实现”用户管理“的 ...
- $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)
知识小回顾之json序列化问题 精髓:支持python的几种数据类型(注意不是对象,不能放对象),其次是tuple变list. ensure_ascii:默认值True,如果dict内含有non-AS ...
- MVC之Ajax.BeginForm使用详解之更新列表 mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表 1.首先,请在配置文件设置如下:(该项默认都存在且为true) <add key="UnobtrusiveJavaScrip ...
随机推荐
- Javascript进阶篇——(DOM—getAttribute()、setAttribute()方法)—笔记整理
getAttribute()方法通过元素节点的属性名称获取属性的值.语法: elementNode.getAttribute(name) 1. elementNode:使用getElementById ...
- Windows服务简单实例
1.定时器使用 partial class TimerService : ServiceBase { public TimerService() { InitializeComponent(); } ...
- Java------------运算符优先级速记口诀
单目乘加位关系,逻辑三目后赋值. 单目:单目运算符+ –(负数) ++ -- 等 乘加(乘除加减):算数单目运算符* / % + - 位:位移单目运算符<< >> 关系:关系单 ...
- OpenGL ES 2.0 曲面物体的构建
球体构建的基本原理构建曲面物体最重要的就是找到将曲面恰当拆分成三角形的策略. 最基本的策略是首先按照一定的规则将物体按行和列两个方向进行拆分,这时就可以得到很多的小四边形.然后再将每个小四边形拆分成两 ...
- c#按键Up和Down对Textbox的内容加1减1
private void textBox_proc1value_KeyDown(object sender, KeyEventArgs e) { Keys key = e.KeyCode; if (e ...
- 各邮箱服务器地址及端口<转>
gmail(google.com) POP3服务器地址:pop.gmail.com(SSL启用端口:995) SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587) 21cn.c ...
- 转载:常见EXE文件反编译工具
PE Explorer V1.99 R5 绿色汉化特别版_强大的可视化汉化集成工具 功能极为强大的可视化汉化集成工具,可直接浏览.修改软件资源,包括菜单.对话框.字符串表等: 另外,还具备有 W32D ...
- LeetCode_String to Integer (atoi)
Implement atoi to convert a string to an integer. int atoi (const char * str); Convert string to int ...
- shell操作mysql
参考: http://blog.csdn.net/hbcui1984/article/details/5125387
- Lucene.net常见功能实现知识汇总
在开发SearchEasy Site SearchEngine(搜易站内搜索引擎)的时候,经常会遇到一些搜索引擎的常见功能如何实现的问题,比如实现相关度百分比显示?如何实现在结果中搜索等等诸如此类常见 ...