惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 老公鸡

sharepoint 2010? Jsp中使用数据库连接池. MVC2 学习之 UrlRouting Oracle 基础学习之索引 Oracle基础学习之函数 Oracle 基本操作之sql语句 Oracle基本操作 Oracle 数据库学习一 小黑日记三 结束了 mvc 3 学习 第一天 准备 小黑 成长日记第二天 2011年6月15日,同事捡了一只小猫回来了 NHibernate 学习 第十一天 对多对的关系处理 NHibernate 学习 第十天 一对多的外键关系处理 NHibernate 学习 第九天 外键关系的处理之一对一 NHibernate学习 第八天 组件的运用 NHibernate学习 第七天 其它的学习资料 NHibernate学习 第六天 NHibernate 中的查询 NHibernate 学习第五天 用户表的增,删,改,查
NHibernate 学习 第十二天 存储过程的使用
老公鸡 · 2011-06-16 · via 博客园 - 老公鸡

存储过程相当难说,将t-sql语句放入存储过程预编译后可以加快执行速度,但又时不时会将业务放入存储过程中,还会对orm产生不好的影响

1. 创建一个存储过程 用 Menus表为处理对象

create proc [dbo].[pro_insert]
(
    
@title nchar(10),
    
@url nchar(10),
    
@parent int,
    
@mid int
)
as 
    
declare @u nchar(10)
    
set @u = 'proc'+@urlinsert into Menus 
    
values(@mid,@title,@parent,@u)

@u 是为了看到数据是由程序过程来决定的 , 注意注意: 存储过程的参数顺序就按表结构来,但主键要放到最后,这是规定

2. 修改Menu.hbm.xml

 添加一个sql-insert结节

<sql-insert>
      exec pro_insert ?,?,?,?
    
</sql-insert>

并对其<generator class="assigned"/>的值进行调整,如果主键是自增的就参考以下几个参数

native:根据底层数据库的能力选择identity、sequence 或者hilo 中的一个。  --》 主键是自增的

increment :生成类型为Int64、Int16 或Int32 的标识符,只当没有其他进程同时往同一个表插入数据时,能够保持唯一性。
附:
• identity:对DB2、MySQL、SQL Server、Sybase 数据库内置标识字段提供支
持。数据库返回的标识符用Convert.ChangeType 加以转换,因此能够支持任何整型。
• sequence:在DB2、PostgreSQL、Oracle 数据库中使用序列或者Firebird 的
生成器。数据库返回的标识符用Convert.ChangeType 加以转换,因此能够支持任何
整型。
• hilo:使用一个高/低位算法高效地生成Int64、Int32 或Int16 类型的标识符。给
定一个表和字段(默认分别是hibernate_unique_key 和next_hi)作为高位值的来
源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。如果是用户提供的连
接,不要使用此生成器。

 3.  访问方法

 public static void Insert(Menu m)
        {
            
using (ITransaction ts = session.BeginTransaction())
            {
                
try
                {
                    session.Save(m);
                    ts.Commit();
                }
                
catch (Exception ex)
                {
                    ts.Rollback();
                }
            }
        }

大家发现了嘛,跟原来的是一样的,其实就是由sql-insert标签来控制,如果配置文件里面有,则按配置文件里面的来

修改和删除就交给大家自己去完成了再看一下查询的

 添加一个sql-query 标签

 注意 sql-query 放在class标签的外面 hibernate-mapping的里面

<sql-query name="tt">
      
<return class="llr.Models.Menu,llr.Models"/>
      exec proc_select @id
=:id,@title=:title
    
</sql-query>

访问

return session.GetNamedQuery("tt").SetInt32("id"0).SetString("title""").List<Menu>();

如果sql-squery放错位置了就会报下面这个错误

Named query not known: tt 

先到这~最近时间不大够用。其它的学习就靠大家自己的提升了。谢谢

如果不想用配置文件来执行存储过程,那你就在代码里面当成 sql语句用吧

session.CreateSQLQuery("exec proc_select ?,?").setXXX() 之类的

再这里下载全部代码

 全部源代码