1.使用mybatis联表查询
1.多对一:从多的一方来查询少的一方
例如 学生表----->班级表
根据学生id查询学生信息并携带班级信息
1.数据库
学生表
班级表
2.实体层
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int stuId;
private String stuName;
private String stuAge;
private String stuSex;
private int cid;
private StuClass sc;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StuClass {
private int cid;
private String cname;
}
3.dao层
public interface StudentDao {
public Student findById(int id);
}
4.mapper层
<!--resultMap 解决实体层和数据库列名不匹配问题-->
<resultMap id="baseMap" type="com.wx.entity.Student">
<!--解决多的一方 数据库列名与实体层不匹配问题-->
<id column="stu_id" property="stuId"/>
<result column="stu_name" property="stuName"/>
<result column="stu_age" property="stuAge"/>
<result column="stu_sex" property="stuSex"/>
<result column="cid" property="cid"/>
<!--association: 表示一的一方
property: 它表示属性名
javaType: 该属性名对应的数据类型
-->
<!--解决一的一方 数据库与实体类列名不统一的问题-->
<association property="sc" javaType="com.wx.entity.StuClass">
<id column="cid" property="cid"/>
<result column="cname" property="cname" />
</association>
</resultMap>
<select id="findById" resultMap="baseMap">
select * from tb_stu s join tb_class c on s.cid = c.cid where stu_id=#{id}
</select>
5.测试类
@Test
public void testFind() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
StudentDao studao = session.getMapper(StudentDao.class);
Student stu = studao.findById(2);
System.out.println(stu);
session.close();
}