繁体   English   中英

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

[英]How to pass argument from Java using HashMap to 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查询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错误。

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

谢谢,请帮助我.....

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

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM