* 表与表之间的关系
* 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();
}