存储过程相当难说,将t-sql语句放入存储过程预编译后可以加快执行速度,但又时不时会将业务放入存储过程中,还会对orm产生不好的影响
1. 创建一个存储过程 用 Menus表为处理对象
@u 是为了看到数据是由程序过程来决定的 , 注意注意: 存储过程的参数顺序就按表结构来,但主键要放到最后,这是规定
2. 修改Menu.hbm.xml
添加一个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. 访问方法
大家发现了嘛,跟原来的是一样的,其实就是由sql-insert标签来控制,如果配置文件里面有,则按配置文件里面的来
修改和删除就交给大家自己去完成了再看一下查询的
添加一个sql-query 标签
注意 sql-query 放在class标签的外面 hibernate-mapping的里面
访问
如果不想用配置文件来执行存储过程,那你就在代码里面当成 sql语句用吧
session.CreateSQLQuery("exec proc_select ?,?").setXXX() 之类的
再这里下载全部代码