Mybatis之sql映射文件:用来存放sql语句的配置文件,需要与同名SQL接口绑定,sql语句有着各自的对应标签<select>、
<insert>、<delete>、<update>, 这些标签全都放在<mapper>标签内
一、sql映射文件的标签
<mapper>:存放增删该查标签的地方。
- namespace:名称空间,绑定接口,指定为接口的全类名
- <select>:查询标签,存放sql查询语句。
- id:唯一标识符,用来设置为接口方法名
- resultType:返回值类型
- #{id}:相当于占位符,#{Bean对象的属性名},由select标签的id值即接口的方法传入参数来确定占位符
实际值,与该方法的参数名无关,参数名不需要与bean属性名对应
<mapper namespace="mybatis.dao.EmployeeMapper">
<select id="接口方法名" resultType="返回值,接口全类名或全局配置文件中设置的别名">
select id,last_name lastName,email,gender from tb1_employee where
id = #{Bean对象的属性}
</select>
</mapper>
- <insert>、<delete>、<update>:增删改,对比查询标签不同在于没有resultType属性。
<mapper namespace="接口全类名">
<insert id="接口方法名">
insert into tb1_employee values(#{id},#{lastName},#{gender},#{email})
</insert>
<delete id="接口方法名">
delete from tb1_employee where id=#{id} and gender= #{gender}
</delete>
<update id="接口方法名">
update tb1_employee set gender=#{gender} where id=#{id}
</mapper>
<insert>标签有俩个属性可以在插入一条记录时,返回自增主键的值。
- useGeneratedKeys="true":开启返回自增主键值功能
- keyProperty="Bean对象属性名":设置返回的自增主键值映射到Bean对象的哪个值中。
<mapper namespace="mybatis.dao.EmployeeMapper">
<insert id="addEmp" useGeneratedKeys="true" keyProperty="id">
insert into tb1_employee values(#{id},#{lastName},#{gender},#{email})
</insert>
</mapper>
二、关联接口的方法参数个数不一致处理
关联方式:<mapper>的namespace设置接口全类名 ;<selecr><insert><delete><update>的id设置接口方法名
之前提到,占位符的实际值来自于接口方法的传入参数,一般我们设置方法参数传入一个Bean对象,#{属性名}来获取值。
但是当我们有多个参数时,并且传入参数并不是只有一个Bean对象,我们必须使用其它方法。
取参数值使用#{}原因:防止SQL注入。
单个方法参数:
基本类型/Bean对象都使用:#{返回bean对象的属性名}
多个方法参数:
第一种:根据参数顺序索引进行取值。#{index},index从0开始
第二种:在方法参数定义前加上注解:@Param("id")。
然后取值:#{id}
第三种:将参数封装成一个map,方法参数设置成该map,
然后取值:#{键名}
特别情况:
1、当多个参数中包含了Bean对象取值方法----------使用#{index.属性名}来取值
2、当参数中包含Collection(List,Set)取值方法----------使用#{collection[ i ]}来取值,List也可以使用#{list[ i ]}
3、当参数中包含数组(Array)取值方法----------使用#{array[ i ]}来取值