Mybatis学习——0222一对多,多对一映射

本文介绍了如何使用MyBatis框架实现数据库中一对多和多对一的关系映射。通过创建student和class两个表作为示例,展示了数据库结构和实体类的设计。同时,提供了MyBatis的配置文件,包括总配置、学生和班级的Mapper接口,以及查询所有学生和班级的SQL语句。最后,给出了测试类的简单说明。

一对多和多对一其实很好理解。一对多,一个班级对应多个学生。多对一,多个学生在同一个班级

首先数据库student和class

CREATE TABLE class(
	cid int primary key auto_increment,
	cname VARCHAR(20)
)
INSERT into class VALUES (null,'一班');
INSERT into class VALUES (null,'二班');
INSERT into class VALUES (null,'三班');

CREATE TABLE student(
	sid int primary key auto_increment,
	sname VARCHAR(20),
	sage int,
	ssex VARCHAR(20),
	cid int REFERENCES class(cid)
)

INSERT into student VALUES (null,'张三',18,'男',1);
INSERT into student VALUES (null,'张四',19,'女',1);
INSERT into student VALUES (null,'张五',28,'男',1);
INSERT into student VALUES (null,'李五',26,'女',2);
INSERT into student VALUES (null,'李六',18,'男',2);
INSERT into student VALUES (null,'李七',20,'女',2);
INSERT into student VALUES (null,'王五',24,'男',3);
INSERT into student VALUES (null,'王六',19,'女',3);
INSERT into student VALUES (null,'王七',22,'男',3);

创建实体类student和class


public class Class {
    private int cid;
    private String cname;
    private List<Student> studentList;

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public List<Student> getStudentList() {
        return studentList;
    }

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

    public Class(){

    }

    public Class(int cid, String cname, List<Student> studentList) {
        this.cid = cid;
        this.cname = cname;
        this.studentList = studentList;
    }
}

public class Student {
    private int sid;
    private String sname;
    private int sage;
    private String ssex;
    private Class aclass;
    private int cid;

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getSage() {
        return sage;
    }

    public void setSage(int sage) {
        this.sage = sage;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }

    public Class getAclass() {
        return aclass;
    }

    public void setAclass(Class aclass) {
        this.aclass = aclass;
    }
    public Student(){

    }

    public Student(int sid, String sname, int sage, String ssex, Class aclass, int cid) {
        this.sid = sid;
        this.sname = sname;
        this.sage = sage;
        this.ssex = ssex;
        this.aclass = aclass;
        this.cid = cid;
    }
}

Mybatis总配置jdbc

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="bean"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 从配置文件中加载属性 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/r0221"/>
                <property name="username" value="sa"/>
                <property name="password" value="1"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="org.lc.mapper/StudentMapper.xml"/>
        <mapper resource="org.lc.mapper/ClassMapper.xml"/>
    </mappers>

</configuration>

class和student的接口

 

MybatisUtil的配置


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.InputStream;

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String r="mybatis-config.xml";
            InputStream is= Resources.getResourceAsStream(r);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }

    public static void closesession(SqlSession session){
        if(session!=null){
            session.close();
        }
    }
}

 首先多对一,多个学生对应一个班级

<?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">

<mapper namespace="info.StudentInfo">
    <resultMap id="studentMap" type="Student">
        <result property="sid" column="sid"></result>
        <result property="sname" column="sname"></result>
        <result property="ssex" column="ssex"></result>
        <result property="sage" column="sage"></result>
        <result property="cid" column="cid"></result>
        <association property="aclass" resultMap="classMap" javaType="Class"></association>
    </resultMap>
    <resultMap id="classMap" type="Class">
        <result property="cid" column="cid"></result>
        <result property="cname" column="cname"></result>
    </resultMap>
    <select id="findAll" resultType="Student" resultMap="studentMap">
        select s.*,c.cname from student s ,class c where s.cid=c.cid
    </select>

测试类

同理一对多

<?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">

<mapper namespace="info.ClassInfo">
    <resultMap id="classMap" type="Class">
        <result property="cid" column="cid"></result>
        <result property="cname" column="cname"></result>
        <collection property="studentList" ofType="Student" >
            <result property="sid" column="sid"></result>
            <result property="sname" column="sname"></result>
            <result property="ssex" column="ssex"></result>
            <result property="sage" column="sage"></result>
            <result property="cid" column="cid"></result>
        </collection>
    </resultMap>
    <select id="findAll" resultType="Class" resultMap="classMap">
        select s.*,c.cname from student s ,class c where s.cid=c.cid and c.cid=#{cid}
    </select>
</mapper>

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值