MySql创建外键:
ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);
关联查询:
一对一:
a,业务拓展类(两个表用外键连接,查询时返回两个表的内容)
一个类对应一张表,查询时要接收两个表的数据,即新建一个类继承父类,父类对应一张表,子类补充另一张表的变量
查询sql:
<!--利用业务拓展类实现一对一-->
<select id="mutilSql" resultType="idcardAndInfo" parameterType="int">
SELECT c.*,i.* FROM idcard c INNER JOIN cardinfo i
ON c.cardid=i.cardid
WHERE c.id = #{id}
</select>
entity
public class idcardAndInfo extends idcard {
private String detail;//父类对应一张表,子类拓展一张表
b,resultMap
通过属性成员 将两个类建立起联系
通过resultMap建立映射关系
<resultMap id="cardMap" type="idcard">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="cardid" column="cardid"></result>
<!--一对一时,对象成员使用association;javaType 指定对象类型-->
<association property="cardinfo" javaType="CardInfo">
<result property="detail" column="detail"></result>
</association>
</resultMap>
entity
public class idcard {
private int id;
private String name;
private int cardid;
private CardInfo cardinfo;//级联属性
}
一对多:
一对多:
(Mybatis:多对一,多对多的本质就是 一对多的变化)
表:student class(通过外键建立联系)
类:students studentClass(通过联级属性联系(List))
<!--建立一对多-->
<select id="multisql3" resultMap="classMap" parameterType="int">
SELECT c.*,s.* FROM students s INNER JOIN class c
ON c.classid = s.classid
WHERE c.classid = #{id}
</select>
<!--类与表的映射关系-->
<resultMap id="classMap" type="StudentClass">
<id property="classid" column="classid"></id>
<result property="classname" column="classname"></result>
<!--配置成员属性,一对多时,对象成员用collection;属性类型javaType;属性的元素类型:ofType-->
<collection property="students" ofType="Students">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="classid" column="classid"></result>
</collection>
</resultMap>
entity:
public class StudentClass {
private List<Students> students;
private int classid;
private String classname;