如何使用HashMap将参数从Java传递给myBatis?

问题描述 投票:0回答:1

如何使用Java在myBatis存储过程中将输入参数作为数组传递?

在我的情况下,我传递Long []数组

我想在我的存储过程输入中传递值作为数组,我试图把jdbcType = ARRAY但我得到错误,

ClassCastException java.lang.Long cannot convert java.sql.Array

你能帮忙代码吗?

我的代码出错...?

为了您的参考,我添加了我的代码。这是我的用户弹簧DAO层。从这里我需要打电话给myBatis

user DAO.Java

@Autowired
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
    super.setSqlSessionTemplate(SqlSessionTemplate)
}


public List<User> getUserList(List<Long> userId) {
    Long[] arr = userId.toArray(new Long[userId.size()]);
    Map<String,Object> queryParameter = new HashMap<String,Object>();
    queryParameter.put("P_PARAM_ID_ARR",arr);// Here i got error how to convert Long[] to  java.sql.Array.
    this.sqlSession().selectList("getUserDatas",queryParameter);
    List<User> userList = (List<User>)queryParameter.get("P_RST");

}

这是我的myBatis Queries xml文件userqueries.xml

<mapper namespace = "userDAO">
    <resultMap id= "userMapping" type="com.User">
        <result property="id" column="USER_ID" javaType="java.lang.Long"></result>
        <result property="name" column="USER_NAME" javaType="java.lang.String"></result>
    </resultMap>

    <select id="getUserDatas" parameterType="java.util.Map" statementType="CALLABLE" resultMap="userMapping">

    { call PROC_USER(#{P_PARAM_ID_ARR, jdbcType=ARRAY, mode=IN}, #{P_RST, javaType=java.sql.ResultSet, jdbcType=CURSOR, mode=OUT, resultMap="userMapping"})}

    </select>

</mapper>

当我尝试朗姆酒时,我总是得到500错误。

如何在程序中传递数组作为参数?

谢谢你请帮帮我......

java oracle mybatis
1个回答
0
投票

需要通过java.sql.Connection上的工厂方法创建JDBC中的数组。像这样的东西:

Long[] arr = userId.toArray(new Long[userId.size()]);
Array sqlArray = sqlSession().getConnection().createArrayOf("int", arr);
Map<String,Object> queryParameter = new HashMap<String,Object>();
queryParameter.put("P_PARAM_ID_ARR",sqlArray);
© www.soinside.com 2019 - 2024. All rights reserved.