03-mybatis-表与表之间的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhaoliangyan/article/details/88658305

* 表与表之间的关系

    * PowerDesigner的使用

        * 物理模型的画法

        * 概念模型的画法

        * 相互的转换

        * 链接mysql(Oracle)

    * 前期准备

        * 通过PowerDesigner 导入

   * 一对一(不常用,不常见,因为一般都在一张表里)

            * 技术上可以用一对多模拟

方式一:
SELECT * FROM classes c WHERE c.cname='html'
SELECT * FROM teacher t WHERE t.tid=2

方式二:
SELECT * FROM classes c,teacher t WHERE c.tid=t.tid AND c.cname='html';

/**
 * @author xiaozhao
 */
public class Teacher {
    private int tid;
    private String tname;
    private String tsex;
    private int tage;

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public String getTsex() {
        return tsex;
    }

    public void setTsex(String tsex) {
        this.tsex = tsex;
    }

    public int getTage() {
        return tage;
    }

    public void setTage(int tage) {
        this.tage = tage;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Teacher teacher = (Teacher) o;
        return tid == teacher.tid &&
                tage == teacher.tage &&
                Objects.equals(tname, teacher.tname) &&
                Objects.equals(tsex, teacher.tsex);
    }

    @Override
    public int hashCode() {
        return Objects.hash(tid, tname, tsex, tage);
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "tid=" + tid +
                ", tname='" + tname + '\'' +
                ", tsex='" + tsex + '\'' +
                ", tage=" + tage +
                '}';
    }
}



public class Classes {
    private int cno;
    private String cname;
    private int cnum;
    private String cdes;
    private Teacher teacher;

    public int getCno() {
        return cno;
    }

    public void setCno(int cno) {
        this.cno = cno;
    }

    public String getCname() {
        return cname;
    }

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

    public int getCnum() {
        return cnum;
    }

    public void setCnum(int cnum) {
        this.cnum = cnum;
    }

    public String getCdes() {
        return cdes;
    }

    public void setCdes(String cdes) {
        this.cdes = cdes;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Classes classes = (Classes) o;
        return cno == classes.cno &&
                cnum == classes.cnum &&
                Objects.equals(cname, classes.cname) &&
                Objects.equals(cdes, classes.cdes) &&
                Objects.equals(teacher, classes.teacher);
    }

    @Override
    public int hashCode() {
        return Objects.hash(cno, cname, cnum, cdes, teacher);
    }

    @Override
    public String toString() {
        return "Classes{" +
                "cno=" + cno +
                ", cname='" + cname + '\'' +
                ", cnum=" + cnum +
                ", cdes='" + cdes + '\'' +
                ", teacher=" + teacher +
                '}';
    }
}


public interface ClassesMapper {
    /**
     * 查询教html班级的信息
     * @param cname
     * @return
     */

    public Classes getClasses(String cname);
}

<!-- 方式一 -->
	<select id="getClasses" parameterType="string" resultMap="rstc">
		SELECT * FROM classes c WHERE c.cname=#{cname}
	</select>

	<resultMap id="rstc" type="com.hx.hx02.bean.Classes">
		<id column="cno" property="cno"/>
		<result column="cname" property="cname"/>
		<result column="cnum" property="cnum"/>
		<result column="cdes" property="cdes"/>
		<association property="teacher" column="tid" select="getTeacher"></association>
	</resultMap>

	<select id="getTeacher" parameterType="int" resultType="com.hx.hx02.bean.Teacher">
		SELECT * FROM teacher t WHERE t.tid=#{tid}
	</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="com.hx.hx02.mapper.ClassesMapper">

	<select id="getClasses" parameterType="string" resultMap="rstc">
		SELECT * FROM classes c,teacher t WHERE c.tid=t.tid AND c.cname=#{c.cname};
	</select>

	<!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
	<resultMap id="rstc" type="com.hx.hx02.bean.Classes">
		<id column="cno" property="cno"/>
		<result column="cname" property="cname"/>
		<result column="cnum" property="cnum"/>
		<result column="cdes" property="cdes"/>
		<association property="teacher" javaType="com.hx.hx02.bean.Teacher">
			<id column="tid" property="tid"/>
			<result column="tname" property="tname"/>
			<result column="tsex" property="tsex"/>
			<result column="tage" property="tage"/>
		</association>
	</resultMap>
</mapper>


<mappers>
		<mapper resource="mapper/classes.xml"/>
</mappers>

  @Test
    public void test3(){
        SqlSession session = MyBatisUtils.getSqlSession();
        ClassesMapper mapper = session.getMapper(ClassesMapper.class);
        Classes classes = mapper.getClasses("html");
        System.out.println(classes);
        session.close();
    }

    * 一对多(多对一)     

   业务需求:
    根据班级编号查询对应的班级信息,包括学生,老师

public class Student {
    private int sid;
    private int cno;
    private String sname;
    private char ssex;
    private int sage;
    private String colleage;

    public int getSid() {
        return sid;
    }

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

    public int getCno() {
        return cno;
    }

    public void setCno(int cno) {
        this.cno = cno;
    }

    public String getSname() {
        return sname;
    }

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

    public char getSsex() {
        return ssex;
    }

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

    public int getSage() {
        return sage;
    }

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

    public String getColleage() {
        return colleage;
    }

    public void setColleage(String colleage) {
        this.colleage = colleage;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Student student = (Student) o;
        return sid == student.sid &&
                cno == student.cno &&
                ssex == student.ssex &&
                sage == student.sage &&
                Objects.equals(sname, student.sname) &&
                Objects.equals(colleage, student.colleage);
    }

    @Override
    public int hashCode() {
        return Objects.hash(sid, cno, sname, ssex, sage, colleage);
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", cno=" + cno +
                ", sname='" + sname + '\'' +
                ", ssex=" + ssex +
                ", sage=" + sage +
                ", colleage='" + colleage + '\'' +
                '}';
    }
}



在classes类里面添加学生集合:代表一个班级对应多个学生
private List<Student> students;
public List<Student> getStudents() {
        return students;
    }

public void setStudents(List<Student> students) {
        this.students = students;
    }

  * 方式一

  

-- 查询教html班级的信息,包括老师,学生
SELECT * FROM classes c WHERE c.cname='html'

SELECT * FROM teacher t WHERE t.tid=2

SELECT * FROM student s WHERE s.cno=1002

public interface ClassesMapper2 {
    /**
     * 查询教html班级的信息(包含老师,学生信息)
     * @param cname
     * @return
     */

    public Classes getClasses(String cname);
}


<?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="com.hx.hx02.mapper.ClassesMapper2">
	<!-- 方式一 -->
	<select id="getClasses" parameterType="string" resultMap="rstc">
		SELECT * FROM classes c WHERE c.cname=#{cname}
	</select>

	<resultMap id="stc" type="com.hx.hx02.bean.Classes">
		<id column="cno" property="cno"/>
		<result column="cname" property="cname"/>
		<result column="cnum" property="cnum"/>
		<result column="cdes" property="cdes"/>
		<association property="teacher" column="tid" select="getTeacher"></association>
		<collection property="students" ofType="com.hx.hx02.bean.Student" column="cno" select="getStudent"></collection>
	</resultMap>

	<select id="getTeacher" parameterType="int" resultType="com.hx.hx02.bean.Teacher">
		SELECT * FROM teacher t WHERE t.tid=#{tid}
	</select>

	<select id="getStudent" parameterType="int" resultType="com.hx.hx02.bean.Student">
		SELECT * FROM student s WHERE s.cno=#{cno}
	</select>
</mapper>

@Test
    public void test4(){
        SqlSession session = MyBatisUtils.getSqlSession();
        ClassesMapper2 mapper = session.getMapper(ClassesMapper2.class);
        Classes classes = mapper.getClasses("html");
        System.out.println(classes);
        session.close();
    }

 

 * 方式二

SELECT * FROM classes c,teacher t,student s WHERE c.tid=t.tid AND c.cno=s.cno AND c.cname='html'

pace="com.hx.hx02.mapper.ClassesMapper2">

	<select id="getClasses" parameterType="string" resultMap="rstc">
		SELECT * FROM classes c,teacher t,student s WHERE c.tid=t.tid AND c.cno=s.cno AND c.cname=#{c.cname}
	</select>

	<resultMap id="rstc" type="com.hx.hx02.bean.Classes">
		<id column="cno" property="cno"/>
		<result column="cname" property="cname"/>
		<result column="cnum" property="cnum"/>
		<result column="cdes" property="cdes"/>
		<association property="teacher" javaType="com.hx.hx02.bean.Teacher">
			<id column="tid" property="tid"/>
			<result column="tname" property="tname"/>
			<result column="tsex" property="tsex"/>
			<result column="tage" property="tage"/>
		</association>
		<collection property="students" ofType="com.hx.hx02.bean.Student">
			<id column="sid" property="sid"/>
			<result column="cno" property="cno"/>
			<result column="sname" property="sname"/>
			<result column="ssex" property="ssex"/>
			<result column="sage" property="sage"/>
			<result column="colleage" property="colleage"/>
		</collection>
	</resultMap>
</mapper>

    * 多对多

业务:
1 查询林老师(某个)信息及所教的学生的信息
SELECT t.*,s.* FROM teacher t,student s,ts_r r WHERE t.tid=r.tid AND s.sid=r.sid AND t.tname='林老师';
2 查询小黑(某个学生)的信息及被那些老师教过
SELECT t.*,s.* FROM teacher t,student s,ts_r r WHERE t.tid=r.tid AND s.sid=r.sid AND s.sname='小黑';

 

public interface STRMapper {

    /**
     * 查询林老师(某个)信息及所教的学生的信息
     * @param tname
     * @return
     */
    public Teacher getTeacher(String tname);

    /**
     * 查询小黑(某个学生)的信息及被那些老师教过
     * @param sname
     * @return
     */
    public Student getStudent(String sname);
}


<?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="com.hx.hx02.mapper.STRMapper">

	<select id="getTeacher" parameterType="string" resultMap="rstc">
		SELECT t.*,s.* FROM teacher t,student s,ts_r r WHERE t.tid=r.tid AND s.sid=r.sid AND t.tname=#{t.tname}
	</select>

	<resultMap id="rstc" type="com.hx.hx02.bean.Teacher">
		<id column="tid" property="tid"/>
		<result column="tname" property="tname"/>
		<result column="tsex" property="tsex"/>
		<result column="tage" property="tage"/>
		<collection property="students" ofType="com.hx.hx02.bean.Student">
			<id column="sid" property="sid"/>
			<result column="cno" property="cno"/>
			<result column="sname" property="sname"/>
			<result column="ssex" property="ssex"/>
			<result column="sage" property="sage"/>
			<result column="colleage" property="colleage"/>
		</collection>
	</resultMap>

	<select id="getStudent" parameterType="string" resultMap="rstc1">
		SELECT t.*,s.* FROM teacher t,student s,ts_r r WHERE t.tid=r.tid AND s.sid=r.sid AND s.sname=#{s.tname};
	</select>

	<resultMap id="rstc1" type="com.hx.hx02.bean.Student">
		<id column="sid" property="sid"/>
		<result column="cno" property="cno"/>
		<result column="sname" property="sname"/>
		<result column="ssex" property="ssex"/>
		<result column="sage" property="sage"/>
		<result column="colleage" property="colleage"/>
		<collection property="teachers" ofType="com.hx.hx02.bean.Teacher">
			<id column="tid" property="tid"/>
			<result column="tname" property="tname"/>
			<result column="tsex" property="tsex"/>
			<result column="tage" property="tage"/>
		</collection>
	</resultMap>
</mapper>


@Test
    public void test5(){
        SqlSession session = MyBatisUtils.getSqlSession();
        STRMapper mapper = session.getMapper(STRMapper.class);
        Teacher teacher = mapper.getTeacher("林老师");
        System.out.println(teacher);
        session.close();
    }

    @Test
    public void test6(){
        SqlSession session = MyBatisUtils.getSqlSession();
        STRMapper mapper = session.getMapper(STRMapper.class);
        Student student = mapper.getStudent("小黑");
        System.out.println(student);
        session.close();
    }

猜你喜欢

转载自blog.csdn.net/linzhaoliangyan/article/details/88658305