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