引入映射器
映射器的主要元素
select元素配置
* id属性,和namespace构成唯一标识,为定义接口的方法名称
* parameterType,入参的类型,可以是全路径类名,也可以是别名,必须是上下文定义的
* parameterMap, 废弃
* resultType, 可以是全路径名,也可以是别名,结果集将通过javaBean映射,不能和resultMap同时使用
* resultMap, 定义表字段和pojo的字段的映射规则
另外几个不常用的元素:
* flushCache,作用是调用sql后,是否要求MyBatis清空之前的查询的本地缓存和二级缓存,默认false
* useCache,启动二级缓存,默认为true
查询中的自动映射
也就是没有配置resultMap的映射规则,直接将查询的字段值映射到对应的pojo的字段上,
要求数据库字段和pojo的字段名一致,这种情况下,一般是要给查询的字段起和pojo字段一致的别名
自动映射的设置
resultMap指定映射方式
在映射过程中,可能需要指定typeHandler进行类型转换,自动映射无法完成, 此时借助resutlMap
* 将上面自动映射的SQL片段,修改
1. 无需指定列的别名,在resultMap中设置列的映射规则
2. 去除resultType,指定resultMap,两个属性不同共存
type: 映射的javaBean类型
id主键列,result一般列
property: 表列名映射的javaBean 字段
column: 表列名
参数传递的三种方式
指定parameterType的三种类型
1. map方式
public Student queryStudentByNameAndSex(Map map);
map的key需要和sql里面的参数一致 map.put("sex",sex)
map.put("name",name);
2. 注解方式
public Student queryStudentByNameAndSex(@Param("name")String stuName,@Param("sex")String sex);
3. javaBean的方式
要求javaBean的字段名和SQL片段中的参数名称一致
public void insertStudent(Student student);
insert into student_info (stu_age,stu_sex,stu_name) values
(#{stuAge},#{stuSex},#{stuName})