20160525NHibernate第一个成功的小例子

解决方案资源预览:

在NHibernate.Domain中新建实体类和映射类如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Domain" namespace="NHibernate.Domain.Entities">
<class name="NHibernate.Domain.Entities.Customer,NHibernate.Domain" table="Customers">
<id name="CustomerID" column="CustomerID" type="string" unsaved-value="0">
<generator class="increment"/>
</id>
<property name="CompanyName" column="CompanyName" type="string" />
<property name="ContactName" column="ContactName" type="string" />
<property name="ContactTitle" column="ContactTitle" type="string" />
<property name="Address" column="Address" type="string" />
<property name="City" column="City" type="string" />
<property name="Region" column="Region" type="string" />
<property name="PostalCode" column="PostalCode" type="string" />
<property name="Country" column="Country" type="string" />
<property name="Phone" column="Phone" type="string" />
<property name="Fax" column="Fax" type="string" />

</class>
</hibernate-mapping>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NHibernate.Domain.Entities
{
[Serializable]
public class Customer
{
#region Customer
public virtual string CustomerID { get; set; }
public virtual string CompanyName { get; set; }
public virtual string ContactName { get; set; }
public virtual string ContactTitle { get; set; }
public virtual string Address { get; set; }
public virtual string City { get; set; }
public virtual string Region { get; set; }
public virtual string PostalCode { get; set; }
public virtual string Country { get; set; }
public virtual string Phone { get; set; }
public virtual string Fax { get; set; }
#endregion
}
}

在NHibernate.DataPortal中添加NHibernateHelper.cs,代码如下:

using NHibernate.Cfg;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NHibernate.DataPortal
{
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;

public NHibernateHelper() {
_sessionFactory = GetSessionFactory();
}

private ISessionFactory GetSessionFactory() {
return (new Configuration()).Configure().BuildSessionFactory();
}

public ISession GetSession() {
return _sessionFactory.OpenSession();
}
}
}

在NHibernate.DataPortal中新建CustomerDal.cs类如下:

using NHibernate.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NHibernate.DataPortal
{
public class CustomerDal
{
private NHibernateHelper nhibernateHelper = new NHibernateHelper();

protected ISession Session { get; set; }

public CustomerDal() {
this.Session = nhibernateHelper.GetSession();
}

public CustomerDal(ISession session) {
this.Session = session;
}

public void CreateCustomer(Customer customer) {
Session.Save(customer);
Session.Flush();
}

public Customer GetCustomerById(int customerId) {
return Session.Get<Customer>(customerId);
}

public IList<Customer> GetCunstomers() {
IList<Customer> list = null;
list = Session.QueryOver<Customer>().List();
return list;
}

public IList<Customer> GetCunstomersByID(string customerId)
{
IList<Customer> list = null;
list = Session.QueryOver<Customer>().AndRestrictionOn(p => p.CustomerID).IsLike(customerId, NHibernate.Criterion.MatchMode.Anywhere).List();
return list;
}
}
}

在NHibernateUI项目中form1设计界面如下:

设计form1的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NHibernate.DataPortal;

namespace NHibernateUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
try
{
NHibernate.DataPortal.CustomerDal customerDal = new NHibernate.DataPortal.CustomerDal();
this.dataGridView1.DataSource = customerDal.GetCunstomers();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

private void button1_Click(object sender, EventArgs e)
{
try
{
NHibernate.DataPortal.CustomerDal customerDal = new NHibernate.DataPortal.CustomerDal();
this.dataGridView1.DataSource = customerDal.GetCunstomersByID(textBox1.Text);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}

整体功能完成,本例子主要联系NHibernate的配置和使用。注意SessionFactory和Session的使用方法。

时间: 2024-10-12 16:18:44

20160525NHibernate第一个成功的小例子的相关文章

JavaFX 二 First Blood(第一个小例子,拿起武器冲啊~)

万万没想到,上次写的JavaFX 一,回应那么激烈,令我有点小激动啊,这里感谢各位这么热心,大家的支持就是我最大的动力,让我们共同进步,共同学习.话题回归,今天我想给大家讲讲JavaFX的第一个小例子,顺便通过例子,给大家讲讲一些关于JavaFX的代码编写的一些心得体会.不多废话,好戏即将开始...... 上次说到新手开发是先Fxml,再写代码,我们先来看看如何用JavaFX Scene Builder 2.0设计我们想要的界面,首先,我介绍下工具界面的一些小知识, 首先我们认识下这个FX的可视

《hadoop权威指南》关于hive的第一个小例子的演示

本文是<hadoop权威指南>关于hive的小例子,通过这个例子可以很好地看出来hive是个什么东西. 前提是已经配置好hive的远程连接版本的环境,我是用了MYSQL数据库保存元数据. 环境要求: -配置好了Hadoop的HDFS文件系统,启动hdfs和yarn -配置好了hive的远程连接模式 -配置好了MySQL用于metadata的储存 输入文件下载: https://github.com/tomwhite/hadoop-book/blob/master/input/ncdc/micr

COM2 --- 小例子

在COM1 的小例子中,,我们大概知道什么是组件类 ,什么是接口了.这小节呢,我们来实现一下由一个组件类去实现两个接口的过程. 新建项目: 我们的 解决方案的 名字是 ComDemoCode ,项目名字是 MathToolKit  这表示 我们的 项目 自动 生成的 DLL  的名字就是 MathToolKit(数学工具包). 我们的继承关系 有必要 给大家 先 列出来,让大家 看看 在这里面,IPrimerMath接口 提供 + - * / % 五个基本运算方法,IAdvanceMath接口提

用两个小例子来解释单例模式中的“双重锁定”

学习单例模式时,好多人都不太理解双重锁定.学完后突然想到一个很有趣的例子. 单例模式结构图: 代码: Singleton类 class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); //程序运行时创建一个静态只读的进程辅助对象 private Singleton() { } //用private修饰构造方法,防止外界利用new创建此类实例

JavaScript基础中的基础(小例子:滚动字幕)

一.变量 局部变量声明前面要加"var" <script type="text/javascript"> // 全局变量 name = 'alex'; function func(){ // 局部变量 var age = 18; // 修改全局变量name name = "eric" } </script> 二.数据类型 数据类型有:数字.字符串.布尔值      数组.字典 数字.字符串.布尔值.null.undefin

C/C++ New与Delete (小例子)

转自:http://blog.csdn.net/chenzujie/article/details/7011639 先来看两段小程序: 1). #include <iostream.h> #include <String.h> void main(void) { char *str1 = "just have fun"; char *str2 = "happy day"; char *sTmpPtr = new char[255]; char

spring AOP + 自定义注解实现权限控制小例子

今天看了一下黑马程序员的视频,上面讲到一个使用spring AOP + 自定义注解的方式来实现权限控制的一个小例子,个人觉得还是可以借鉴,整理出来与大家分享. 需求:service层有一些方法,这些方法需要不同的权限才能访问. 实现方案:自定义一个PrivilegeInfo的注解,使用这个注解为service层中的方法进行权限配置,在aop中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标方法,没有则给出提示. 关键技术:自定义注解及注解解析,spring

java即时通信小例子

学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是在服务上开启一个线程循环等待客户端的连接,为每一个连接到服务器的Socket 创建一个实例存放在集合中,然后使用InputSteam读取从客户端发过来的数据然后转发给除自己之外的所有的客户端 然后是客户端,首先开启一个线程连接都服务器端,循环监听服务器发送回来的数据 这里要说一下为了明确是谁发出的消

java连接mysql的一个小例子

想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一个小例子数据库如下如 代码 package query; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; impor