mybatis的insert、update、delete、select中都提到了parameterType这个元素。
那么,这么爱上镜的它究竟怎么使用呢?听我唠唠。
一、接口中的参数类型
我暂且分为三类:基本数据类型、POJO类、HashMap类
你也可以把POJO类和HashMap归为复杂数据类型,均可。
二、接收参数的方式
a、#{参数} 预编译类型
b、${} 非预编译(直接引用sql拼接,但是不能防止sql注入)
基本数据类型只能传入一个参数,一般使用 #{参数}获取,复杂数据类型用 #{属性名},map中则用#{key}获取;
${} 去接收参数,在一个参数情况时,默认必须使用${value}获取参数值
比如:UserDaoImpl.xml
<update id="updateUser" parameterType="cn.zgg.mybatis.pojo.User">
UPDATE tb_user
SET
user_name=#{userName},
password=#{password},
name=#{name},
age=#{age},
sex=#{sex},
birthday=#{birthday},
updated=NOW()
WHERE
(id=#{id});
</update>
java类:
/*
* 修改用户
*/
public void updateUser(User user);
测试类:
@Test
public void testUpdateUser() {
User user = this.userDao.queryUserById(1l);
user.setAge(12);
user.setName("wyll");
this.userDao.updateUser(user);
}
总结:接口名与id值一致,参数类型是自定义包装POJO类,这里写的是User类的全路径。
三、注解
1)、 mapper接口一般只接收一个参数,不过呢,你也可以通过使用@Param注解将多个参数绑定起来,作为一个map输入参数;
2)、mapper借口如何传递多个参数呢?
有两种方式:
a 、默认规则获取参数:{0,1,param1,param2}
b、使用@Param注解指定参数名(最佳方案)
这时,映射文件就可以通过${}或者#{}对应参数名获取参数
四、返回值类型
注意了注意了!!!
ResultMap 是MyBatis中最重要最强大的元素
为什么这么吹?
因为,它解决了两大问题:POJO属性名和表结构字段名不一致的问题;
完成高级查询:比如说:一对一、一对多、多对多。
当然了,驼峰命名法也是可以解决属性和表结构不对应的问题的,只要在mabatis配置文件加入
<setting name="mapUnderscoreToCamelCase" value="true"/>解决;
还有sql中使用别名,不过我本人不喜欢,因为懒喽,嘿嘿。