mybatis多表查询
Posted 呆萌老师博客号
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis多表查询相关的知识,希望对你有一定的参考价值。
/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*/
一个学生对应一个班级的情况
方法1:
<!-- 多表查询 -->
<!-- 用户表和班级表进行内连接查询 -->
<!-- 不能用resultType 要用resultMap 里面的类型需要自己定义-->
<select id="findUserinfoAndGrade" resultMap="userinfoMap"
select * from userinfo ,grade where userinfo.cid=grade.cid
</select>
<resultMap type="Userinfo" id="userinfoMap">
<id property="uid" column="uid"
<result property="name" column="name"
<result property="age" column="age"
<!-- association 使用在一对一或多对一时 代表一个学生有一个班级 -->
<!-- association中 属性一定要设置javaType -->
<association property="grade" javaType="Grade">
<id property="cid" column="cid"
<result property="cname" column="cname"
</association>
</resultMap>
方法2:
<!-- 将内连接拆分成两个查询语句 -->
<select id="selectUserinfo" resultMap="userinfoMap2" >
select * from userinfo
</select>
<select id="selectGradeByCid" parameterType="int" resultType="Grade" >
select * from grade where cid=#cid
</select>
<resultMap type="Userinfo" id="userinfoMap2">
<id property="uid" column="uid" />
<result property="name" column="name" />
<result property="age" column="age" />
<association property="grade" column="cid" select="selectGradeByCid">
</association>
</resultMap>
一个班级对应多个学生的情况
<select id="findGradeAndUserinfo" resultMap="gradeMap">
select * from grade,userinfo where grade.cid = userinfo.cid
</select>
<resultMap type="Grade" id="gradeMap">
<id property="cid" column="cid"/>
<result property="cname" column="cname"/>
association都有property属性,
association里面javaType属性 ;collection里面有ofType属性
<collection property="userlist" ofType="Userinfo">
<id property="uid" column="uid"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</collection>
</resultMap>
<!-- 分开查询 -->
<select id="selectGrade" resultMap="gradeMap1">
select * from grade
</select>
<select id="selectUserinfo" parameterType="int" resultType="Userinfo">
select * from userinfo where cid=#cid
</select>
<resultMap type="Grade" id="gradeMap1">
<id property="cid" column="cid"/>
<result property="cname" column="cname"/>
<collection property="userlist" column="cid" select="selectUserinfo">
<id property="uid" column="uid"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</collection>
</resultMap>
Dao:
//1.读取配置文件
InputStream is=this.getClass().getClassLoader().getResourceAsStream("mybatis.xml");
//2.获取会话工厂创建者
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
//3.获取会话工厂
SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
//4.获取会话
SqlSession sqlSession=sqlSessionFactory.openSession();
//5.查询
List<Userinfo> userlist=sqlSession.selectList("com.test.bean.UserinfoMapper.selectUserinfo",1);
//关闭会话
sqlSession.close();
for(int i=0;i<userlist.size();i++)
System.out.println(userlist.get(i).toString());
更多关注
https://edu.51cto.com/course/21604.html
以上是关于mybatis多表查询的主要内容,如果未能解决你的问题,请参考以下文章