MyBatis框架中Mapper方法中的参数问题解决方案
来源:互联网 发布:朝鲜族和韩国人知乎 编辑:程序博客网 时间:2024/05/21 04:20
参数问题解决
1.当Mapper方法中的参数只有一个参数时,
1.1当参数是个普通对象时,例如EmployeeMapper接口中的一个方法为public Employee selectEmp(Integer id);
,我们在映射文件EmployeeMapper.xml上要配置
<select id="selectEmp" resultType="com.neuedu.entity.Employee"> select id,e_name,gender,email from employee where id = #{id}</select>
#{id}是用来传递参数,因为就一个参数,所以Mapper方法的参数只能放在这,#{id}可以是任意的,如#{iid},都可以正常执行。
1.2当参数是一个自己创建的实体类的对象时,例如EmployeeMapper接口中的一个方法为public void insertEmp(Employee employee);
我们在映射文件EmployeeMapper.xml上要配置:
<insert id="insertEmp" parameterType="com.neuedu.entity.Employee" > insert into employee(e_name,gender,email) values(#{name},#{gender},#{email})</insert>
#{}中要与实体类的属性名一致。
2.当参数为多个时,例如EmployeeMapper接口中的一个方法为
public void updateEmpNameById(@Param("name")String name,@Param("email")String email,@Param("id")int id);
在映射文件EmployeeMapper.xml中配置:
<update id="updateEmpNameById"> update employee set e_name=#{name},email=#{email} where id=#{id} </update>
Mapper方法中要加@Param注解,或者在映射文件中写#{param1},#{param2},#{param3} 或者写0,1,2
update employee set e_name=#{param1},email=#{param2} where id=#{param3}
update employee set e_name=#{0},email=#{1} where id=#{2}
3.当传入的参数是一个Map类型时,例如:
public void updateEmpName(Map<String, Object> map);
在映射文件EmployeeMapper.xml配置:
<sql id="employeeSQL"> update employee set name=#{name},email=#{email} where id=#{id} </sql> <update id="updateEmpName"> <include refid="employeeSQL"/> </update>
注意:其中用到了SQL节点,把常用的SQL语句提取出来,以后SQL语句中如果有常用的SQL语句,就可包含导入。
测试一下能否使用:
@Test public void testupdateEmpName(){ Map<String, Object> map=new HashMap<>(); map.put("name", "xiaogougou"); map.put("email", "xiaogou@163.com"); map.put("id", 5); mapper.updateEmpName(map); session.commit(); session.close(); }
4.参数获取的方法#{}与${}的区别
#{}:可以获取map中的值或者pojo对象属性的值
${}: 可以获取map中的值获取pojo对象属性的值
区别:
#{}:是以预编译的形式,将参数设置到sql语句中,PreparedStatement;防止sql注入
${}:取出的值直接拼装在sql语句中,会有安全问题;
原生JDBC不支持占位符的地方我们就可以使用${}进行取值,#{}只是取出参数中的值!
例子:
update ${param4} set e_name='${param1}',email=#{param2} where id=${param3}
编译以后,SQL语句为update employee set e_name='gouge',email=? where id=4
当操作的表名当做参数传入SQL语句时,要是用${}传入。
update ${param4} set e_name='${param1}',email=#{param2} where id=#{param3}
注意:当${}在一定的地方要加双引号(”“)。
关于参数的问题:
①.使用#{}来传递参数
②.若目标方法的参数类型为对象类型,则调用其对应的getter方法,如getEmail()
③.若目标方法的参数类型为Map类型,则调用其get(key)
④.若参数是单个的,或者列表,需要使用@param注解来进行标记
⑤.注意:若只有一个参数,则可以省略@param注解
- MyBatis框架中Mapper方法中的参数问题解决方案
- MyBatis框架中Mapper类中方法的返回类型问题解决方案
- Mybatis框架中Mapper文件传值参数获取。【Mybatis】
- Mybatis框架中Mapper文件传值参数获取
- MyBatis中mapper接口方法多参数传入
- Mybatis中mapper代理方法
- Mybatis中Mapper内置方法
- mybatis mapper 传入多个参数方法
- mybatis框架(2)---mapper代理方法
- Mybatis mapper文件中的转义方法
- Mybatis中mapper.xml中的模糊查询
- Mybatis中resultMap输出mapper中的配置
- mybatis的mapper接口方法参数是对象,对象中包含list情况的处理
- Mybatis中配置Mapper的方法
- Mybatis中配置Mapper的方法
- Mybatis中配置Mapper的方法
- Mybatis中配置Mapper的方法
- Mybatis--Mapper文件中使用静态方法
- Android Studio 常用快捷键
- PXE+DHCP+TFTP+Cobbler 无人值守安装centos 7
- webService是什么
- 面试算法题
- 自然语言学习心得 1
- MyBatis框架中Mapper方法中的参数问题解决方案
- 最小区间覆盖(南洋理工—喷水装置二)
- 很有用的STM32外部中断
- loadrunner Web_类函数之web_add_filter()
- 如何利用第三方获取天气
- 欢迎使用CSDN-markdown编辑器
- pat 乙级 1022. D进制的A+B (20)
- Python 编码的前世今生
- 第二周——项目一—函数参数传值