技术心得:单向多对一查询,添加

简介: 技术心得:单向多对一查询,添加

映射原理:


多的一端维护关联关系,在“多”的一端加入一个外键,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外键,指向“一”的一端。


实例:


多个用户属于同一组,我们从对象模型和关系模型两个角度来分析一下这个例子:


从上图可以看出,对象模型具有方向性,通过用户(User)可以看到组(Group),但是不能反过来。用户和组各对应一张数据库表,聚合关系需要一个外键(groupid)来表示,最后生成的表如下所示:


作用:


当我拿到用户时直接就可以拿到用户的组,hibernate在访问多的一端时,可以自动的加载关联对象。对于用户(User)来说,它的关联对象是组(group)。


代码:


entity:


User类


package com.xia.entity;


public class User {


private int id;


private String name;


private group group;


  public String toString() {


    return "User 【id=" + id + ", name=" + name + ", group=" + group.toString() + "】";


   }


//get,set方法


}


Groud类


package com.xia.entity;


public class group {


private int id;


private String name;


public String toString() {


   return "group 【id=" + id + ", name=" + name + "】";


    }


//get,set方法


}


xml:


User.hbm.xml


<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"


"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">



[span style="color: rgba(0, 0, 255, 1)">class name="User" table="tb_user">



   <!-- group属性,表达的是本对象与Group的多对一的关系--




Group.hbm.xml


<!DOCTYPE hibernate-mapping PUBLIC


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"


"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">



[span style="color: rgba(0, 0, 255, 1)">class //代码效果参考:http://www.lyjsj.net.cn/wz/art_23550.html

name="group" table="t_group">



将两个配置文件映射到sessionFactory中:


com/xia/entity/group.hbm.xml


com/xia/entity/User.hbm.xml


Test:自动建表及添加数据


package com.xia.test;


import org.hibernate.Session;


import org.hibernate.SessionFactory;


import org.springframework.context.ApplicationContext;


import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.xia.entity.User;


import com.xia.entity.group;


public class test {


//代码效果参考:http://www.lyjsj.net.cn/wx/art_23548.html

public static void main(String【】 args) {

ApplicationContext ac = new ClassPathXmlApplicationContext("springContext.xml");


SessionFactory s = ac.getBean("sessionFactory",SessionFactory.class);


User u = new User();


u.setName("张三");


group g = new group();


g.setName("员工");


u.setGroup(g);


Session session = s.openSession();


session.beginTransaction();


session.save(g);


session.save(u);


session.getTransaction().commit();


session.close();


}


}


查询:


package com.xia.test;


import java.util.List;


import org.hibernate.Query;


import org.hibernate.Session;


import org.hibernate.SessionFactory;


import org.springframework.context.ApplicationContext;


import org.springframework.context.support.ClassPathXmlApplicationContext;


import com.xia.entity.User;


public class test {


public static void main(String【】 args) {


ApplicationContext ac = new ClassPathXmlApplicationContext("springContext.xml");


SessionFactory s = ac.getBean("sessionFactory",SessionFactory.class);


Session session = s.openSession();


Query query = session.createQuery("from User");


List list = query.list();


for(User u:list){


System.out.println(u.toString());


}


}


}


输出结果:


User 【id=0, name=张三, group=group 【id=1, name=员工】】

相关文章
|
6月前
|
SQL Java 数据库
JPA - 单向一对多映射
JPA - 单向一对多映射
71 2
|
6月前
|
机器学习/深度学习 SQL Java
JPA - 双向多对多映射
JPA - 双向多对多映射
60 2
|
6月前
|
SQL Java
JPA - 双向多对一映射
JPA - 双向多对一映射
64 2
|
6月前
|
SQL 缓存 Java
Hibernae - 双向多对一关联关系映射
Hibernae - 双向多对一关联关系映射
51 0
|
6月前
|
Java uml
JPA - 单向多对一映射
JPA - 单向多对一映射
58 0
|
存储 Java 数据库连接
Hibernate的一对多映射的单向关联和双向关联(九)
Hibernate的一对多映射的单向关联和双向关联(九)
133 0
Hibernate的一对多映射的单向关联和双向关联(九)
|
SQL Oracle Java
hibernate(四) 双向多对多映射关系
现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感觉还是比较容易的,需要理清楚其数据库关系图,那么你就拿下了它。映射文件的配置还是那么些死东西。
166 0
|
Java 数据库连接 关系型数据库
|
Java 数据库连接 关系型数据库