[NHibernate]增删改操作

目录

写在前面

文档与系列文章

添加数据

删除数据

修改数据

添加修改数据

总结

写在前面

上篇文章介绍了nhibernate的基于面向对象的条件查询。对一个项目来说,增删改查是必不可少的,虽然实现方式不同,但是总有涉及到这部分的代码。之前跟朋友说过一个笑话,你要会增删改查了,一切问题就不是问题了,在加上业务处理基本上就完成一个项目了。可能说的是有点过了,但是我觉得在编码中,重要的是你的业务处理能力,在公司很少人能能站在项目框架或者架构的决策的位置,这个时候,作为开发来说不就是负责模块吗?而这些模块,你如果留心会发现,到处的增删改查,而且样子基本相同。

使用过Eentity framework或者Linq to Sql的童鞋都知道,在你进行删除,修改和添加的时候,这些改变的数据,其实并没有立即从数据库中删除,而是存在内存中,直到你使用数据库上下文的SaveChange()方法或者SubmitChanges()才会把数据提交给数据库,而这些操作要么提交,要么回滚。

在Nhibernate中其实一样道理,数据也是存在内存中,直到你调用ISession的Flush()方法才会将数据提交到数据库(成功或者回滚(这个回滚跟事务的回滚是否有区别,下篇文章学过事务之后,再做比较))。

文档与系列文章

[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent Classes)

[NHibernate]O/R Mapping基础

[NHibernate]集合类(Collections)映射 

[NHibernate]关联映射

[NHibernate]Parent/Child

[NHibernate]缓存(NHibernate.Caches)

[NHibernate]NHibernate.Tool.hbm2net

[NHibernate]Nullables

[NHibernate]Nhibernate如何映射sqlserver中image字段

[NHibernate]基本配置与测试 

[NHibernate]HQL查询 

[NHibernate]条件查询Criteria Query

添加数据

创建一个customer对象,然后调用ISession的Save方法加到内存,调用ISession的Flush方法添加到数据库,代码如下:

 1         /// <summary>
 2         /// 添加客户
 3         /// </summary>
 4         /// <param name="customer">客户实体</param>
 5         /// <returns>是否添加成功 </returns>
 6         public bool AddCustomer(Customer customer)
 7         {
 8
 9             try
10             {
11                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
12                 var session = nhibernateHelper.GetSession();
13                 //将customer对象写入内存
14                 session.Save(customer);
15                 //更新到数据库
16                 session.Flush();
17                 return true;
18             }
19             catch (Exception ex)
20             {
21                 throw ex;
22             }
23         }

熟悉IO操作的朋友应该发现了,在将字节流写入文件的时候,如果不Flush或者close(dispose),这个时候你会发现,写入的文件是没有内容的。只有在Flush或者Close之后,才会将内存中的字节流写入文件。

删除数据

描述:获取要删除的对象,然后将该对象删除,代码如下:

 1         /// <summary>
 2         /// 删除客户信息
 3         /// </summary>
 4         /// <param name="customer">客户对象</param>
 5         /// <returns>是否删除成功</returns>
 6         public bool DeleteCustomer(Customer customer)
 7         {
 8             try
 9             {
10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
11                 var session = nhibernateHelper.GetSession();
12                 // Remove a persistent instance from the datastore
13                 session.Delete(customer);
14                 session.Flush();
15                 return true;
16             }
17             catch (Exception)
18             {
19                 throw;
20             }
21         }

修改数据

描述:根据传进的新的客户实体,修改客户信息。代码如下:

 1         /// <summary>
 2         /// 修改客户信息
 3         /// </summary>
 4         /// <param name="customer">客户对象</param>
 5         /// <returns>是否修改成功</returns>
 6         public bool UpdateCustomer(Customer customer)
 7         {
 8             try
 9             {
10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
11                 var session = nhibernateHelper.GetSession();
12                 //Update the persistent instance with the identifier of the given transient instance.
13                 session.Update(customer);
14                 session.Flush();
15                 return true;
16             }
17             catch (Exception)
18             {
19                 throw;
20             }
21         }

添加修改数据

Nhibernate中有这样一种方法,如果该对象存在则去修改,如果不存在则添加。

ISession可以识别出这不同的对象,并为我们提供了ISession.SaveOrUpdate(object)方法。

ISession.SaveOrUpdate(object)方法完成如下工作:

    • 检查这个对象是否已经存在Session中。
    • 如果对象不在,调用Save(object)来保存。
    • 如果对象存在,检查这个对象是否改变了。
    • 如果对象改变,调用Update(object)来更新。

代码如下:

 1         /// <summary>
 2         /// 添加或者修改客户信息
 3         /// </summary>
 4         /// <param name="customer">客户对象</param>
 5         /// <returns>是否修改或添加成功成功</returns>
 6         public bool SaveOrUpdateCustomer(Customer customer)
 7         {
 8             try
 9             {
10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
11                 var session = nhibernateHelper.GetSession();
12                 //Either Save() or Update() the given instance, depending upon the value of
13                 //its identifier property.
14                 session.SaveOrUpdate(customer);
15                 session.Flush();
16                 return true;
17             }
18             catch (Exception)
19             {
20                 throw;
21             }
22         }

在项目中,在修改或者新增数据中,用的最多的是SaveOrUpdate()方法。用起来也很方便,新增或者更新,让程序自己去判断。

测试,添加一个新的用户,然后去修改该用户信息。

 1         /// <summary>
 2         /// 添加客户信息
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         protected void btnAdd_Click(object sender, EventArgs e)
 7         {
 8             Guid guidCustomerID = Guid.NewGuid();
 9             var customer = new Customer() { CustomerName = "zhangsan", CustomerAddress = "北京 海淀", CustomerID = guidCustomerID };
10             Business.CustomerBusiness customerBusiness = new Business.CustomerBusiness();
11             //如果客户信息不存在则添加
12             if (customerBusiness.SaveOrUpdateCustomer(customer))
13             {
14                 customer = new Customer() { CustomerName = "wanger", CustomerAddress = "上海", CustomerID = guidCustomerID };
15                 //客户信息存在则修改
16                 if (customerBusiness.SaveOrUpdateCustomer(customer))
17                 {
18                     RepeaterDataBind();
19                 }
20             }
21         }

结果

生成的sql语句

总结

本篇文章介绍了增删改查方法,在项目中用的最多的也是这几种方法,比如你定义一个接口,接口里面就可以定义这四种方法。

时间: 2024-10-10 07:30:34

[NHibernate]增删改操作的相关文章

【2017-05-02】winform弹出警告框是否进行增删改操作、记事本制作、对话框控件和输出输入流

一.winform弹出警告框是否进行增删改操作 第一个参数是弹出窗体显示的内容,第二个参数是标题,第三个参数是该弹窗包含确定和取消按钮. 返回的是一个枚举类接收一下. 再进行判断,如果点的是确定按钮,再进行下一步的增删改操作. 二.记事本的制作 1.菜单工具栏MenuStrip-插入标准项 2.TextBox -显示部分 小箭头 MultiLine 选中多行 Dock属性占满. 3.功能 - 撤销 - 剪切 - 粘贴 - 复制 - 删除 - 全选 - 时间 - 查找 单独做一个窗体点击打开 把主

详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作

总结一下,连接SQL Server数据库需要以下几个步骤: 1. 导入驱动Jar包:sqljdbc.jar 2. 加载并注册驱动程序 3. 设置连接路径 4. 加载并注册驱动 5. 连接数据库 6. 操作数据库 7. 关闭连接 代码如下: ******************连接数据库******************* 1 package zj6_Test; 2 import java.sql.*; 3 public class Zj6_3 { 4 /** 5 * 使用Statement接口

JavaScript--DOM增删改操作

JavaScript使用DOM操作节点来进行增删改操作 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JavaScript操作DOM节点</title> <script type="text/javascript"> var flag = "帐号"; var flag1 = 0; funct

Jquery easyui开启行编辑模式增删改操作

来源:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </table> 引入JS文件和CSS样式 <script src="http://www.cnblogs.com/Resources/jquery-easyui-1.2.3/jquery-1.4.4.min.js

表格的增删改操作

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>表格的增删改操作</title> <script type="text/javascript"> function createTable() { var body = document.getElementById(&quo

6.DOM对HTML元素的增删改操作

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>节点的增删改操作</title> <script type="text/javascript"> function createNode(){ //创建一个li元素 var li = document.createElement(

使用PreparedStatement接口实现增删改操作

直接上下代码: 1 package com.learn.jdbc.chap04.sec02; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 6 import com.learn.jdbc.model.Album; 7 import com.learn.jdbc.util.DbUtil; 8 /** 9 * 使用PreparedStatement接口实现增删改操作 10 * @author Admini

[转]Jquery easyui开启行编辑模式增删改操作

本文转自:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </table> 引入JS文件和CSS样式 <script src="http://www.cnblogs.com/Resources/jquery-easyui-1.2.3/jquery-1.4.4.min.

【安卓9】ORM、ORM方法改写增删改操作

ORM ORM是Object/Relational Mapping的缩写,译为对象关系映射.采用键-值对的形式存放字段的这种方式的好处是:无需SQL语句即能对数据进行添加.修改操作. SQLitDatabase类封装了 insert().delete().update()方法,这三个方法无需用SQL语句就能对数据库进行增删改的操作. Java是面向对象的语言,目前流行的数据库大多是关系型数据库.ORM使得面向对象编程能容易地处理关系数据库中的数据. 操作步骤: 步骤1.创建ContentValu