如何使用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错误。
如何在程序中将数组作为参数传递?
谢谢你请帮助我.....
答案 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);