天天看点

[NHibernate]增删改操作

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t1" target="_blank">写在前面</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t2" target="_blank">文档与系列文章</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t3" target="_blank">添加数据</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t4" target="_blank">删除数据</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t5" target="_blank">修改数据</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t6" target="_blank">添加修改数据</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html#t7" target="_blank">总结</a>

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

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

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

<a href="http://www.cnblogs.com/wolf-sun/p/3694592.html">[nhibernate]体系结构</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3694901.html">[nhibernate]isessionfactory配置</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3704012.html">[nhibernate]持久化类(persistent classes)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3705229.html">[nhibernate]o/r mapping基础</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3720259.html">[nhibernate]关联映射</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3721528.html">[nhibernate]parent/child</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3724052.html">[nhibernate]缓存(nhibernate.caches)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734249.html">[nhibernate]nhibernate.tool.hbm2net</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734313.html">[nhibernate]nullables</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3956802.html">[nhibernate]nhibernate如何映射sqlserver中image字段</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html">[nhibernate]条件查询criteria query</a>

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

[NHibernate]增删改操作
[NHibernate]增删改操作

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

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

[NHibernate]增删改操作
[NHibernate]增删改操作

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

[NHibernate]增删改操作
[NHibernate]增删改操作

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

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

isession.saveorupdate(object)方法完成如下工作:

检查这个对象是否已经存在session中。

如果对象不在,调用save(object)来保存。

如果对象存在,检查这个对象是否改变了。

如果对象改变,调用update(object)来更新。

代码如下:

[NHibernate]增删改操作
[NHibernate]增删改操作

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

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

[NHibernate]增删改操作
[NHibernate]增删改操作

结果

[NHibernate]增删改操作

生成的sql语句

[NHibernate]增删改操作

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

博客地址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

博客版权:

本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。

如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!

再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/4048048.html