<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.dao.MyMapper"><!--
namespace:名称空间——接口全类型
--><selectid="search"resultType="com.dao.Student">
select * from student where name like #{name}
<!-- 需要返回结果的类型作为映射,id值为方法名,resultType值为返回的List集合中元素的类型--></select></mapper>
#{}:以预编译的形式(表示为占位符?),将参数设置到SQL语句中,可以防止SQL注入
${}:取出的值直接拼接在SQL语句中,会有安全问题
对于单个参数,mybatis不会做特殊处理
select * from student where id = #{id}
#{id}中的id可以任意,#{aa},#{bb},#{cc}都是可以的
对于多个参数,mybatis会做特殊处理,将多个参数封装为一个map
key:param1,param2...paramN
value:传入的参数
例如:
select * from student where id = #{param1} and name=#{param2}
这样不美观,不易操作,易混淆,对于接口形式的传参不适用
mybatis提供的自定义参数名:
在对应接口中的方法上使用注解
public Student getStudent(@Param("myId")Integer i,@Param("myName")String name);
多个参数会被封装为1个map
key:@Param("参数名")中指定的值
value:传入的参数
select * from student where id = #{myId} and name=#{myName}
Mybatis的传参类型
1.传入的多个参数正好是业务模型对象
<insertid="insert"parameterType="模型对象全类名">
insert into student(name,age) values(#{模型对象的属性名},#{模型对象的属性名})
</insert>
2.传入的参数不是业务模型,是不常用的类型,可以用map
参数名就是map的key
<insertid="insert"parameterType="map">
insert into student(name,age) values(#{key},#{key})
</insert>
3.传入的参数是对象的属性
public Student getById(@Param("stu")Student stu);
<selectid="getById">
select * from student where id = #{stu.id}
</select>
4.传入的参数是List对象的元素
public Student getById(@Param("list")List<Integer> ids);
如果不使用自定义参数,List集合封装到Map中默认的key就是list
<selectid="getById">
select * from student where id = #{list[0]}
</select>