坚持,坚定,坚强

博客园 首页 新随笔 联系 订阅 管理

存储过程相当难说,将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'+@url

    
insert 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() 之类的

 

再这里下载全部代码

 全部源代码

posted on 2011-06-16 18:08  老公鸡  阅读(350)  评论(0编辑  收藏  举报