zoukankan      html  css  js  c++  java
  • 一对多联表查询

    一:总结说明

    1.需求

      根据classId查询出对应的班级信息,包括学生和老师。

    2.结构目录

    3.新建学生表

     1 CREATE TABLE student(
     2     s_id INT PRIMARY KEY AUTO_INCREMENT,
     3     s_name VARCHAR(20),
     4     class_id INT
     5 );
     6 INSERT INTO student(s_name,class_id) VALUES('xs1',1);
     7 INSERT INTO student(s_name,class_id) VALUES('xs2',1);
     8 INSERT INTO student(s_name,class_id) VALUES('xs3',1);
     9 INSERT INTO student(s_name,class_id) VALUES('xs4',2);
    10 INSERT INTO student(s_name,class_id) VALUES('xs5',2);
    11 INSERT INTO student(s_name,class_id) VALUES('xs6',2);

    4.实体类Student.java

     1 package com.jun.bean;
     2 
     3 public class Student {
     4     //
     5     private int id;
     6     private String name;
     7     //
     8     public Student() {}
     9     public Student(int id,String name) {
    10         this.id=id;
    11         this.name=name;
    12     }
    13     public int getId() {
    14         return id;
    15     }
    16     public void setId(int id) {
    17         this.id = id;
    18     }
    19     public String getName() {
    20         return name;
    21     }
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25     @Override
    26     public String toString() {
    27         return "Student [id=" + id + ", name=" + name + "]";
    28     }
    29     
    30 }

    5.修改Classes.java类

      因为classes除了老师,现在需要添加一个属性学生,这个学生的属性是List。

      需要修改get set方法,修改构造函数,修改tostring方法。

     1 package com.jun.bean;
     2 
     3 import java.util.List;
     4 
     5 public class Classes {
     6     //
     7     private int id;
     8     private String name;
     9     private Teacher teacher;
    10     private List<Student> list;     //新添加的属性
    11     //
    12     public Classes() {}
    13     public Classes(int id,String name,Teacher teacher,List<Student> list) {
    14         this.id=id;
    15         this.name=name;
    16         this.teacher=teacher;
    17         this.list=list;
    18     }
    19     public int getId() {
    20         return id;
    21     }
    22     public void setId(int id) {
    23         this.id = id;
    24     }
    25     public String getName() {
    26         return name;
    27     }
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31     public Teacher getTeacher() {
    32         return teacher;
    33     }
    34     public void setTeacher(Teacher teacher) {
    35         this.teacher = teacher;
    36     }
    37     public List<Student> getList() {
    38         return list;
    39     }
    40     public void setList(List<Student> list) {
    41         this.list = list;
    42     }
    43     @Override
    44     public String toString() {
    45         return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + ", list=" + list + "]";
    46     }
    47         
    48 }

    6.Configuration.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
     3 
     4 <configuration>
     5   <environments default="development">
     6     <environment id="development">
     7       <transactionManager type="JDBC">
     8         <property name="" value=""/>
     9       </transactionManager>
    10       <dataSource type="UNPOOLED">
    11         <property name="driver" value="com.mysql.jdbc.Driver"/>
    12         <property name="url" value="jdbc:mysql://127.0.0.1:3308/mybatis"/>
    13         <property name="username" value="root"/>
    14         <property name="password" value="123456"/>
    15       </dataSource>
    16     </environment>
    17   </environments>
    18 
    19    <mappers>
    20       <mapper resource="com/jun/sql/config/class.xml"/>
    21    </mappers>
    22 
    23 </configuration>

    二:第一种方式

    1.映射文件class.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="one2many">
     6     <!-- 第一种方式: 
     7         嵌套结果
     8         Select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=1; 
     9     -->
    10     <select id="selectAll" parameterType="int" resultMap="getClasses">
    11         Select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
    12     </select>
    13     <resultMap type="com.jun.bean.Classes" id="getClasses">
    14         <id property="id" column="c_id"/>
    15         <result property="name" column="c_name"/>
    16         <association property="teacher" javaType="com.jun.bean.Teacher">
    17             <id property="id" column="t_id"/>
    18             <result property="name" column="t_name"/>
    19         </association>
    20         <collection property="list" ofType="com.jun.bean.Student">
    21             <id property="id" column="s_id"/>
    22             <result property="name" column="s_name"/>
    23         </collection>
    24     </resultMap>
    25 </mapper>

    2.测试类

     1 package com.jun.main;
     2 
     3 import java.io.IOException;
     4 import java.io.Reader;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 import org.junit.Test;
    11 import com.jun.bean.Classes;
    12 public class MainTest {
    13     /**
    14      * 方式一
    15      * @throws Exception
    16      */
    17     @Test
    18     public void test1() throws Exception {
    19         Reader reader=Resources.getResourceAsReader("com/jun/config/Configuration.xml");
    20         SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
    21         SqlSession sqlSession=sqlSessionFactory.openSession(true);                //true后是自动提交
    22         String statement="one2many.selectAll";
    23         Classes classes=sqlSession.selectOne(statement, 1);
    24         System.out.println(classes);
    25         sqlSession.close();
    26     }
    27     
    28 }

    3.测试结果

      

    三:方式二

    1.映射文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="one2many">
     6     <!-- 第一种方式: 
     7         嵌套结果
     8         Select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=1; 
     9     -->
    10     <select id="selectAll" parameterType="int" resultMap="getClasses">
    11         Select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
    12     </select>
    13     <resultMap type="com.jun.bean.Classes" id="getClasses">
    14         <id property="id" column="c_id"/>
    15         <result property="name" column="c_name"/>
    16         <association property="teacher" javaType="com.jun.bean.Teacher">
    17             <id property="id" column="t_id"/>
    18             <result property="name" column="t_name"/>
    19         </association>
    20         <collection property="list" ofType="com.jun.bean.Student">
    21             <id property="id" column="s_id"/>
    22             <result property="name" column="s_name"/>
    23         </collection>
    24     </resultMap>
    25     
    26     <!-- 
    27         方式二:
    28         三次查询
    29         select * from class where c_id=1;
    30         select * from teacher where t_id=1;       //使用第一句中查询到的结果
    31         select * from student where class_id=1;   //使用第一句中查询到的结果,这个与第二句并行
    32      -->
    33      <select id="selectClass" resultMap="getClasses2">
    34          select * from class where c_id=#{id}
    35      </select>
    36      <select id="getTeacher" resultType="com.jun.bean.Teacher">      <!-- 使用resultType -->
    37          select t_id id,t_name name from teacher where t_id=#{id}
    38      </select>
    39      <select id="getStudent" resultType="com.jun.bean.Student">      <!-- 使用resultType -->
    40          select s_id id,s_name name from student where class_id=#{id} <!-- 使用的是class_id -->
    41      </select>
    42      <resultMap type="com.jun.bean.Classes" id="getClasses2">
    43          <id property="id" column="c_id"/>
    44         <result property="name" column="c_name"/>
    45         <association property="teacher" column="teacher_id" select="getTeacher"></association>
    46         <collection property="list" column="c_id" select="getStudent"></collection>
    47      </resultMap>
    48 </mapper>

    2.测试类

     1 package com.jun.main;
     2 
     3 import java.io.IOException;
     4 import java.io.Reader;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 import org.junit.Test;
    11 import com.jun.bean.Classes;
    12 public class MainTest {
    13     /**
    14      * 方式一
    15      * @throws Exception
    16      */
    17     @Test
    18     public void test1() throws Exception {
    19         Reader reader=Resources.getResourceAsReader("com/jun/config/Configuration.xml");
    20         SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
    21         SqlSession sqlSession=sqlSessionFactory.openSession(true);                //true后是自动提交
    22         String statement="one2many.selectAll";
    23         Classes classes=sqlSession.selectOne(statement, 1);
    24         System.out.println(classes);
    25         sqlSession.close();
    26     }
    27     /**
    28      * 方式二
    29      * @throws Exception
    30      */
    31     @Test
    32     public void test2() throws Exception {
    33         Reader reader=Resources.getResourceAsReader("com/jun/config/Configuration.xml");
    34         SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
    35         SqlSession sqlSession=sqlSessionFactory.openSession(true);                //true后是自动提交
    36         String statement="one2many.selectClass";
    37         Classes classes=sqlSession.selectOne(statement, 1);
    38         System.out.println(classes);
    39         sqlSession.close();
    40     }
    41     
    42 }

    3.结果

      

      

  • 相关阅读:
    < java.lang >-- StringBuilder字符串缓冲区
    Integer对象
    < java.lang >-- StringBuffer字符串缓冲区
    < java.lang >-- String字符串
    单例设计模式:★★★★★
    线程同步 Lock接口
    POJ 3254 Corn Fields (状压dp)
    Codeforces 583D. Once Again... (LIS变形)
    Light oj 1005
    Codeforces 543D. Road Improvement (树dp + 乘法逆元)
  • 原文地址:https://www.cnblogs.com/juncaoit/p/8228311.html
Copyright © 2011-2022 走看看