Mapper映射器是Mybatis中的核心工具,也是Mybatis的核心功能。通过映射器,我们可以自定义SQL语句,灵活的操作数据库,这也是Mybatis的特色所在。所以,熟练使用映射器是掌握Mybatis的核心。Mybatis映射器由mapper接口和mapper xml配置文件组成。
Select
当数据库字段与javabean中属性相同时,Mybatis自动将查询返回的结果集绑定到javabean相应的属性上,当数据库字段与javabean中属性不同时,我们可以通过sql语句的字段别名方式,使得Mybatis可以自动映射。如:
<select id="getRole" parameterType="java.lang.Integer" resultType="Role">
select id, role_name roleName, note from role where id = #{id}
</select>
这个查询语句,根据ID值查询相应的记录,返回字段名为id、rolenName、note,Mybatis自动将他们组装成一个Role对象实例作为返回结果。
我们还可以通过resultMap映射结果集。
与select定义resultMap
<resultMap type="Role" id="roleResultMap">
<id property="id" column="id"/>
<result property="roleName" column="role_name"/>
<result property="note" column="note"/>
</resultMap>
<select id="getRole" parameterType="java.lang.Integer" resultMap="roleResultMap">
select id, role_name, note from role where id = #{id}
</select>
这里定义了一个id为roleResultMap的映射规则resultMap,它的type属性为Role。其中id元素即为数据库表中的主键(可以有多个联合主键)、result元素为其它简单类型(当然还有复杂类型)。property属性是javabean中的属性名,column是数据库中对应的字段名。指定select元素的resultMap属性值为roleResultMap(注意不是resultType,resultType指定返回类型, 而resultMap指定使用哪一个resultMap的映射规则,二者不能同时存在)。这样Mybatis同样可以完成数据库记录到javabean的自动映射。
参数parameterType属性和返回类型resultType属性都可以指定简单的java类型,如java.lang.String、java.lang.Integer(当然可以简写成string、integer,Mybatis内置的系统 定义别名,如配置文件中的typeAliases元素的功能一样),可以指定java.util.Map(map),也可以指定javabean类,如role。
使用map作为参数或返回类型很少使用,下面是一个简单的例子
RoleMapper接口中定义方法
Map<String, Object> getRoleMapByMap(Map<String, Object> map);
roleMapper.xml配置文件中定义select
<select id="getRoleMapByMap" parameterType="java.util.Map" resultType="java.util.Map">
select * from role where id = #{id}
</select>
测试代码:
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 10002);
Map<String, Object> resultMap = roleMapper.getRoleMapByMap(map);
System.out.println(resultMap.get("role_name"));
getRoleMapByMap方法返回的resultMap中包含了数据库记录对应的键值对,{id: 10002, role_name: 'Mybatis', note: 'Mybatis learning.'}
程序运行结果打印出:Mybatis