• 多级表查询之业务装配方式


    多表关联查询

    • 表结构

    学生表(s_student)字段有id、name、age、gender,cid

    班级(t_class),字段有id,name,room

    业务装配方式实现多表查询(多对一)

    mapper层只做单表查询操作,在service层进行手动装配,实现关联查询的结果。

    实体类

    创建班级类(Clazz)和学生类(Student),并在student中添加一个Clazz类型属性,用于表示学生的班级信息。

    mapper层

    提供StudentMapper和ClazzMapper,StudentMapper 查询所有学生的信息,ClazzMapper根据编号查询班级信息。

    service层

    调用mapper层,先查询所有学生,再根据每个学生的班级编号查询班级信息,手动进行组装,称之为业务装配。

    测试代码

    1 package com.bjsxt.mapper;
    2 
    3 import com.bjsxt.pojo.Clazz;
    4 
    5 public interface ClazzMapper {
    6 
    7     Clazz selById(int id);
    8 }
    1 package com.bjsxt.mapper;
    2 
    3 import java.util.List;
    4 
    5 import com.bjsxt.pojo.Student;
    6 
    7 public interface StudentMapper {
    8     List<Student> selAll();
    9 }
     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="com.bjsxt.mapper.ClazzMapper">
     6   <select id="selById" resultType="clazz"  parameterType="int">
     7       select * from t_class where id=#{0}
     8   </select>
     9  
    10  </mapper>
    11     
     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="com.bjsxt.mapper.StudentMapper">
     6   <select id="selAll" resultType="student">
     7       select * from t_student
     8   </select>
     9  
    10  </mapper>
    11     
     1 package com.bjsxt.pojo;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Clazz implements Serializable{
     6    private int id;
     7    private String name;
     8    private String room;
     9    
    10 public int hashCode() {
    11     final int prime = 31;
    12     int result = 1;
    13     result = prime * result + id;
    14     result = prime * result + ((name == null) ? 0 : name.hashCode());
    15     result = prime * result + ((room == null) ? 0 : room.hashCode());
    16     return result;
    17 }
    18 public boolean equals(Object obj) {
    19     if (this == obj)
    20         return true;
    21     if (obj == null)
    22         return false;
    23     if (getClass() != obj.getClass())
    24         return false;
    25     Clazz other = (Clazz) obj;
    26     if (id != other.id)
    27         return false;
    28     if (name == null) {
    29         if (other.name != null)
    30             return false;
    31     } else if (!name.equals(other.name))
    32         return false;
    33     if (room == null) {
    34         if (other.room != null)
    35             return false;
    36     } else if (!room.equals(other.room))
    37         return false;
    38     return true;
    39 }
    40 public String toString() {
    41     return "Clazz [id=" + id + ", name=" + name + ", room=" + room + "]";
    42 }
    43 public Clazz() {
    44     super();
    45     // TODO Auto-generated constructor stub
    46 }
    47 public Clazz(int id, String name, String room) {
    48     super();
    49     this.id = id;
    50     this.name = name;
    51     this.room = room;
    52 }
    53 public int getId() {
    54     return id;
    55 }
    56 public void setId(int id) {
    57     this.id = id;
    58 }
    59 public String getName() {
    60     return name;
    61 }
    62 public void setName(String name) {
    63     this.name = name;
    64 }
    65 public String getRoom() {
    66     return room;
    67 }
    68 public void setRoom(String room) {
    69     this.room = room;
    70 }
    71    
    72 }
      1 package com.bjsxt.pojo;
      2 
      3 import java.io.Serializable;
      4 
      5 public class Student implements Serializable{
      6   private int id;
      7   private String name;
      8   private int age;
      9   private String gender;
     10  private int cid;
     11  private Clazz clazz;//用于封装班级信息
     12 public int hashCode() {
     13     final int prime = 31;
     14     int result = 1;
     15     result = prime * result + age;
     16     result = prime * result + cid;
     17     result = prime * result + ((clazz == null) ? 0 : clazz.hashCode());
     18     result = prime * result + ((gender == null) ? 0 : gender.hashCode());
     19     result = prime * result + id;
     20     result = prime * result + ((name == null) ? 0 : name.hashCode());
     21     return result;
     22 }
     23 public boolean equals(Object obj) {
     24     if (this == obj)
     25         return true;
     26     if (obj == null)
     27         return false;
     28     if (getClass() != obj.getClass())
     29         return false;
     30     Student other = (Student) obj;
     31     if (age != other.age)
     32         return false;
     33     if (cid != other.cid)
     34         return false;
     35     if (clazz == null) {
     36         if (other.clazz != null)
     37             return false;
     38     } else if (!clazz.equals(other.clazz))
     39         return false;
     40     if (gender == null) {
     41         if (other.gender != null)
     42             return false;
     43     } else if (!gender.equals(other.gender))
     44         return false;
     45     if (id != other.id)
     46         return false;
     47     if (name == null) {
     48         if (other.name != null)
     49             return false;
     50     } else if (!name.equals(other.name))
     51         return false;
     52     return true;
     53 }
     54 public String toString() {
     55     return "Student [id=" + id + ", name=" + name + ", age=" + age
     56             + ", gender=" + gender + ", cid=" + cid + ", clazz=" + clazz + "]";
     57 }
     58 public Student(int id, String name, int age, String gender, int cid, Clazz clazz) {
     59     super();
     60     this.id = id;
     61     this.name = name;
     62     this.age = age;
     63     this.gender = gender;
     64     this.cid = cid;
     65     this.clazz = clazz;
     66 }
     67 public Student() {
     68     super();
     69     // TODO Auto-generated constructor stub
     70 }
     71 public int getId() {
     72     return id;
     73 }
     74 public void setId(int id) {
     75     this.id = id;
     76 }
     77 public String getName() {
     78     return name;
     79 }
     80 public void setName(String name) {
     81     this.name = name;
     82 }
     83 public int getAge() {
     84     return age;
     85 }
     86 public void setAge(int age) {
     87     this.age = age;
     88 }
     89 public String getGender() {
     90     return gender;
     91 }
     92 public void setGender(String gender) {
     93     this.gender = gender;
     94 }
     95 public int getCid() {
     96     return cid;
     97 }
     98 public void setCid(int cid) {
     99     this.cid = cid;
    100 }
    101 public Clazz getClazz() {
    102     return clazz;
    103 }
    104 public void setClazz(Clazz clazz) {
    105     this.clazz = clazz;
    106 }
    107  
    108 }
     1 package com.bjsxt.service;
     2 
     3 import java.util.List;
     4 
     5 import com.bjsxt.pojo.Student;
     6 
     7 public interface StudentService {
     8     List<Student> selAll();
     9 
    10 }
     1 package com.bjsxt.service.impl;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.session.SqlSession;
     6 
     7 import com.bjsxt.mapper.ClazzMapper;
     8 import com.bjsxt.mapper.StudentMapper;
     9 import com.bjsxt.pojo.Clazz;
    10 import com.bjsxt.pojo.Student;
    11 import com.bjsxt.service.StudentService;
    12 import com.bjsxt.util.MyBatisUtil;
    13 
    14 public class StudentServiceImpl implements StudentService{
    15 
    16     @Override
    17     public List<Student> selAll() {
    18         SqlSession session =MyBatisUtil.getSession();
    19         
    20         StudentMapper stuMapper = session.getMapper(StudentMapper.class);
    21         ClazzMapper clsMapper = session.getMapper(ClazzMapper.class);
    22         List<Student> list = stuMapper.selAll();
    23         //为每一个student组装班级信息
    24     for (Student student : list) {
    25         student.setClazz(clsMapper.selById(student.getCid()));
    26     }
    27         session.close();
    28         return list;
    29     }
    30 
    31 }
     1 package com.bjsxt.test;
     2 
     3 import java.util.List;
     4 
     5 import com.bjsxt.pojo.Student;
     6 import com.bjsxt.service.StudentService;
     7 import com.bjsxt.service.impl.StudentServiceImpl;
     8 
     9 public class TestQuery {
    10 
    11     public static void main(String[] args) {
    12         StudentService ss=new StudentServiceImpl();
    13         List<Student> list = ss.selAll();
    14         for (Student student : list) {
    15             System.out.println(student);
    16         }
    17         
    18 
    19     }
    20 
    21 }
     1 package com.bjsxt.util;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     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 
    11 public class MyBatisUtil {
    12     
    13     private static SqlSessionFactory factory=null;
    14     static{
    15         
    16         try {
    17             InputStream is=Resources.getResourceAsStream("mybatis.xml");
    18             factory=new SqlSessionFactoryBuilder().build(is);
    19         } catch (IOException e) {
    20             // TODO Auto-generated catch block
    21             e.printStackTrace();
    22         }
    23     }
    24 
    25     public static SqlSession getSession(){
    26         SqlSession session =null;
    27         if(factory!=null){
    28             //true表示开启
    29          session= factory.openSession(true);
    30         }
    31         return session;
    32     }
    33 }
    1 jdbc.driver=com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost:3306/java505?useSSL=true&amp;characterEncoding=utf8&amp;useSSL=true
    3 jdbc.username=root
    4 jdbc.password=root
     1 # Set root category priority to INFO and its only appender to CONSOLE.
     2 log4j.rootCategory=ERROR, CONSOLE
     3 # log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
     4 
     5 # 单独设置SQL语句的输出级别为DEBUG级别
     6 log4j.logger.com.bjsxt.mapper=DEBUG
     7 
     8 # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
     9 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    10 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    11 log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
    12 
    13 # LOGFILE is set to be a File appender using a PatternLayout.
    14 log4j.appender.LOGFILE=org.apache.log4j.FileAppender
    15 log4j.appender.LOGFILE.File=d:/test.log
    16 log4j.appender.LOGFILE.Append=true
    17 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
    18 log4j.appender.LOGFILE.layout.ConversionPattern=- %m %l%n
  • 相关阅读:
    Http状态吗504问题复盘
    Http状态码502问题复盘
    Nginx服务的基本配置
    mysql修改root密码
    centos7开启80端口及其他端口
    tp5隐藏入口文件(基于nginx)
    使nginx支持pathinfo模式
    laravel-admin 上传图片过程中遇到的问题
    Maven介绍
    java中泛型
  • 原文地址:https://www.cnblogs.com/wq-9/p/10233501.html
Copyright © 2020-2023  润新知