Hibernate的底层就是JDBC,里面处理关系映射很方便,如果用JDBC实现就要写N长的代码,而在Hibernate中一句话就实现了,如果使用数据库,关联关系是必不可少的,无论是一对一,一对多还是多对多的
为洪湖等地区用户提供了全套网页设计制作服务,及洪湖网站建设行业解决方案。主营业务为网站设计制作、网站建设、洪湖网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
你在Hobby和Person之间徘徊,造成一个死循环了,我觉你不应该是这样映射,这样会好麻烦的
package association;
import java.util.*;
public class Hobby {
/* Hobby类的属性hobbyname,一个vector型的persons */
private String hobbyname;
private Vector persons = new Vector();
/* 构造函数 */
public Hobby(String hobbyname, Person person) {
this.hobbyname = hobbyname;
persons.add(person);
/**
* 一个业余爱好可以对应多个人,但只对应一次
*/
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;
}
/* 用于测试的主函数 */
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();
/* 构造函数 */
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;
}
}
这个没什么复杂的,你的核心意思是需要对二个对象的实例进行copy动作,做法如下:
1、对第一个类进行反射获取属性的值
2、对第二个类进行反射设置属性的值(将1中的值设入,采用配置文件进行关系映射)
建议你看下java反射机制,不用太理解他的含义,了解怎么用就可以,百度一下“java反射代码”。
下面2个网站可以看看:
mybatis有两种关联映射方式,一种是结果集映射,一种是子查询映射。
子查询映射
!-- 一对一映射,upersign便是getBySingleSign方法的入参 --
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"/
结果集映射
!-- 一对一映射,property="roleDTO"是对象中的属性为"roleDTO", javaType="roleDTO"是对象的别名叫"roleDTO"与前面同名的没有任何关系,resultMap="roleDTOMap.roleResultMap"是对象RoleDTO的结果集映射规则
--
association property="roleDTO" column="sr_id" javaType="roleDTO" resultMap="roleDTOMap.roleResultMap" /