JavaEE——Mybatis(8)--关联查询以及使用resultMap和association封装规则的定义关联对象

1.创建一个用来关联的表

 

2.创建外键约束

3.查询

SELECT s.id id, s.name name, s.sex sex, s.age age, s.grade_id grade_id, g.id gid,
 g.grade_name grade_name FROM student s, grade g WHERE s.grade_id=g.id AND s.name='skye' 

  在web中

StudentMapper.class

//利用关联查询的方法从数据库获取学生的信息以及班级信息
    public Students getStuAndGrade(Integer id);

  StudentMapper.xml

<?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.dao.StudentMapperPlus">

    <!--public Students getStuAndGrade(Integer id);-->
    <resultMap type="com.person.Students" id="myStu">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="sex" property="sex"/>
        <result column="age" property="age"/>
        <result column="gid" property="grade.id"/>
        <result column="grade_name" property="grade.gradeName"/>
    </resultMap>
    <select id="getStuAndGrade" resultMap="myStu">
        SELECT s.id id, s.name name, s.sex sex, s.age age,
         s.grade_id grade_id, g.id gid, g.grade_name grade_name
         FROM student s, grade g WHERE s.grade_id=g.id AND s.id=#{id}
    </select>

</mapper>

  Test

@Test
    public void test5() throws IOException {
        String resource ="conf/com/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession openSession = sqlSessionFactory.openSession();

        try{
            StudentMapperPlus mapper = openSession.getMapper( StudentMapperPlus.class );

            Students students = mapper.getStuAndGrade(1);
            System.out.println(students);
        }finally{
            openSession.close();
        }
    }

   使用association的StudentMapper.xml    其余不变

<!--
		使用association定义关联的单个对象的封装规则;
	 -->
    <resultMap type="com.person.Students" id="myStu1">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="sex" property="sex"/>
        <result column="age" property="age"/>

        <!--  association可以指定联合的javaBean对象
		property="grade":指定哪个属性是联合的对象
		javaType:指定这个属性对象的类型[不能省略]
		-->
        <association property="grade" javaType="com.person.Grade">
            <id column="gid" property="id"/>
            <result column="grade_name" property="gradeName"/>
        </association>
    </resultMap>
    <select id="getStuAndGrade" resultMap="myStu1">
        SELECT s.id id, s.name name, s.sex sex, s.age age,
         s.grade_id grade_id, g.id gid, g.grade_name grade_name
         FROM student s, grade g WHERE s.grade_id=g.id AND s.id=#{id}
    </select>

  

posted @ 2018-01-11 19:58  SkyeAngel  阅读(193)  评论(0)    收藏  举报