Hibernate的底層就是JDBC,里面處理關(guān)系映射很方便,如果用JDBC實現(xiàn)就要寫N長的代碼,而在Hibernate中一句話就實現(xiàn)了,如果使用數(shù)據(jù)庫,關(guān)聯(lián)關(guān)系是必不可少的,無論是一對一,一對多還是多對多的
為洪湖等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及洪湖網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、洪湖網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
你在Hobby和Person之間徘徊,造成一個死循環(huán)了,我覺你不應(yīng)該是這樣映射,這樣會好麻煩的
package association;
import java.util.*;
public class Hobby {
/* Hobby類的屬性hobbyname,一個vector型的persons */
private String hobbyname;
private Vector persons = new Vector();
/* 構(gòu)造函數(shù) */
public Hobby(String hobbyname, Person person) {
this.hobbyname = hobbyname;
persons.add(person);
/**
* 一個業(yè)余愛好可以對應(yīng)多個人,但只對應(yīng)一次
*/
if (!persons.contains(person))
person.addHobby(hobbyname);
}
/* 得到hobbyname */
public String getHobbyname() {
return hobbyname;
}
/* 一個hobby可以有多個person,添加person的方法 */
public void addPerson(String personname, int age) {
persons.add(new Person(personname, age));
}
/* 輸出hobbyname,并將有hobbyname的人名全部輸出 */
public String toString() {
String s = "hobbyname:" + hobbyname + "\n";
s += " persons:";
Object[] o = persons.toArray();
Person[] p = new Person[o.length];
for (int i = 0; i p.length; i++) {
p[i] = (Person) o[i];
s += p[i].getPersonname() + " " + p[i].getAge() + "; ";
}
return s;
}
/* 用于測試的主函數(shù) */
public static void main(String arg[]) throws Exception {
Person p1 = new Person("mary", 20);
p1.addHobby("Biking");
Hobby h2 = new Hobby("Swimming", p1);
String s = p1.toString() + "\n";
s += h2.toString() + "\n";
System.out.print(s);
}
}
class Person {
/* person類的屬性personname,age和一個vector型的hobbies */
private String personname;
private int age;
private Vector hobbies = new Vector();
/* 構(gòu)造函數(shù) */
public Person(String personname, int age) {
this.age = age;
this.personname = personname;
}
/* 得到personname */
public String getPersonname() {
return personname;
}
/* 得到age */
public int getAge() {
return age;
}
/* 添加hobby的方法 */
public void addHobby(String hobbyname) {
hobbies.add(new Hobby(hobbyname, this));
}
/* 輸出person,并將其愛好全部輸出 */
public String toString() {
String s = "personname:" + personname + "\n";
s += " hobbies:";
Object[] o = hobbies.toArray();
Hobby[] h = new Hobby[o.length];
for (int i = 0; i h.length; i++) {
h[i] = (Hobby) o[i];
s += h[i].getHobbyname() + " ";
}
return s;
}
}
這個沒什么復(fù)雜的,你的核心意思是需要對二個對象的實例進行copy動作,做法如下:
1、對第一個類進行反射獲取屬性的值
2、對第二個類進行反射設(shè)置屬性的值(將1中的值設(shè)入,采用配置文件進行關(guān)系映射)
建議你看下java反射機制,不用太理解他的含義,了解怎么用就可以,百度一下“java反射代碼”。
下面2個網(wǎng)站可以看看:
mybatis有兩種關(guān)聯(lián)映射方式,一種是結(jié)果集映射,一種是子查詢映射。
子查詢映射
!-- 一對一映射,upersign便是getBySingleSign方法的入?yún)?--
association property="parentmenu" column="upersign" select="sys.mapper.FuncMapper.getBySingleSign"/
!-- 一對多映射 --
collection property="menus" ofType="java.util.List" select="sys.mapper.RoleMapper.searchMenu" column="SR_FUNCURL"/
結(jié)果集映射
!-- 一對一映射,property="roleDTO"是對象中的屬性為"roleDTO", javaType="roleDTO"是對象的別名叫"roleDTO"與前面同名的沒有任何關(guān)系,resultMap="roleDTOMap.roleResultMap"是對象RoleDTO的結(jié)果集映射規(guī)則
--
association property="roleDTO" column="sr_id" javaType="roleDTO" resultMap="roleDTOMap.roleResultMap" /