1. 程式人生 > >mybatis一對多映射【班級與學生】

mybatis一對多映射【班級與學生】

foreign turn resultmap style mage mes com ren insert

1)如圖技術分享圖片

2)創建grades.sql和students.sql

drop table students;
drop table grades;
create table grades(
    gid    int(5)    primary key,
    gname varchar(10)
 );
create table students(
    sid    int(5)    primary key,
    sname varchar(10),
    sgid int(5),
    constraint sgid_fk foreign key(sgid) references grades(gid)
);
insert into grades(gid,gname) values(
1,‘java‘); insert into students(sid,sname,sgid) values(1,‘哈哈‘,1); insert into students(sid,sname,sgid) values(2,‘呵呵‘,1);

3)創建Grade.java和Student.java

**
 * 班級(單方)
*/
public class Grade {
    private Integer id;
    private String name;
    private List<Student> studentList = new ArrayList<Student>();
    
public Grade(){} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudentList() {
return studentList; } public void setStudentList(List<Student> studentList) { this.studentList = studentList; } } /** * 學生(多方) */ public class Student { private Integer id; private String name; private Grade grade; public Student(){} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } }

4)創建GradeMapper.xml和StudentMapper.xml

GradeMapper.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="gradeNamespace">
    <resultMap type="loaderman.one2many.Grade" id="gradeMap">
        <id property="id" column="gid" />
        <result property="name" column="gname"/>
        <collection property="studentList" resultMap="studentNamespace.studentMap"/>
    </resultMap>
    <select id="findGradeByName" parameterType="string" resultMap="gradeMap">
        select g.gid,g.gname,s.sid,s.sname
        from grades g,students s
        where g.gid = s.sgid
        and s.sname = #{name}
    </select>
</mapper>

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="studentNamespace">
    <resultMap type="loaderman.one2many.Student" id="studentMap">
        <id property="id" column="sid" />
        <result property="name" column="sname"/>
        <association property="grade" resultMap="gradeNamespace.gradeMap"/>
    </resultMap>
    <select id="findAllByName" parameterType="string" resultMap="studentMap">
        select s.sid,s.sname,g.gid,g.gname
        from grades g,students s
        where g.gid = s.sgid
        and g.gname = #{name}
    </select>
</mapper>

5)創建GradeStudentDao.java

public class GradeStudentDao {
    /**
     * 查詢java班級有哪些【學生】
     */
    public List<Student> findAllByName(String name) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectList("studentNamespace.findAllByName",name);
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 查詢哈哈屬於哪個【班級】
     */
    public Grade findGradeByName(String name) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectOne("gradeNamespace.findGradeByName",name);
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    public static void main(String[] args) throws Exception{
        GradeStudentDao dao = new GradeStudentDao();
        List<Student> studentList = dao.findAllByName("java");
        for(Student s  : studentList){
    System.out.println(s.getId()+":"+s.getName()+":"+s.getGrade().getId()+":"+s.getGrade().getName());
        }
        Grade grade = dao.findGradeByName("哈哈");
        System.out.println(grade.getId()+":"+grade.getName());
    }
}

mybatis一對多映射【班級與學生】