一、多对一的关联操作
注:本例创建的是classRoom和Stuent表,student代表多的一方,classRoom代表一的一方。
步骤一:在多的一端的实体类中添加一的类型的对象,表示关联关系
如图:
步骤二:
使用<resultMap>
标签:声明关联关系映射关系。
resultMap标签中的属性:
id属性:给当前resultMap标签设定一个唯一标识,便于在需要的地方引用。通常是<select>
标签的id+resultMap的命名方式
column属性:指定数据库表字段名
property属性:指定Java实体类的属性
如本例:
<resultMap id="selectByNameResultMap" type="cn.pojo.Student">
<id column="sid" property="sid"></id>
<result column="stu_name" property="stuName"></result>
<result column="stu_age" property="stuAge"></result>
<result column="cid" property="cid"></result>
<!--association标签:映射[对一(对方是一的一段)]关联关系-->
<!--property属性:在当前实体类类型中,用来建立关联关系的属性名,之后会给它赋值-->
<!--javaType属性:被关联的实体类类型全类名-->
<association property="classRoom" javaType="cn.pojo.classRoom">
<!--在association标签内部指定被关联的类型和表字段的对应关系-->
<id column="cid" property="cid"/>
<!--对应的实体类中set和get方法应该也写成对应的小驼峰命名法property就不报红了如此类中的原来是自动生成的setclassName()改成setClassName-->
<result column="class_name" property="className"/>
</association>
</resultMap>
最大的用处在于表示关联关系:
使用<association>
标签,在association标签内部指定被关联的类型和表字段的对应关系。
<association property=“”>
标签:映射(对一)关联关系,不管自己是(多的一方)还是(一的一方),要求对方是(一的一方)。
property属性:在当前实体类(Student)类型中,用来建立关联关系的属性名,这里是classRoom属性
javaType属性:被关联的实体类全类名(此题为classRoom)
如本例中的:
<!--association标签:映射[对一(对方是一的一段)]关联关系-->
<!--property属性:在当前实体类类型中,用来建立关联关系的属性名,之后会给它赋值-->
<!--javaType属性:被关联的实体类类型全类名-->
<association property="classRoom" javaType="cn.pojo.classRoom">
<!--在association标签内部指定被关联的类型和表字段的对应关系-->
<id column="cid" property="cid"/>
<!--对应的实体类中set和get方法应该也写成对应的小驼峰命名法property就不报红了如此类中的原来是自动生成的setclassName()改成setClassName-->
<result column="class_name" property="className"/>
</association>
尚硅谷老师完整解析图:
完整步骤:
测试类:
@Test
public void ManyToOne() throws Exception{
//目标:在查询学生信息的同时,将教室信息也查询出来
InputStream in = Resources.getResourceAsStream("Mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new