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

时间:2018-03-04 08:51:50

标签: java oracle mybatis

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

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

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

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

你能帮忙代码

吗?

我的代码中有错误??

供我参考,我添加了我的代码。这是我的用户弹簧DAO层。从这里我需要调用myBatis

UserDAO.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错误。

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

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

1 个答案:

答案 0 :(得分: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);