MyBatis学习(四)MyBatis一对一关联查询
阅读原文时间:2023年07月15日阅读:1

一对一关联查询即、两张表通过外键进行关联、从而达到查询外键直接获得两张表的信息。本文基于业务拓展类的方式实现。

项目骨架

配置文件conf.xml和db.properties前几节讲过、这里就不细说了。


1、建表

2、创建相关的实体类

StudentCard

package com.feng.entity;

public class StudentCard {
    private int cardid;
    private String cardinfo;

    public int getCardid() {
        return cardid;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public String getCardinfo() {
        return cardinfo;
    }

    public void setCardinfo(String cardinfo) {
        this.cardinfo = cardinfo;
    }
}

Student

package com.feng.entity;

public class Student {
    private int stuNo;
    private String stuName;
    private int stuAge;
    private String graName;

    public int getStuNo() {
        return stuNo;
    }

    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getStuAge() {
        return stuAge;
    }

    public void setStuAge(int stuAge) {
        this.stuAge = stuAge;
    }

    public String getGraName() {
        return graName;
    }

    public void setGraName(String graName) {
        this.graName = graName;
    }

    public Student(int stuNo, String stuName, int stuAge, String graName) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuAge = stuAge;
        this.graName = graName;
    }
    public Student() {
    }

    @Override
    public String toString() {
        return '{'+"stuNo=" + stuNo +
                ", stuName='" + stuName + '\'' +
                '}';
    }
}

1、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">
<!--namespace:该mapper.xml映射文件的唯一标识-->
<mapper namespace="com.feng.mapper.StudentMapper">
    <select id="queryStudentByNoWithOO"  parameterType="int" resultType="StudentBusiness">
        select s.*,c.* from student s inner join studentcard c
        on s.cardid=c.cardid
        where s.stuno = #{stuno}
    </select>
</mapper>

2、StudentMapper

package com.feng.mapper;

import com.feng.entity.Student;
import com.feng.entity.StudentBusiness;

import java.util.List;

// 操作mybatis的接口
public interface StudentMapper {
    StudentBusiness queryStudentByNoWithOO(int stuno);
}

注意:JAVA中不能多继承、只能单继承、故要接收返回的信息、只能写一个业务类、该类继承相关的表、其他字段自己写。

3、StudentBusiness

package com.feng.entity;

// 学生业务拓展类
public class StudentBusiness extends Student{
    private int cardid;
    private String cardinfo;

    public int getCardid() {
        return cardid;
    }

    public void setCardid(int cardid) {
        this.cardid = cardid;
    }

    public String getCardinfo() {
        return cardinfo;
    }

    public void setCardinfo(String cardinfo) {
        this.cardinfo = cardinfo;
    }

    @Override
    public String toString() {
        return super.toString() + "," + this.cardid + "," + this.cardinfo;
    }
}



package com.feng.test;

import com.feng.entity.Student;
import com.feng.entity.StudentBusiness;
import com.feng.mapper.StudentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class Test {
    // 7、一对一联表查询
    public static void queryStudentByNoWithOO() throws IOException {
        // conf.xml ---->  reader
        Reader reader = Resources.getResourceAsReader("conf.xml");
        // reader ---> SqlSession
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        StudentBusiness studentBusiness = studentMapper.queryStudentByNoWithOO(2);// 查询二号
        System.out.println(studentBusiness);
        session.close();
    }
    public static void main(String[] args) throws IOException {
        queryStudentByNoWithOO();
    }
}