一.何为映射器?
映射器是由java接口和XML文件(或注解)共同组成的,它的作用如下:
1.定义参数类型
2.描述缓存
3.描述SQL语句
4.定义查询结果和POJO的映射关系
一个映射器的实现方式有两种,下面只了解xml方式:
1.通过XML文件方式实现
如:
RoleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybaits.mapper.RoleMapper">
<select id="getRole" parameterType="long" resultType="role">
select id,role_name as roleName,note from t_role where id = #{id}
</select>
<insert id="insertRole" parameterType="role">
insert into t_role(role_name,note) values (#{roleName},#{note})
</insert>
<delete id="deleteRole" parameterType="long">
delete from t_role where id = #{id}
</delete>
</mapper>
RoleMapper.java(接口)
package mybaits.mapper;
import mybaits.pojo.Role;
public interface RoleMapper {
public Role getRole(Long id);
public int deleteRole(Long id);
public int insertRole(Role role);
}
xml映射文件和java接口文件一起相呼应才能发挥映射器的作用。
二.映射器的主要元素
1.select元素
1)配置
简单例子:
<select id="getRole" parameterType="long" resultType="role">
select id,role_name as roleName,note from t_role where id = #{id}
</select>
它和接口里的getRole方法对应。
下面我们总结下:
1.id标出了这条SQL
2.parameterType定义参数类型
3.resultType定义返回值类型
1.2自动映射
有一个参数autoMappingBehavior,当它不设置为NONE的时候,MyBatis会提供自动映射的功能,
在settings中配置,它包含三个值:NONE 取消自动映射。PARTIAL 只会自动映射 。FULL 会自动映射任意复杂的结果集。 默认为PARTIAL
只要返回的SQL列名和JavaBean的属性一致,MyBatis就会帮助我们回填这些字段而无需任何配置。
在实际的情况中,大部分的数据规范都是要求每个单词用下划线分隔,而Java则使用驼峰命名法,于是使用列的别名就可以使得MyBatis自动映射,或者在配置文件中开启驼峰命名方式。
下面我们通过一个例子来学习:
Role.java
public class Role {
private Long id;
private String roleName;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
数据表如下:
下面是自动映射配置:
<select parameterType="id" id="getRole" resultType="com.Role">
Select id, role_name as roleName,note from t_role where id=#{id}
</select>
使用SQL提供的别名功能使得查询结果和JavaBean的属性一一对应起来。
如果我们的数据库是规范命名的,POJO也采用驼峰式的,我们也可以设置mapUnderscoreToCamelCase为true,这样就可以实现从数据库到POJO的自动映射了。
1.3.传递多个参数
如果我们想要传递多个参数到映射器,我们可以有:
1)使用注解方式传递参数
此方式的使用受到参数个数的影响,当参数个数小于6时,它是最佳的传参方式,否则使用javaBean方式。
例子:
接口方法
public List<Role>findRoleByAnnotation(@Param("roleName")String rolename,@Param("note")
String note);
映射配置:
<select id="findRoleByAnnotation" resultMap="roleMap">
select id, role_name , note from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
</select>
2)使用javaBean传递参数
例子:
javaBean
package com.params;
public class RoleParam {
private String roleName;
private String note;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
接口方法:
public List<Role> findRoleByParams(RoleParam params);
映射配置:
<select id="findRoleByParams" parameterType="com.params.RoleParam" resultMap="roleMap">
select id, role_name , note from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
</select>