您的位置:首页 > 其它

mybatis 学习记录(4.1)—— 级联查询(无 association 和 collection)

2017-05-21 17:19 597 查看
版权声明:版权声明:尊重他人劳动成果,转载请注明出处:

http://blog.csdn.net/czd3355/article/details/72599643

1. 先前介绍

本文是对 mybatis 级联操作最简单操作的介绍,如果想要了解有关 association 和 collection 内容的话,可以移步到这篇文章进行阅读。 mybatis 学习记录(4.2)—— 级联操作(有 association 和 collection)

1.1 数据库关系:

teacher 表有 id,name 字段



stu 表有 id,name,t_id 字段。其中 t_id 为外键字段。



1.2 bean 代码

bean 之间的关系:一名老师可以有多名学生

Student.java

public class Student {
private Integer id;
private String name;
private Teacher teacher;
// 省略 get/set 方法
}


Teacher.java

public class Teacher {
private String name;
private Integer id;
private List<Student> studentList;
// 省略 get/set 方法
}


2. 一对多查询

关键代码:

@Test
public void main() throws Exception {
OneToManyDao oneToManyDao = new OneToManyDao();
oneToManyDao.testFindByName("t1");
}

/**
* 根据老师名字,查询该老师的所有学生
* @param name 老师名字
* @return 该老师的所有学生
* @throws Exception
*/
public List<Student> testFindByName(String name) throws Exception {
SqlSession sqlSession = getSession().openSession();
return sqlSession.selectList(stuDaoNameSpace+ ".findByName", name);
}


映射文件(studentMapper.xml)

<mapper namespace="com.czd.mybatis02.dao.StudentDao">

<resultMap id="StudentMap" type="com.czd.mybatis02.bean.Student">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
</resultMap>

<!--本例很简单,只是通过 INNER JOIN 实现级联操作就可以了-->
<select id="findByName" parameterType="string" resultMap="StudentMap">
SELECT s.id,s.name
FROM stu s INNER JOIN teacher t
ON s.t_id = t.id
AND t.name = #{name}
</select>

</mapper>


小提示 1:这里为什么要写成
resultMap="StudentMap"
呢?

回答:这是由下面的 SQL 查询返回的结果决定的。本 SQL 需要返回 stu 表的 id 和 name 字段。那么我们就需要将找到一个对象来接收 SQL 返回的字段。而在
resultMap
标签中,正好封装了这两个字段,因此我们可以这么写。

另外需要补充的是:如果表字段名和对应 bean 属性名一样的话,可以使用
resultType="com.czd.mybatis02.bean.Student"
代替上面的
resultMap="StudentMap"
在这里使用
resultMap
的目的就是为了解决表字段名和对应 bean 属性名不一致,导致无法通过反射将彼此成功映射的问题。


resultType 和 resultMap 是不能同时存在的。

输出结果:



从上图我们可以看出 SQL 成功执行并且影响了两条记录。(即查询到了两条符合要求的记录)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: