mybatis一对多映射班级与学生

Posted 码上加油站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis一对多映射班级与学生相关的知识,希望对你有一定的参考价值。

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一对多映射班级与学生的主要内容,如果未能解决你的问题,请参考以下文章

flask 中orm关系映射 sqlalchemy的查询

4.一对多关联映射

Hibernate 映射及查询

hibernate入门三之关联映射(一对多和多对一)

MyBatis

MyBatis