<!--
关于sql语句中填充占位符时参数的处理:
1.单个参数:MyBatis不做任何处理,填充占位符时获取参数的key可以任意指定
如:#{任意指定}
2.多个参数:MyBatis会将多个参数封装到一个Map中,Map的key时arg0,arg1,arg2...或者param1,param2,param3...
此时填充占位符取值时的key必须是arg0,arg1,arg2...或者param1,param2,param3...
如:#{arg0/param1} #{arg1/param2}
我们也可以通过在方法参数的前面添加@Param注解指定从Map中取值的key
3.POJO:如果传入的多个参数可以封装成POJO对象,那么可以直接传入POJO对象,此时填充占位符获取值的key是POJO的属性名
如:#{POJO的属性名}
4.Map:如果传入的多个参数不可以封装成POJO对象,那么可以将它们放到一个Map中传入到方法中,此时填充占位符获取值的key
就是Map中指定的key
如:#{入参Map中指定的key}
5.TO:如果传入的多个参数不可以封装成POJO对象,但是我们经常使用,可以创建一个TO对象
-->
一个参数:
public void delEmployee(Integer id);
<delete id="delEmployee" >
delete from employees where id=#{a}
</delete>
多个参数:
public Employee getEmployeeByLastNameAndEmail(@Param("lastName") String lastname,@Param("email") String email);
<select id="getEmployeeByLastNameAndEmail" resultType="com.atgui.spring.mybatis.entities.Employee">
select * from employees where last_name=#{lastName} and email=#{email}
</select>
pojo对象:
public void updateEmployee(Employee employee);
<update id="updateEmployee" parameterType="com.atgui.spring.mybatis.entities.Employee">
update employees set last_name=#{lastName},email=#{email},salary=#{salary},dept_id=#{deptId} where id=#{id}
</update>
Map:
public Employee getEmployeeByLastNameAndEmailMap(Map<String,Object> map);
<select id="getEmployeeByLastNameAndEmailMap" resultType="com.atgui.spring.mybatis.entities.Employee">
select * from employees where last_name=#{ln} and email=#{el}
</select>
<!--
#{}与${}的区别:
#{}:获取请求参数之后,预编译Sql,安全
${}:获取请求参数之后,直接拼接到sql语句中,有sql注入的问题
-->