【发布时间】:2016-01-12 05:13:50
【问题描述】:
mybatis中的存储过程多选有问题。
stored_procedure.sql 中的两个 select 语句
USE cellar;
GO
alter PROCEDURE findAll_sp
AS
SELECT * FROM wine ORDER BY name; //The results of this select statement are stored in the list.
SELECT * FROM wine where id=5; //The results of this select statement are not stored in the list.
GO
stored_procedure.sql
stored_procedure.sql 中只有一个 select 语句的结果(第一个 select 语句)保存在 WineDAO.java 的列表中。但我想在所有两个 select 语句的结果列表中。 我该如何解决这个问题?
以下是相关源码。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.coenraets.cellar.cellar-mapper">
<select id="findAll" resultType="Wine">
{call findALL_sp}
</select>
</mapper>
mapper.xml
public class WineDAO {
private static SqlSessionFactory ssf;
static{
try{
Reader reader= org.apache.ibatis.io.Resources.getResourceAsReader("Config.xml");
ssf=new SqlSessionFactoryBuilder().build(reader);
}catch(Exception ex){ex.getMessage();}
}
public List<Wine> findAll() {
List<Wine> list = new ArrayList<Wine>();
list = ssf.openSession().selectList("findAll");
for(int i=0; i<list.size(); i++)
{
System.out.println(list.get(i).getName());
}
return list;
}
}
WineDAO.java
谢谢。
【问题讨论】:
-
因为它是一个存储过程,你正在执行两个语句,你的过程的结果将是最后一个,你不能同时检索两个。在您的查询中使用 UNION 将不同查询中的两个语句(不同的 mybatis 语句)分开。类似
SELECT * FROM wine ORDER BY name UNION SELECT * FROM wine where id=5 -
"你不能同时检索两者" - 不正确。查找火星
-
感谢您的回答,豪尔赫。许多存储过程在我的项目中已经有一个多选语句。所以mybatis没有别的办法了,我要放弃mybatis了。再次感谢。
-
火星?什么是火星?
标签: java sql-server-2008 stored-procedures mybatis mssql-jdbc