hibernate调用mysql的存储过程

hibernate调用存储过程:

第一种不带参数的调用:

public List<MarkingTask> testList() {

// TODO Auto-generated method stub

Session s=null;

List<MarkingTask> listStudent=new ArrayList<MarkingTask>();

int i=1;

try {

s=getSession();

SQLQuery query = s.createSQLQuery("{Call test()}");//不带参数的调用很简单,但是要注意sql语句的写法,必须用“{}”包围起来

query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List<Map> list = query.list();

if(list!=null&&list.size()!=0){

for (Map map : list)

{

System.out.println(map.get("TASKID"));

}

}

} catch (Exception e) {

e.printStackTrace();

}finally{

if(null != s){

CloseHelper.close(s);

}

}

return listStudent;

}

 

第二种:带参数的调用(这种方法要特别注意,参数的类型只能是IN,不能是OUT和INOUT,我在这里就是参数搞错了,郁闷死我了

public List<MarkingTask> testList() {

// TODO Auto-generated method stub

Session s=null;

List<MarkingTask> listStudent=new ArrayList<MarkingTask>();

int i=1;

try {

s=getSession();

SQLQuery query = s.createSQLQuery("{Call test(?)}");//用占位符

query.setInteger(0, i);

query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List<Map> list = query.list();

if(list!=null&&list.size()!=0){

for (Map map : list)

{

System.out.println(map.get("TASKID"));

}

}

} catch (Exception e) {

e.printStackTrace();

}finally{

if(null != s){

CloseHelper.close(s);

}

}

return listStudent;

}

------------------------------------------------------------------------------------------------------------------------------

值得注意的是如果存储过程里面涉及到事物的操作(增删改)的时候,必须在hibernate里面对过程声明事物,如果出现操作失败及时回滚,因为过程里面可能有多个涉及到事物的操作,可能是最后一个操作失败,所以我们必须如果有一个 操作失败那么所有的操作都必须回滚到原来的操作状态

看个例子:

事物:

BEGIN

INSERT INTO eps_epub_task(TASKID,RES_PAPERID) VALUES(1,100);

UPDATE eps_epub_task1 SET RES_PAPERID=200 WHERE TASKID=1;//如果这一步操作失败,那么前面的insert语句插入的数据必须回滚

SELECT TASKID FROM eps_epub_task;

END

 

java代码:

@Override

public List<MarkingTask> testList() {

// TODO Auto-generated method stub

Session s=null;

Transaction t=null;//声明事物

List<MarkingTask> listStudent=new ArrayList<MarkingTask>();

int i=1;

try {

s=getSession();

t=beginTransaction(s);创建事物

SQLQuery query = s.createSQLQuery("{Call test(?)}");

query.setInteger(0, i);

query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

List<Map> list = query.list();

t.commit();//如果过程没问题则提交事物

if(list!=null&&list.size()!=0){

for (Map map : list)

{

System.out.println(map.get("TASKID"));

}

}

} catch (Exception e) {

t.rollback();//有异常则回滚

e.printStackTrace();

}finally{

if(null != s){

CloseHelper.close(s);

}

}

return listStudent;

}

猜你喜欢

转载自747017186.iteye.com/blog/2092408