1.定义接口的好处:

(1) 清楚的看到里面有哪些方法;

 ( 2 )  可以更换实现类;Nhibernate实现件可以更换;

Manger文件夹(另外两个是Model、Mappings文件夹)

首先Model文件内,(对象)类名,对应着数据库中的表名;在类中定义属性(即对应表中的列名)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace NBOWeb.Model
{
class Unity
{
public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual int Age { get; set; } public virtual int WorkAge { get; set; } }
}

在Mappings文件夹内,存放的是Model中所建立的类(对应的是数据库中的表)的配置文件,将所有的类中的属性与数据库中的表中的列名真正对应起来。注意Model中的类名与Mapping中的解析文件名一一对应。 “unity.cs”与表名一致,“unity.cs”与“unity.hbm.xml”一致。

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NBOWeb"
namespace="NBOWeb.Model">
<!--assembly= Sikiedu 这是程序集的名称 namespace 是指User在哪个命名空间下的 --> <class name="Unity" table="unity">
<id name="Id" column="id" type="Int32">
<generator class="native"></generator>
<!--自动增涨-->
<!--nativ 是本地 使用数据库自带的生成器-->
</id>
<property name="Name" column ="name" type="String" ></property>
<property name="Age" column ="age" type="Int32" ></property>
<property name="WorkAge" column ="workage" type="Int32" ></property> </class> </hibernate-mapping>

Manager文件夹中,存放的是接口与接口的实现,“IUnityManger.cs”和“UnityManager.cs”           "IUnityManager.cs"存放的是各种要实现的方法或功能; “UnityManager”存放的是这些方法怎么具体实现的。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NBOWeb.Model; namespace NBOWeb.Manger
{
interface IUnityManager
{
void Add(Unity unity);
void Update(Unity unity);
void Remove(Unity unity);
Unity GetById(int id);
Unity GetByName(string name); //先定义出来有哪些操作 ICollection<Unity> GetAllUnityCollection(); bool VerifyUnity(string name, int age);
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using NBOWeb.Model;
using NHibernate;
using NHibernate.Criterion; namespace NBOWeb.Manger
{
class UnityManger : IUnityManager
{ public void Add(Unity unity)
{
//ISession session = NHibernateHelper.OpenSession();
//session.Save(unity);
//session.Close(); //ISession session = NHibernateHelper.OpenSession() //当使用OpenSession方法的时候,将SessionFactory属性 中字段可读get创建 “属性”的加强
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(unity);
transaction.Commit();
}
} //自动实现资源的释放
} public ICollection<Unity> GetAllUnityCollection()
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
//ICriteria criteria = session.CreateCriteria(typeof(Unity)); // criteria标准
//criteria.Add(Restrictions.Eq("Name",name)); //更新,根据主键来操作 Restrictions限制约束,严格相等
// //将查询条件封装成了对象
//Unity unity = criteria.UniqueResult<Unity>(); //调用唯一的结果, //只会取到查询结果的第一行记录 IList<Unity> unity = session.CreateCriteria(typeof(Unity)).List<Unity>();
return unity;
}
} public Unity GetById(int id)
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
using (ITransaction transaction = session.BeginTransaction())
{
Unity unity = session.Get<Unity>(id); //更新,根据主键来操作
transaction.Commit();
return unity;
}
}
} public Unity GetByName(string name)
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
//ICriteria criteria = session.CreateCriteria(typeof(Unity)); // criteria标准
//criteria.Add(Restrictions.Eq("Name",name)); //更新,根据主键来操作 Restrictions限制约束,严格相等
// //将查询条件封装成了对象
//Unity unity = criteria.UniqueResult<Unity>(); //调用唯一的结果 Unity unity = session.CreateCriteria(typeof(Unity)).Add(Restrictions.Eq("Name", name))
.UniqueResult<Unity>();
return unity;
}
} public void Remove(Unity unity)
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(unity); //更新,根据主键来操作
transaction.Commit();
}
}
} public void Update(Unity unity)
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(unity); //更新,根据主键来操作
transaction.Commit();
}
}
} public bool VerifyUnity(string name, int age)
{
using (ISession session = NHibernateHelper.OpenSession()) //需要释放的资源 using的用法
{ Unity unity = session
.CreateCriteria(typeof(Unity)) //建立unity标准格式
.Add(Restrictions.Eq("Name", name)) //添加条件约束
.Add(Restrictions.Eq("Age", age))
.UniqueResult<Unity>(); //主键 加深对“主键”的理解
if (unity==null)
{
return false;
}
else
{
return true;
} }
}
}
}

NHibernateHelper.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg; namespace NBOWeb
{
class NHibernateHelper
{ private static ISessionFactory _sessionFactory; private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory==null)
{
var configuration=new Configuration();
configuration.Configure();
configuration.AddAssembly("NBOWeb"); _sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
} public static ISession OpenSession()
{
return SessionFactory.OpenSession();
} }
}

接口,具体在进行学习。

总的运行

 using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using NBOWeb.Model;
using NBOWeb.Manger; namespace MySql_StudyTest
{
class Program
{
static void Main(string[] args)
{
//var configuration=new Configuration();
//configuration.Configure();
//configuration.AddAssembly("NBOWeb");
//ISessionFactory sessionFactory = null;
//ITransaction transaction = null;
//ISession session = null;
//try
//{
// sessionFactory = configuration.BuildSessionFactory();
// session = sessionFactory.OpenSession(); // //Unity unity = new Unity() {Name = "L.Juhnko", Age = 29, WorkAge = 10 };
// //session.Save(unity); // //事务,对数据库更改
// transaction= session.BeginTransaction();//开启事务
// Unity unity1 = new Unity() { Name = "ko01", Age = 29, WorkAge = 10 };
// Unity unity2 = new Unity() { Name = "ko02", Age = 29, WorkAge = 10 }; // session.Save(unity1);
// session.Save(unity2);
// transaction.Commit();//事务提交
//}
//catch (Exception e)
//{
// Console.WriteLine(e); //}
//finally //{
// if (transaction!=null)
// {
// transaction.Dispose();
// } // if (session!=null)
// {
// session.Close();
// }
// if (sessionFactory!=null)
// {
// sessionFactory.Close();
// }
//} //Unity unity=new Unity() { Id=0}; //创建一个Unity的对象
//IUnityManager unityManager=new UnityManger(); //接口的应用 “接口” //此时与数据库未发生链接
////unityManager.Add(unity); ////unityManager.Update(unity);
//unityManager.Remove(unity); //IUnityManager unityManager = new UnityManger();
//Unity unity = unityManager.GetById(23); //Console.WriteLine("");
//Console.WriteLine(unity.Id);
//Console.WriteLine(unity.Name);
//Console.WriteLine(unity.Age);
//Console.WriteLine(unity.WorkAge);
//Console.ReadKey(); //IUnityManager unityManager=new UnityManger();
//Unity unity = unityManager.GetByName("juhnko"); //Console.WriteLine("");
//Console.WriteLine(unity.Id);
//Console.WriteLine(unity.Name);
//Console.WriteLine(unity.Age);
//Console.WriteLine(unity.WorkAge);
//Console.ReadKey(); //IUnityManager unityManager = new UnityManger();
//ICollection<Unity> unity= unityManager.GetAllUnityCollection();
//foreach (var u in unity)
//{
// Console.WriteLine("用户名:{0}" + "\t" + "Id:{1}" + "\t" + "年龄:{2}" + "\t" + "工作年龄:{3}"+ "\n", u.Name, u.Id, u.Age, u.WorkAge);
//}
//Console.ReadKey(); IUnityManager unityManager = new UnityManger();
Console.WriteLine(unityManager.VerifyUnity("juhnko",)); Console.ReadKey(); }
}
}

MySql(二)_NHibernateHelper管理会话工厂的更多相关文章

  1. Shiro经过Redis管理会话实现集群(转载)

    原文:http://www.myexception.cn/software-architecture-design/1815507.html Shiro通过Redis管理会话实现集群 写在前面 1.在 ...

  2. MySQL之账户管理

    MySQL之账户管理 账户管理是MySQL用户管理最基本的内容.包括登录,退出MySQL服务器.创建用户.删除用户.密码管理和权限管理等内容. 其中登录方式非常简单,在这个地址有:http://www ...

  3. MySQL之权限管理

    MySQL之权限管理 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作, 那么你就不能执行update操作.只 ...

  4. mysql之事务管理

    本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不 ...

  5. MySQL用户账户管理/权限管理/资源限制

    MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了. mysql 的权限体系大致分为5个层级: ...

  6. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之功能实现

    前言:前一篇温习了网站开发需要掌握的基础知识,这一篇重点梳理一下各个功能模块的[详细设计与实现].项目github地址:https://github.com/66Web/php_book_store, ...

  7. MySQL介绍及安装&MySQL软件基本管理

    mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好 ...

  8. 实验十三 MySQL多用户事务管理

    实验十三 MySQL多用户事务管理 一.  实验内容: 1. 事务机制的使用 2. 锁机制的使用 二.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中 ...

  9. [MySQL数据库之数据库相关概念、MySQL下载安装、MySQL软件基本管理、SQL语句]

    [MySQL数据库之数据库相关概念.MySQL下载安装.MySQL软件基本管理.SQL语句] 数据库相关概念 数据库管理软件的由来 数据库管理软件:本质就是个C/S架构的套接字程序. 我们在编写任何程 ...

随机推荐

  1. PDF.js 详情解说

    pdf.js资源下载 点我下载 自定义默认加载的pdf资源 在web/view.js中我们可以通过DEFAULT_URL设置默认加载的pdf.通过上面代码我们也可以看出来可以通过后缀名来指定加载的pd ...

  2. 大陆争霸[SDOI2010]带限制最短路

    只要你有无限个自爆机器人,你就能为所欲为 斯普林·布拉泽 [题目描述] 略 一句话题意: 杰森国有 \(N\) 个城市,由 \(M\) 条单向道 路连接.杰森国的首都是城市 \(N\).你只需摧毁杰森 ...

  3. Web 字体 font-family 再探秘

    之前写过一篇关于Web字体简介及使用技巧的文章: 你该知道的字体 font-family. 该篇文章基本没有太多移动端的字体选择及分析.并且过了这么久,如今的 Web 字体又有了一些新的东西,遂有此文 ...

  4. 用友java后端开发面经

    面的是深圳的友金锁 3月28号 早上十点 之前来学校宣讲加笔试(笔试做的很菜) 以为凉了,27号被捞起来了,现在看来面了也有点凉 视频面试 时间:19分钟左右 面试官人不错 1 自我介绍 2 自我介绍 ...

  5. Java 学习笔记---Java double类型相加问题

    多个double类型的数直接相加的时候,可能存在精度误差.( 由于计算机算法以及硬件环境决定只能识别 0 1.计算机默认的计算结果在都在一个指定精度范围之内,想往深的了解,可以学习数值分析等) 在金融 ...

  6. ionic 删除返回按钮文字,及自定义nav两侧的按钮和title格式

    1.删除返回按钮文字 1)可以在app.js进行配置 .config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider) ...

  7. Java集合框架之LinkedList浅析

    Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...

  8. 《阿里巴巴Java开发手册1.4.0》阅读总结与心得(五)

    笔者作为一名有数年工作经验的Java程序员,仔细研读了这份手册,觉得其是一份不可多得的好材料.阿里巴巴在发布时所说,“阿里巴巴集团推出的<阿里巴巴Java开发手册(正式版)>是阿里巴巴近万 ...

  9. hdu-6621 K-th Closest Distance

    题目链接 K-th Closest Distance Problem Description You have an array: a1, a2, , an and you must answer ...

  10. gym/101955/problem/E - The Kouga Ninja Scrolls 线段数 维护 切比雪夫距离 2018沈阳icpc

    传送门 思路: 这道题要把给定的每个坐标利用切比雪夫坐标表示,这样两个点的距离就是max(dx,dy),而不是一开始的dx + dy,有利于线段树的维护,又由于询问的是区间的最大差值,限制是两个点是属 ...