mybatis查询(一对一、一对多)

1、一对一

(1)创建实体类:

Student:

public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    private String studentno;
    private String sname;
    private String sex;
    private String birthday;
    private String classno;
    private String point;
    private String phone;
    private String email;
    private Clas clas;
    @Override
    public String toString() {
        return "Student{" +
                "studentno='" + studentno + '\'' +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday='" + birthday + '\'' +
                ", classno='" + classno + '\'' +
                ", point='" + point + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", clas=" + clas +
                '}';
    }


    public Clas getClas() {
        return clas;
    }
    public void setClas(Clas clas) {
        this.clas = clas;
    }
    public String getStudentno() {
        return studentno;
    }
    public void setStudentno(String studentno) {
        this.studentno = studentno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getClassno() {
        return classno;
    }
    public void setClassno(String classno) {
        this.classno = classno;
    }
    public String getPoint() {
        return point;
    }
    public void setPoint(String point) {
        this.point = point;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

从一对多和多对一的关系来看,学生属于多的一方,班级属于一的一方,在学生实体中又包含了班级实体,因为每一个学生都只能属于一个班级,而一个班级里面有多个学生。

Clas:

public class Clas {
    private Integer classno;
    private String classname;
    private String monitor;
    private String department;
    @Override
    public String toString() {
        return "Clas{" +
                "classno=" + classno +
                ", classname='" + classname + '\'' +
                ", monitor='" + monitor + '\'' +
                ", department='" + department + '\'' +
                '}';
    }
    public Integer getClassno() {
        return classno;
    }

    public void setClassno(Integer classno) {
        this.classno = classno;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public String getMonitor() {
        return monitor;
    }

    public void setMonitor(String monitor) {
        this.monitor = monitor;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

(2)接口:

public interface StudentMapper {
     List<Student> selectStudents();
}

(3)配置文件:

<resultMap id="id" type="pers.zhb.pojo.Student">
        <id property="studentno" column="studentno"></id>
        <result property="classno" column="classno"></result>
        <association property="clas" javaType="pers.zhb.pojo.Clas">
            <id property="classno" column="classno"></id>
            <result column="classname" property="classname"></result>
            <result column="monitor" property="monitor"></result>
            <result column="department" property="department"></result>
        </association>
    </resultMap>
    <select id="selectStudents"  resultMap="id">
        SELECT *
        FROM student
        LEFT JOIN class
        ON student.classno=class.classno
    </select>

association为一对一的配置,即一个学生对应于一个班级。

sql语句为左外连接:

学生有八条信息:

 班级有两条信息:

 (4)测试:

 public void selectStudents() throws Exception {
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students=studentMapper.selectStudents();
        for(Student student:students){
            System.out.println(student);
        }
    }
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.xml
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.xml
DEBUG [main] - Reader entry: <?xml version="1.0" encoding="UTF-8" ?>
DEBUG [main] - Checking to see if class pers.zhb.mapper.StudentMapper matches criteria [is assignable to Object]
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 101478235.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@60c6f5b]
DEBUG [main] - ==>  Preparing: SELECT * FROM student LEFT JOIN class ON student.classno=class.classno 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 8
Student{studentno='201811', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院'}}
Student{studentno='201812', sname='null', sex='null', birthday='null', classno='80601', point='null', phone='null', email='null', clas=Clas{classno=80601, classname='机械0801', monitor='王善执', department='机械学院'}}
Student{studentno='201813', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院'}}
Student{studentno='201814', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院'}}
Student{studentno='201815', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院'}}
Student{studentno='201816', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院'}}
Student{studentno='201817', sname='null', sex='null', birthday='null', classno='2', point='null', phone='null', email='null', clas=Clas{classno=2, classname='null', monitor='null', department='null'}}
Student{studentno='201818', sname='null', sex='null', birthday='null', classno='2', point='null', phone='null', email='null', clas=Clas{classno=2, classname='null', monitor='null', department='null'}}

Process finished with exit code 0

2、一对多

(1)实体类:

Student:

public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    private String studentno;
    private String sname;
    private String sex;
    private String birthday;
    private String classno;
    private String point;
    private String phone;
    private String email;
    private Clas clas;
    @Override
    public String toString() {
        return "Student{" +
                "studentno='" + studentno + '\'' +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday='" + birthday + '\'' +
                ", classno='" + classno + '\'' +
                ", point='" + point + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", clas=" + clas +
                '}';
    }


    public Clas getClas() {
        return clas;
    }
    public void setClas(Clas clas) {
        this.clas = clas;
    }
    public String getStudentno() {
        return studentno;
    }
    public void setStudentno(String studentno) {
        this.studentno = studentno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getClassno() {
        return classno;
    }
    public void setClassno(String classno) {
        this.classno = classno;
    }
    public String getPoint() {
        return point;
    }
    public void setPoint(String point) {
        this.point = point;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

Clas:

public class Clas {
    private Integer classno;
    private String classname;
    private String monitor;
    private String department;
    private List<Student> studentList;
    @Override
    public String toString() {
        return "Clas{" +
                "classno=" + classno +
                ", classname='" + classname + '\'' +
                ", monitor='" + monitor + '\'' +
                ", department='" + department + '\'' +
                ", studentList=" + studentList +
                '}';
    }
    public List<Student> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }

    public Integer getClassno() {
        return classno;
    }

    public void setClassno(Integer classno) {
        this.classno = classno;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public String getMonitor() {
        return monitor;
    }

    public void setMonitor(String monitor) {
        this.monitor = monitor;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

(2)接口:

public interface StudentMapper {
     List<Clas> selectClasList();
}

(3)配置文件:

    <resultMap id="id" type="pers.zhb.pojo.Clas">
        <id column="classno" property="classno"></id>
        <result column="classname" property="classname"></result>
        <result column="monitor" property="monitor"></result>
        <result column="department" property="department"></result>
        <collection property="studentList" ofType="pers.zhb.pojo.Student">
            <id property="studentno" column="studentno"></id>
            <result property="classno" column="classno"></result>
        </collection>
    </resultMap>
    <select id="selectClasList"  resultMap="id">
        SELECT *
        FROM class
        LEFT JOIN student
        ON student.classno=class.classno
    </select>

(4)测试:

public void selectClasList() throws Exception {
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        List<Clas> clas=studentMapper.selectClasList();
        for(Clas cla:clas){
            System.out.println(cla);
        }
    }
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - Class not found: org.jboss.vfs.VFS
DEBUG [main] - JBoss 6 VFS API is not available in this environment.
DEBUG [main] - Class not found: org.jboss.vfs.VirtualFile
DEBUG [main] - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
DEBUG [main] - Using VFS adapter org.apache.ibatis.io.DefaultVFS
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo
DEBUG [main] - Reader entry: Clas.class
DEBUG [main] - Reader entry: QueryVo.class
DEBUG [main] - Reader entry: Student.class
DEBUG [main] - Listing file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/Clas.class
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/Clas.class
DEBUG [main] - Reader entry: ����   4 Q
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/QueryVo.class
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/QueryVo.class
DEBUG [main] - Reader entry: ����   4 4
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/Student.class
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/pojo/Student.class
DEBUG [main] - Reader entry: ����   4 l
DEBUG [main] - Checking to see if class pers.zhb.pojo.Clas matches criteria [is assignable to Object]
DEBUG [main] - Checking to see if class pers.zhb.pojo.QueryVo matches criteria [is assignable to Object]
DEBUG [main] - Checking to see if class pers.zhb.pojo.Student matches criteria [is assignable to Object]
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper
DEBUG [main] - Reader entry: StudentMapper.class
DEBUG [main] - Reader entry: StudentMapper.xml
DEBUG [main] - Listing file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.class
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.class
DEBUG [main] - Reader entry: ����   4    findStudentById ,(Ljava/lang/Integer;)Lpers/zhb/pojo/Student; findStudentByQueryVo )(Lpers/zhb/pojo/QueryVo;)Ljava/util/List;     Signature B(Lpers/zhb/pojo/QueryVo;)Ljava/util/List<Lpers/zhb/pojo/Student;>; countStudent ()Ljava/lang/Integer; selectAllStudent ()Ljava/util/List; +()Ljava/util/List<Lpers/zhb/pojo/Student;>; selectStudentBySexAndSname )(Lpers/zhb/pojo/Student;)Ljava/util/List; B(Lpers/zhb/pojo/Student;)Ljava/util/List<Lpers/zhb/pojo/Student;>; selectStudentByIds &([Ljava/lang/Integer;)Ljava/util/List; ?([Ljava/lang/Integer;)Ljava/util/List<Lpers/zhb/pojo/Student;>; "(Ljava/util/List;)Ljava/util/List; P(Ljava/util/List<Ljava/lang/Integer;>;)Ljava/util/List<Lpers/zhb/pojo/Student;>; selectStudents selectClasList (()Ljava/util/List<Lpers/zhb/pojo/Clas;>; 
DEBUG [main] - Find JAR URL: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.xml
DEBUG [main] - Not a JAR: file:/D:/IdeaProjects/MybatisDemo/web/WEB-INF/classes/pers/zhb/mapper/StudentMapper.xml
DEBUG [main] - Reader entry: <?xml version="1.0" encoding="UTF-8" ?>
DEBUG [main] - Checking to see if class pers.zhb.mapper.StudentMapper matches criteria [is assignable to Object]
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 101478235.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@60c6f5b]
DEBUG [main] - ==>  Preparing: SELECT * FROM class LEFT JOIN student ON student.classno=class.classno 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 13
Clas{classno=80501, classname='计算机0801', monitor='刘国平', department='计算机学院', studentList=[Student{studentno='201811', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=null}, Student{studentno='201813', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=null}, Student{studentno='201814', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=null}, Student{studentno='201815', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=null}, Student{studentno='201816', sname='null', sex='null', birthday='null', classno='80501', point='null', phone='null', email='null', clas=null}]}
Clas{classno=80601, classname='机械0801', monitor='王善执', department='机械学院', studentList=[Student{studentno='201812', sname='null', sex='null', birthday='null', classno='80601', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90501, classname='计算机0901', monitor='马文斐', department='计算机学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90501', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90502, classname='计算机0902', monitor='章成楠', department='计算机学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90502', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90801, classname='管理0901', monitor='党海', department='管理学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90801', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90802, classname='管理0802', monitor='张晓', department='管理学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90802', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90803, classname='通信161', monitor='张丽', department='信息工程学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90803', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90804, classname='通信172', monitor='李月', department='信工学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90804', point='null', phone='null', email='null', clas=null}]}
Clas{classno=90805, classname='通信171', monitor='张伟', department='信工学院', studentList=[Student{studentno='null', sname='null', sex='null', birthday='null', classno='90805', point='null', phone='null', email='null', clas=null}]}

猜你喜欢

转载自www.cnblogs.com/zhai1997/p/12557255.html