世上的事务总不是孤立存在的,表现在Java类里面,则是类与类之间的关系,比如继承is-a、依赖use-a、关联has-a,反映在数据库中,则是表与表之间的关系,比如外键
关联关系存在着以下几种类型:一对一关系;一对多和多对一关系;多对多关系
一对一关系:
对象A和对象B一一对应,最直观的例子:人和身份证的关系,一个人只拥有一张身份证,而一张身份证只会属于一个人 一对多和多对一关系: 一个班级可以有多个学生;一个人可以有多本书;一个用户可以有多个订单 多对多关系: 用户和商品:多个用户可以购买同一种商品;一个用户也可以购买多种商品MyBatis可以处理这几种关联关系
比如一个身份证表和一个人的表,查询一个人的时候,顺便就把他的身份证信息查出来,看下面的sql:
DROP TABLE IF EXISTS `idc`;CREATE TABLE idc( `pk` INT PRIMARY KEY AUTO_INCREMENT, `id` VARCHAR(18) UNIQUE, `name` VARCHAR(24), `address` VARCHAR(64), `birth` DATE);INSERT INTO idc(`id`,`name`,`address`,`birth`) VALUES('123456198501018376','王老五','A省B县','1985-01-01');INSERT INTO idc(`id`,`name`,`address`,`birth`) VALUES('123456198304018376','郭小二','X省Y县','1983-04-01');INSERT INTO idc(`id`,`name`,`address`,`birth`) VALUES('123456198807218376','李三','M省N县','1988-07-21');DROP TABLE IF EXISTS `person`;CREATE TABLE person( `pk` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(24), `age` INT, `salary` INT, `idc_pk` int UNIQUE, FOREIGN KEY (idc_pk) REFERENCES idc(pk) /*将身份证idc表的主键作为人person表的外键*/);INSERT INTO person(`name`,`age`,`salary`,`idc_pk`) VALUES('王老五','32','7550','1');INSERT INTO person(`name`,`age`,`salary`,`idc_pk`) VALUES('郭小二','34','8350','2');INSERT INTO person(`name`,`age`,`salary`,`idc_pk`) VALUES('李三','29','5150','3');
实体类Person和IDC
package net.sonng.onetoone;public class Person { private int pk; private String name; private int age; private int salary; private IDC idc; //注意这跟表的idc_pk没有对应,而是映射到idc表里面的一条身份证信息记录 //省略getter和toString}
package net.sonng.onetoone;public class IDC { private int pk; private String id; private String name; private String address; private String birth; //省略getter和toString}
下面是sql语句
PersonDao略
测试类:package net.sonng.test;import net.sonng.onetoone.Person;import net.sonng.onetoone.PersonDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { public static void main(String[] args){ ApplicationContext ac=new ClassPathXmlApplicationContext("ac.xml"); PersonDao personDao=ac.getBean("personDao",PersonDao.class); Person per=personDao.selectPersonByPk(2); System.out.println(per); System.out.println(per.getIdc()); }}