1)如图

2)创建grades.sql和students.sql

  1. drop table students;
  2. drop table grades;
  3. create table grades(
  4. gid int(5) primary key,
  5. gname varchar(10)
  6. );
  7. create table students(
  8. sid int(5) primary key,
  9. sname varchar(10),
  10. sgid int(5),
  11. constraint sgid_fk foreign key(sgid) references grades(gid)
  12. );
  13. insert into grades(gid,gname) values(1,'java');
  14. insert into students(sid,sname,sgid) values(1,'哈哈',1);
  15. insert into students(sid,sname,sgid) values(2,'呵呵',1);

3)创建Grade.java和Student.java

  1. **
  2. * 班级(单方)
  3. */
  4. public class Grade {
  5. private Integer id;
  6. private String name;
  7. private List<Student> studentList = new ArrayList<Student>();
  8. public Grade(){}
  9. public Integer getId() {
  10. return id;
  11. }
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public List<Student> getStudentList() {
  22. return studentList;
  23. }
  24. public void setStudentList(List<Student> studentList) {
  25. this.studentList = studentList;
  26. }
  27. }
  28. /**
  29. * 学生(多方)
  30. */
  31. public class Student {
  32. private Integer id;
  33. private String name;
  34. private Grade grade;
  35. public Student(){}
  36. public Integer getId() {
  37. return id;
  38. }
  39. public void setId(Integer id) {
  40. this.id = id;
  41. }
  42. public String getName() {
  43. return name;
  44. }
  45. public void setName(String name) {
  46. this.name = name;
  47. }
  48. public Grade getGrade() {
  49. return grade;
  50. }
  51. public void setGrade(Grade grade) {
  52. this.grade = grade;
  53. }
  54. }

4)创建GradeMapper.xml和StudentMapper.xml

GradeMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="gradeNamespace">
  5. <resultMap type="loaderman.one2many.Grade" id="gradeMap">
  6. <id property="id" column="gid" />
  7. <result property="name" column="gname"/>
  8. <collection property="studentList" resultMap="studentNamespace.studentMap"/>
  9. </resultMap>
  10. <select id="findGradeByName" parameterType="string" resultMap="gradeMap">
  11. select g.gid,g.gname,s.sid,s.sname
  12. from grades g,students s
  13. where g.gid = s.sgid
  14. and s.sname = #{name}
  15. </select>
  16. </mapper>

StudentMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="studentNamespace">
  5. <resultMap type="loaderman.one2many.Student" id="studentMap">
  6. <id property="id" column="sid" />
  7. <result property="name" column="sname"/>
  8. <association property="grade" resultMap="gradeNamespace.gradeMap"/>
  9. </resultMap>
  10. <select id="findAllByName" parameterType="string" resultMap="studentMap">
  11. select s.sid,s.sname,g.gid,g.gname
  12. from grades g,students s
  13. where g.gid = s.sgid
  14. and g.gname = #{name}
  15. </select>
  16. </mapper>

5)创建GradeStudentDao.java

  1. public class GradeStudentDao {
  2. /**
  3. * 查询java班级有哪些【学生】
  4. */
  5. public List<Student> findAllByName(String name) throws Exception{
  6. SqlSession sqlSession = null;
  7. try{
  8. sqlSession = MybatisUtil.getSqlSession();
  9. return sqlSession.selectList("studentNamespace.findAllByName",name);
  10. }catch(Exception e){
  11. e.printStackTrace();
  12. throw e;
  13. }finally{
  14. MybatisUtil.closeSqlSession();
  15. }
  16. }
  17. /**
  18. * 查询哈哈属于哪个【班级】
  19. */
  20. public Grade findGradeByName(String name) throws Exception{
  21. SqlSession sqlSession = null;
  22. try{
  23. sqlSession = MybatisUtil.getSqlSession();
  24. return sqlSession.selectOne("gradeNamespace.findGradeByName",name);
  25. }catch(Exception e){
  26. e.printStackTrace();
  27. throw e;
  28. }finally{
  29. MybatisUtil.closeSqlSession();
  30. }
  31. }
  32. public static void main(String[] args) throws Exception{
  33. GradeStudentDao dao = new GradeStudentDao();
  34. List<Student> studentList = dao.findAllByName("java");
  35. for(Student s : studentList){
  36. System.out.println(s.getId()+":"+s.getName()+":"+s.getGrade().getId()+":"+s.getGrade().getName());
  37. }
  38. Grade grade = dao.findGradeByName("哈哈");
  39. System.out.println(grade.getId()+":"+grade.getName());
  40. }
  41. }

mybatis一对多映射【班级与学生】的更多相关文章

  1. 基于JavaScript的表格设计:按序添加或删除班级的学生信息

    目的: 制作一个表格,显示班级的学生信息 功能: 鼠标移到不同行,背景色发生改变,离开恢复原背景色 添加.删除按钮,可添加,可删除. 程序流程: 首先先建立绑定事件函数. 其次建立鼠标移动改变背景色函 ...

  2. PHP学习笔记(14)班级和学生管理---学生

    两个文件夹,一个班级cls,一个学生stu. 两个表,一个班级cls,一个学生stu. 每个文件夹里有7个php文件:主界面stu.php-------增add.php,insert.php----- ...

  3. PHP学习笔记(13)班级和学生管理---班级

    两个文件夹,一个班级cls,一个学生stu. 两个表,一个班级cls,一个学生stu. 每个文件夹里有7个php文件:主界面cls.php-------增add.php,insert.php----- ...

  4. mybatis一对多映射

    场景: A:SecControlRulePojo.java B:SecControlSubRulePojo C:SecControlSubRuleManyPojo 实体A中包含List<B> ...

  5. MyBatis 一对多映射

    From<MyBatis从入门到精通> <!-- 6.1.2.1 collection集合的嵌套结果映射 和association类似,集合的嵌套结果映射就是指通过一次SQL查询将所 ...

  6. MyBatis一对多映射简单查询案例(嵌套结果)

    一.案例描述 书本类别表和书本信息表,查询书本类别表中的某一记录,连带查询出所有该类别书本的信息. 二.数据库表格 书本类别表(booktypeid,booktypename) 书本信息表(booki ...

  7. MyBatis一对多映射简单查询案例(嵌套Mapper映射文件中的sql语句)

    一.案例描述 书本类别表和书本信息表,查询书本类别表中的某一记录,连带查询出所有该类别书本的信息. 二.数据库表格 书本类别表(booktypeid,booktypename) 书本信息表(booki ...

  8. mybatis一对多映射分页的问题

    一对多可能会出现分页错误 条数不对的问题 解决方法: 将主表分页查询一次 SELECT aa.id,aa.name,bb.name FROM (SELECT * from tab1 ORDER BY ...

  9. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

随机推荐

  1. Java虚拟机(JVM)知多少

    本文大量参考:https://www.cnblogs.com/lfs2640666960/p/9297176.html 概述 JVM是JRE的一部分.它是一个虚构出来的计算机,是通过在实际的计算机上仿 ...

  2. 作业八——非确定的自动机NFA确定化为DFA

    NFA 确定化为 DFA 子集法: f(q,a)={q1,q2,…,qn},状态集的子集 将{q1,q2,…,qn}看做一个状态A,去记录NFA读入输入符号之后可能达到的所有状态的集合. 步骤: 1. ...

  3. kotlin字符串模板&条件控制

    字符串模版: 小时候都有要求记日记的习惯,下面是一小学生记的日记: 很漂亮的流水账,那细分析一下这些文件其实大体都类似,只有几个不同点: 其实就是地点变了,那对于这种有规律的文字可以采用kotlin的 ...

  4. luogu4422 [COCI2017-2018#1] Deda[线段树二分]

    讨论帖:线段树二分的题..我还考场切过..白学 这题我一年前的模拟赛考场还切过,现在就不会了..好菜啊. 显然直接线段树拆成$\log n$个区间,然后每个区间在进行线段树二分即可. UPD:复杂度分 ...

  5. C语言之volatile

    emOsprey  鱼鹰谈单片机 2月21日 预计阅读时间: 4 分钟 和 const 不同(关于 const 可以看 const 小节),当一个变量声明为 volatile,说明这个变量会被意想不到 ...

  6. ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223 参考题解:https://blog.csdn.net/qq_40482495/article/d ...

  7. python--openCV--其它

    t1=cv2.getTickCount() # 记录当前时间,以时钟周期计算 t2=cv2.getTickFrequency() #返回时钟周期,返回CPU的频率,返回CPU一秒中所走的时钟周期数

  8. 【Android-布局复用】 多个界面复用一个布局文件(一)

    1.layout_common.xml 复用的布局文件 <?xml version="1.0" encoding="utf-8"?> <!-- ...

  9. SpringBoot AOP注解式拦截与方法规则拦截

    AOP的本质还是动态代理对方法调用进行增强. SpringBoot 提供了方便的注解实现自定义切面Aspect. 1.使用需要了解的几个概念: 切面.@Aspect 切点.@Pointcut. 通知. ...

  10. SpringMVC拦截静态资源的解决方法

    本文中的各软件版本简要信息: IDE:Myeclise17 JDK:1.8.0_111 spring:5.1.8 springMVC:5.1.8 mybatis:3.2.2 Tomcat:9.0 在使 ...