1,定义别名的时候使用了mysql内置的关键字
You have an error in your SQL syntax:check the manual that ....
为了避免这种情况,可以先将sql在数据库客户端执行一遍,显示没有问题在拷贝到mapper中。
2,bad sql grammar
出现这个原因是sql中出现语法错误,解决方法和1类似
3,No enum const class org.apache.ibatis.type.JdbcType.Integer
出现这个原因是JdbcType类型都是大写,检查自己mapper中类型是否都是大写的INTEGER
-----------------更新 2018年8月31日----------
4,使用foreach遍历数组,map或者其他可以迭代的对象,如果传入的参数parameterType="java.util.List"或者map;
<select id="selectPostIn" resultType="domain.blog.Post" paramterType="java.util.List">
SELECT * FROM POST P WHERE ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象传递给 foreach 作为集合参数。当使用可迭代对象或者数组时,index 是当前迭代的次数,item 的值是本次迭代获取的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。
注意:这里的collection传入是list或者map,不是传入参数的变量名这里不能传params
selectPostIn(List<String> params);
-----------------更新 2018年9月18日----------
如果传入的paramterType是map,下面collection的值是map中key的值,即:
List<Integer> idList = new ArrayList<Integer>();
map.put("ids", idList);
<select id="selectPostIn" resultType="domain.blog.Post" paramterType="Map">
SELECT * FROM POST P
<where>
<if test="ids != null">
<foreach item="item" index="index" collection="ids" open=" ID in (" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>
注意:这里需要判断是否为null,如果为空的话,直接使用foreach会报错。