hibernate 调用存储过程


1 查询列表(感觉使用HBM映射文件方式挺方便的,查出的结果直接是 List<Model> ,如果是多人开发,不建议使用这种方式,因为这些HBM文件管理起来不容易) :
(1) 调用无参查询所有存储过程
a .HBM文件配置 :

<hibernate-mapping>
    <class name="com.zichen.xabeschrm.entity.TRole" table="t_role" catalog="xabeschrm">
 .........
    </class>
        <sql-query name="getRoleList" callable="true">
          <return alias="t_role" class="com.zichen.xabeschrm.entity.TRole">
            <return-property name="jsId" column="js_id"/>
            <return-property name="jsmc" column="jsmc"/>
            <return-property name="jsbz" column="jsbz" />
        </return>
        {call ps_t_role_select()}
    </sql-query>
</hibernate-mapping>


b .JAVA调用存储过程代码 :

 public List<TRole> getAllRoles(Page opage, String host, String username) {
  List<TRole> roleList = new ArrayList<TRole>();
  try {
   Session   setitem =this.getHibernateTemplate().getSessionFactory().openSession() ;
    roleList =  setitem.getNamedQuery("getRoleList").list();
   setitem.close(); 
    for (TRole tRole : roleList) {
    System.out.println(tRole.getJsmc());
   }
   return roleList;
  } catch (Exception e) {
   StackTraceElement[] error = e.getStackTrace();
   for (StackTraceElement stackTraceElement : error) {
    log.error(stackTraceElement.toString());
   }
   return new ArrayList<TRole>();
  }

 }


(2)  调用有参查询所有存储过程
a .HBM文件配置 :

<hibernate-mapping>
    <class name="com.zichen.xabeschrm.entity.TRole" table="t_role" catalog="xabeschrm">
 .........
    </class>
        <sql-query name="getRoleList" callable="true">
          <return alias="t_role" class="com.zichen.xabeschrm.entity.TRole">
            <return-property name="jsId" column="js_id"/>
            <return-property name="jsmc" column="jsmc"/>
            <return-property name="jsbz" column="jsbz" />
        </return>
        {call ps_t_role_select(?,?,?)}
    </sql-query>
</hibernate-mapping>


b .JAVA调用存储过程代码 :

 public List<TRole> getAllRoles(Page opage, String host, String username) {
  List<TRole> roleList = new ArrayList<TRole>();
  try {
   Session   setitem =this.getHibernateTemplate().getSessionFactory().openSession() ;
   Query query =  setitem.getNamedQuery("getRoleList");
   query.setString(0, "员");
   query.setInteger(1, 0) ;
   query.setInteger(2, 5) ;
   roleList =query.list();
   setitem.close(); 
    for (TRole tRole : roleList) {
    System.out.println(tRole.getJsmc());
   }
   return roleList;
  } catch (Exception e) {
   StackTraceElement[] error = e.getStackTrace();
   for (StackTraceElement stackTraceElement : error) {
    log.error(stackTraceElement.toString());
   }
   return new ArrayList<TRole>();
  }

 }


 

2.JDBC方式 调用增加(插入)存储过程 :
虽然感觉增加,修改,删除 直接使用hibernate封装的方式实现比较简便,但是还是已JDBC方式调用存储过程,并设置存储过程有输出(output)参数,为什么要使用JDBC方式调用存储过程是因为在HBM文件中配置定制SQL语句后,还是需要在JAVA中已JDBC方式调用,直接使用JDBC 方式就实现了,干嘛需要在HBM文件中配置 ?欢迎大家拍砖!!!

 public boolean addRole(TRole role, String host, String username) {
  int exceResult = 0;
  try {
   CallableStatement statement = SessionFactoryUtils
     .getDataSource(getSessionFactory()).getConnection()
     .prepareCall(" call ps_t_role_insert(?,?,?); ");
   statement.setString(1, role.getJsmc());// 设置参数1
   statement.setString(2, role.getJsbz());// 设置参数2
   statement.registerOutParameter(3, Types.INTEGER); //存储过程输出参数
   statement.executeUpdate();
   exceResult = statement.getInt("exceResult");
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println("执行新增角色方法,返回值含义为  0 =失败   1=成功     2 =重复 : 执行结果为:   "
    + exceResult);
  if (exceResult == 1) {
   System.out.println("执行添加操作 操作数据库成功!");
   return true;
  } else {
   System.out.println("执行添加操作 操作数据库失败!");
   return false;
  }

 }


 

以上是我试验的结果,说的不对的地方,请大家拍砖,共同进步!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值