1.foreach标签介绍
主要参数:
collection:要循环的集合,有三个参数类型 array、List、Map,这是传递的参数类型。这里有注意的地方,当传递一个包含list的map集合时也可以不用这么写,下面会有说明。
index:循环的索引,随便写,不用在意。
item:集合中的一个元素 相当于for (String string : list)中的string
open:一开始自己写xml时,看网上说这个是什么开可以省略,没怎么懂。自己写的时候看mybatis拼接的SQL语句,发现过这是个是SQL语句里函数的括号,看下图。
close:同上
separator:循环内容之间以“,”分隔。可以参看上图
mybatis接受的参数分为:(1)基本类型;(2)对象;(3)List;(4)数组;(5)Map
mybatsi的foreach标签xml文件写法示范:
说明一下 “jdbcType=INTEGER ”是为了说明java传递给Mybatis的参数,我这里age是int类型,对应的jdbcType是INTEGER。关于jdbcType其他类型的参数可以看MyBatis 通过包含的jdbcType类型
parameterType里写的传递的参数,这里是java.util.List,因为传递的是list。
resultType写的是User,如果你没在sqlMapConfig.xml 文件里的typeAliases标签里配置类的路径,也可以在这写,比如“com.domain.User”
<select id="bylike" parameterType="java.util.List" resultType="User">
SELECT * FROM user
WHERE 1=1
AND age IN
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item.age,jdbcType=INTEGER}
</foreach>
</select>
foreach内多参数写法
<update id="update" parameterType="java.util.List">
INSERT INTO user (name,age,sex,user_id,friend_id) VALUES
<foreach collection="list" item="item" index="index" separator="," >
(
#{item.name,jdbcType=VARCHAR},
#{item.age,jdbcType=INTEGER},
#{item.sex,jdbcType=VARCHAR}
)
</foreach>
</update>
mybatis传入多个参数时,用map进行封装,collection可以这么写
dao层的接口
//这里hashMap主要有两个参数,一个是关键字,一个是idList。
List<UserDO> searchByKeyWord(HashMap<String,Object> hashMap);
xml配置
由于是多个参数,用的传递的是map,不写parameterType没事。
<select id="searchByKeyWord" resultMap="user" >
SELECT * FROM user u
WHERE 1=1
AND
u.user_id IN
<!-- **********这里idList对应的是我传递的hashMap一个键。-->
<foreach collection="idList" item="item" index="index" open="(" separator="," close=")">
#{item.userId ,jdbcType=INT}
</foreach>
<if test="keyWord !=null">
AND u.user_name LIKE CONCAT('%',#{keyWord},'%')
</if>
</select>