我正在將我們的數據庫從SQL Server 2008遷移到Oracle,但無法讓MyBatis工作。用MyBatis調用Oracle存儲過程
鑑於下面的例子:
UserMapper.xml(實施例)
<resultMap type="User" id="UserResult">
<id property="userId" column="userId"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
</resultMap>
<select id="getUsers" statementType="CALLABLE" resultMap="UserResult">
{CALL GetUsers()}
</select>
UserDAO.java
public interface UserDAO {
public List<User> getUsers();
}
SQL Server過程
CREATE PROCEDURE [dbo].[GetUsers]
AS
BEGIN
SET NOCOUNT ON;
SELECT userId, firstName, lastName
FROM Users
END
...在SQL Server 2008中有效。有人可以向我解釋如何從UserMapper.xml調用Oracle過程(與上述SQL Server過程具有相同的名稱和列)並填充我的帶有Oracle遊標的用戶類?
這是我的嘗試:
<resultMap type="User" id="UserResult">
<id property="userId" column="userId"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
</resultMap>
<select id="getUsers" statementType="CALLABLE" resultMap="UserResult">
{CALL GetUsers(#{resultSet,mode=OUT,jdbcType=CURSOR,resultMap=UserResult})}
</select>
,我得到這個錯誤:
Caused by: org.apache.ibatis.reflection.ReflectionException:
Could not set property 'resultSet' of 'class java.lang.Class'
with value '[email protected]'
Cause: org.apache.ibatis.reflection.ReflectionException:
There is no setter for property named 'resultSet' in 'class java.lang.Class'
謝謝clav。我嘗試了你的例子,並得到了與上面第2行相同的錯誤:「無法設置'class java.lang.Class'的屬性'resultSet'。」有任何想法嗎? – snoozy 2013-03-27 20:37:58
我不記得確切的語法。我感覺你對這件事感到痛苦,因爲我大約一年前經歷過這件事。我追蹤了一些我保留的示例代碼,並更新了我的答案,試試看。 – clav 2013-03-29 14:17:02