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;
}
}