1、约束条件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.IUserDao">
xxxxxx
xxxxxx
</mapper>
2、<mapper namespace="dao路径">
3、实体类与表中字段名称不相同时,resultmap进行结果集映射
(1) 实体类中的字段一对一
<resultMap id= " resultmap_name" type="实体类的Java类型">
<id column="主键id" property="实体类的id" >
<result column=" 表中字段1" property="实体类对应表中的字段1">
<result column=" 表中字段2" property="实体类对应表中的字段2">
</resultMap>
为什么要使用resultMap
一对一。 如果不用resultMap,而使用resultType时,通过sql查找出来的字段与实体类中的字段不匹配,最终查出来实体类的值为null,因此需要有一个实体类与数据库中字段名的映射,类似于key-value的模式进行匹配。
(2)实体类中存在一对多的字段。例如:老师类中有多个学生,学生以List<Student> student 存储
<resultMap id = "redultmap_name" type="老师类的Java类型">
<id column ="主键id" property = "老师类id">
<result column=" 表中字段1" property="老师类对应老师表中的字段1">
<collection property = "学生类在老师类中的属性名称" ofType = "Student">
<id column ="主键id" property = "学生类id">
<result column=" 学生表中字段1" property="学生类对应学生表中的字段2>
<result column=" 学生表中字段2" property="学生类对应学生表中的字段2">
</collection>
</resultMap>
resultMap的使用:
<select id="Java类中的查询的方法名称" resultMap = "redultmap_name">
select * from teacher t left outer join student s on t.id = s.sid;
</select>
为什么要使用resultMap
一对多。 如果不用resultMap,而使用resultType时,老师类中只有学生类的属性名称,并不能查找出学生类中各个属性字段,查找出来的学生类都是null;因此,在老师类配置文件中需要对学生类,做一层映射,告诉java代码,学生类在老师类中java类型,学生类的每个字段与学生表中的每个字段的映射关系,这样就能跟着这条路径往下查到学生类的每个属性字段的值。
(3)实体类存在多对一的字段,学生类中有一个老师
<resultMap id="accountUserMap" type="account">
<id property="id" column="aid"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<association property="user" column="uid" javaType="user">
<id property="id" column="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
<result column="sex" property="sex"></result>
<result column="birthday" property="birthday"></result>
</association>
</resultMap>
<select id="findAll" resultMap="accountUserMap">
select u.*,a.id as aid,a.uid,a.money from account a , user u where u.id = a.uid;
</select>