Hibernate 一对多,多对多映射实例
来源:互联网 发布:net软件开发培训 编辑:程序博客网 时间:2024/05/17 21:55
Demo结构:
一对多:
院系实体类:
package com.Bean;import java.util.HashSet;import java.util.Set;/** * 院系表(dept)实体类 * @author liu * */public class Dept { //院系ID private String DeptId; //院系名称 private String DeptName; //院系所有学生集合 private Set<Student> Students=new HashSet<Student>(); public Dept(){ }
学生实体类:
package com.Bean;/** * 学生实体类 * @author liu * */public class Student { //学号 private String Sno; //姓名 private String Sname; //所在院系 private Dept dept; public Student(){ }
院系映射xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-18 19:58:28 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.Bean.Dept" table="dept" > <id name="DeptId" type="java.lang.String"> <column name="deptid" /> <generator class="assigned" /> </id> <property name="DeptName" type="java.lang.String"> <column name="deptname"/> </property> <set name="Students" inverse="false" table="student" cascade="all"> <key> <column name="deptid" /> </key> <one-to-many class="com.Bean.Student"/> </set> </class></hibernate-mapping>
学生映射xml:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-18 19:58:28 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.Bean.Student" table="student"> <id name="Sno" type="java.lang.String"> <column name="sno" /> <generator class="assigned" /> </id> <property name="Sname" type="java.lang.String"> <column name="sname"/> </property> <many-to-one name="dept" class="com.Bean.Dept" fetch="select"> <column name="deptid" /> </many-to-one> </class></hibernate-mapping>
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory > <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf8</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="com/Bean/Dept.hbm.xml"/> <mapping resource="com/Bean/Student.hbm.xml"/> </session-factory></hibernate-configuration>
Dao层:
package com.Dao;import java.util.List;import org.hibernate.Session;import org.hibernate.Transaction;import com.Bean.Dept;import com.Bean.Student;import com.Factory.HibernateSessionFactory;public class HibernateOne2ManyDao { public void insert(){ //方法1:不在配置文件中设置inverse属性 /*Dept d=new Dept(); d.setDeptId("1"); d.setDeptName("计科"); Student s=new Student(); s.setSno("003"); s.setSname("马可波罗"); s.setDept(d);*/ //方法2:在Dept.hbm.xml中设置student不维护关联关系 Dept d2=new Dept(); d2.setDeptId("1"); d2.setDeptName("计科"); Student s2=new Student(); s2.setSno("004"); s2.setSname("马可波罗2"); d2.getStudents().add(s2); Session session=HibernateSessionFactory.getSession(); Transaction transaction=session.beginTransaction(); //session.save(d); //session.save(s); session.save(d2); transaction.commit(); } public static void query(){ String sql="from Dept"; Session session=HibernateSessionFactory.getSession(); Transaction tx=session.beginTransaction(); List li=session.createQuery(sql).list(); tx.commit(); }}
测试类:
package HibernateOne2Many;import com.Dao.HibernateOne2ManyDao;public class Test1 { public static void main(String[] args) { HibernateOne2ManyDao h=new HibernateOne2ManyDao(); h.insert(); // HibernateOne2ManyDao.query();} }
总结:
1.在Hibernate.cfg.xml文件中的
hbm2ddl.auto属性为
create:创建表,若存在则删除后创建
update:更新表
2.inverse属性:指定那一方维持关联关系,默认是双方一起维护(实例中是院系方维护)
3.Lazy属性:Hibernate3的新特性–属性延迟加载,默认为false,设置为true时
多对多:
Plaer实体类:
package com.Bean;import java.util.HashSet;import java.util.Set;public class Player { private String pid; private String pname; private Set<Role> roles=new HashSet<Role>(); public Player(){ }
Role实体类:
package com.Bean;import java.util.HashSet;import java.util.Set;public class Role { private String rid; private String rname; private Set<Player> players=new HashSet<Player>(); public Role(){ }
Player配置文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-18 19:58:28 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.Bean.Player" table="player" > <id name="pid" type="java.lang.String"> <column name="pid" /> <generator class="assigned" /> </id> <property name="pname" type="java.lang.String"> <column name="pname"/> </property> <set name="roles" table="role_player" cascade="all"> <key> <column name="pid" /> </key> <many-to-many class="com.Bean.Role" column="rid"/> </set> </class></hibernate-mapping>
Role配置文件:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-18 19:58:28 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.Bean.Role" table="role" > <id name="rid" type="java.lang.String"> <column name="rid" /> <generator class="assigned" /> </id> <property name="rname" type="java.lang.String"> <column name="rname"/> </property> <set name="players" table="role_palyer" cascade="all"> <key> <column name="rid" /> </key> <many-to-many class="com.Bean.Player" column="pid"/> </set> </class></hibernate-mapping>
Hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory > <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf8</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="com/Bean/Dept.hbm.xml"/> <mapping resource="com/Bean/Student.hbm.xml"/> <mapping resource="com/Bean/Player.hbm.xml"/> <mapping resource="com/Bean/Role.hbm.xml"/> </session-factory></hibernate-configuration>
Dao层:
package com.Dao;import java.util.List;import org.hibernate.Session;import org.hibernate.Transaction;import com.Bean.Dept;import com.Bean.Player;import com.Bean.Role;import com.Bean.Student;import com.Factory.HibernateSessionFactory;public class HibernateOne2ManyDao { public void insert(){ //方法1:不在配置文件中设置inverse属性 /*Dept d=new Dept(); d.setDeptId("1"); d.setDeptName("计科"); Student s=new Student(); s.setSno("003"); s.setSname("马可波罗"); s.setDept(d);*/ //方法2:在Dept.hbm.xml中设置student不维护关联关系 Dept d2=new Dept(); d2.setDeptId("1"); d2.setDeptName("计科"); Student s2=new Student(); s2.setSno("004"); s2.setSname("马可波罗2"); d2.getStudents().add(s2); Session session=HibernateSessionFactory.getSession(); Transaction transaction=session.beginTransaction(); //session.save(d); //session.save(s); session.save(d2); transaction.commit(); } public static void query(){ String sql="from Dept"; Session session=HibernateSessionFactory.getSession(); Transaction tx=session.beginTransaction(); List li=session.createQuery(sql).list(); tx.commit(); } /** * 多对多插入方法 */ public static void insertRole_Player(){ Session session=HibernateSessionFactory.getSession(); Transaction transaction=session.beginTransaction(); Player p1=new Player(); p1.setPid("1"); p1.setPname("C罗"); Player p2=new Player(); p2.setPid("2"); p2.setPname("姚明"); Player p3=new Player(); p3.setPid("3"); p3.setPname("科比"); Role r1=new Role(); r1.setRid("1"); r1.setRname("酱油"); r1.getPlayers().add(p1); r1.getPlayers().add(p2); Role r2=new Role(); r2.setRid("2"); r2.setRname("路人"); r2.getPlayers().add(p3); r2.getPlayers().add(p2); session.save(r1); session.save(r2); transaction.commit(); session.close(); }}
测试类:
package HibernateOne2Many;import com.Dao.HibernateOne2ManyDao;public class Test1 { public static void main(String[] args) { /* HibernateOne2ManyDao h=new HibernateOne2ManyDao(); h.insert();*/ // HibernateOne2ManyDao.query(); HibernateOne2ManyDao.insertRole_Player();} }
控制台输出:
七月 01, 2017 10:36:24 上午 org.hibernate.tool.hbm2ddl.SchemaExport executeINFO: HHH000230: Schema export completeHibernate: select player_.pid, player_.pname as pname2_1_ from player player_ where player_.pid=?Hibernate: select player_.pid, player_.pname as pname2_1_ from player player_ where player_.pid=?Hibernate: select player_.pid, player_.pname as pname2_1_ from player player_ where player_.pid=?Hibernate: insert into role (rname, rid) values (?, ?)Hibernate: insert into player (pname, pid) values (?, ?)Hibernate: insert into player (pname, pid) values (?, ?)Hibernate: insert into role (rname, rid) values (?, ?)Hibernate: insert into player (pname, pid) values (?, ?)Hibernate: insert into role_palyer (rid, pid) values (?, ?)Hibernate: insert into role_palyer (rid, pid) values (?, ?)Hibernate: insert into role_palyer (rid, pid) values (?, ?)Hibernate: insert into role_palyer (rid, pid) values (?, ?)
阅读全文
0 0
- Hibernate 一对多,多对多映射实例
- Hibernate关系映射----单向一对多实例
- Hibernate映射----(一对多,多对一)
- Hibernate一对多、多对一映射
- hibernate 一对多映射
- Hibernate一对多映射
- Hibernate 一对多映射
- Hibernate 一对多映射
- hibernate 一对多映射
- hibernate一对多映射
- 【Hibernate】一对多映射
- Hibernate映射一对多
- Hibernate一对多映射
- Hibernate一对多映射
- hibernate一对多映射
- Hibernate 一对多关联映射& 多对多管理映射
- Hibernate---一对多映射与多对一映射
- Hibernate一对多(多对一)实例
- NPC问题证明题
- mysql的主从复制,从库设为只读,不能写么
- Linux 内核剖析
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- vs如何将工程配置,保存到属性表
- Hibernate 一对多,多对多映射实例
- 米扑代理:爬虫代理IP哪家好呢
- 数据全链路监控
- windows下python3扩展包的配置
- OpenGL ES着色器语言之内建函数
- MFC串行化类CArchive
- 只用2GB内存在20亿个整数中找到出现次数最多的数
- LeetCode
- 开发者 常用网站