譬如一個人可以住很多房子,房子也可以很多人住
※事前規劃
DROP TABLE PERSON_HOME; DROP TABLE PERSON; DROP TABLE HOME; CREATE TABLE PERSON( PID NUMBER, NAME VARCHAR(30) NOT NULL , CONSTRAINT PERSON_PK PRIMARY KEY(PID) ); COMMENT ON TABLE PERSON IS '人表'; COMMENT ON COLUMN PERSON.PID IS '人id'; COMMENT ON COLUMN PERSON.NAME IS '姓名'; CREATE TABLE HOME( HID NUMBER, ADDRESS_NO NUMBER NOT NULL , CONSTRAINT HOME_PK PRIMARY KEY(HID) ); COMMENT ON TABLE HOME IS '房子表'; COMMENT ON COLUMN HOME.HID IS '房子id'; COMMENT ON COLUMN HOME.ADDRESS_NO IS '房子號碼'; CREATE TABLE PERSON_HOME( PID NUMBER, HID NUMBER, CONSTRAINT PERSON_HOME_PID_FK FOREIGN KEY(PID) REFERENCES PERSON(PID) ON DELETE CASCADE, CONSTRAINT PERSON_HOME_HID_FK FOREIGN KEY(HID) REFERENCES HOME(HID) ON DELETE CASCADE ); COMMENT ON TABLE PERSON_HOME IS '人和房子的中介表'; COMMENT ON COLUMN PERSON_HOME.PID IS '人的id'; COMMENT ON COLUMN PERSON_HOME.HID IS '房子的id'; INSERT INTO PERSON(PID, NAME) VALUES (111, 'john'); INSERT INTO PERSON(PID, NAME) VALUES (222, 'apple'); INSERT INTO PERSON(PID, NAME) VALUES (333, 'tom'); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(999, 555); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(998, 556); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(997, 557); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(996, 558); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(995, 559); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(994, 560); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(993, 561); INSERT INTO HOME(HID, ADDRESS_NO) VALUES(992, 562); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 999); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 998); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 997); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 996); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 995); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 994); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 993); INSERT INTO PERSON_HOME(PID, HID) VALUES(111, 992); INSERT INTO PERSON_HOME(PID, HID) VALUES(222, 997); INSERT INTO PERSON_HOME(PID, HID) VALUES(222, 996); INSERT INTO PERSON_HOME(PID, HID) VALUES(222, 995); INSERT INTO PERSON_HOME(PID, HID) VALUES(222, 994); INSERT INTO PERSON_HOME(PID, HID) VALUES(333, 995); INSERT INTO PERSON_HOME(PID, HID) VALUES(333, 994); INSERT INTO PERSON_HOME(PID, HID) VALUES(333, 993); INSERT INTO PERSON_HOME(PID, HID) VALUES(333, 992);
※java檔
兩隻java分別對應到對方,想成一對多,中介的就基本的而已:public class Person {
private Integer pid;
private String name;
private List<Home> homes;
//setter/getter...
}
public class Home {
private Integer hid;
private Integer addressNo;
private List<Person> persons;
//setter/getter...
}
public class PersonHome {
private Integer pid;
private Integer hid;
//setter/getter...
}
※xml設定
Person.xml<mapper namespace="ooo.Person">
<sql id="column">
PID, NAME
</sql>
<resultMap type="Person" id="PersonInterface">
<id property="pid" column="PID" />
<result property="name" column="NAME" />
</resultMap>
<resultMap type="Person" id="PersonHomeInterface" extends="PersonInterface">
<collection property="homes" javaType="java.util.List"
ofType="Home" resultMap="xxx.Home.HomeInterface" />
</resultMap>
<select id="findPersonHome" parameterType="java.lang.Integer"
resultMap="PersonHomeInterface">
SELECT
P.PID, P.NAME, H.HID, H.ADDRESS_NO
FROM
PERSON P, HOME H, PERSON_HOME PH
<where>
PH.PID = P.PID
AND PH.HID = H.HID
AND P.PID = #{xxx}
</where>
</select>
</mapper>
Home.xml
<mapper namespace="xxx.Home">
<sql id="column">
HID, ADDRESS_NO
</sql>
<resultMap type="Home" id="HomeInterface">
<id property="hid" column="HID" />
<result property="addressNo" column="ADDRESS_NO" />
</resultMap>
<resultMap type="Home" id="HomePersonInterface" extends="HomeInterface">
<collection property="persons" javaType="java.util.List"
ofType="Person" resultMap="ooo.Person.PersonInterface" />
</resultMap>
<select id="findHomePerson" parameterType="java.lang.Integer"
resultMap="HomePersonInterface">
SELECT
P.PID, P.NAME, H.HID, H.ADDRESS_NO
FROM
PERSON P, HOME H, PERSON_HOME PH
<where>
PH.PID = P.PID
AND PH.HID = H.HID
AND H.HID = #{ooo}
</where>
</select>
</mapper>
※java檔測試:
SqlSession sqlSession = MyBatisSessionFactory.getSession();
System.out.println("*****一個人住很多房子*****");
Person person = sqlSession.selectOne("ooo.Person.findPersonHome", 222);
System.out.println(person.getPid());
System.out.println(person.getName());
System.out.println("------");
List<Home> lh = person.getHomes();
for(Home h : lh){
System.out.println(h.getHid());
System.out.println(h.getAddressNo());
System.out.println("======");
}
System.out.println("*****一間房子有很多人住*****");
Home home = sqlSession.selectOne("xxx.Home.findHomePerson", 996);
System.out.println(home.getHid());
System.out.println(home.getAddressNo());
System.out.println("------");
List<Person> lp = home.getPersons();
for(Person p : lp){
System.out.println(p.getPid());
System.out.println(p.getName());
System.out.println("======");
}
MyBatisSessionFactory.closeSession();
結果:
*****一個人住很多房子*****
222
apple
------
997
557
======
996
558
======
995
559
======
994
560
======
*****一間房子有很多人住*****
996
558
------
111
john
======
222
apple
======
apple住了557、558、559、560號,四間房子
住址558號的房子住了john和apple
沒有留言:
張貼留言