整理笔记---Hibernate的xml与Annotation配置映射关系
2016-08-03 15:29
429 查看
有三个java类,分别用Hibernate的xml配置方法和Annotation注解方法实现这三个类之间的映射关系
- 班级和专业之间(一对多)
- 专业和班级之间(多对一)
- 学生和班级之间(多对一)
- 班级和学生之间(一对多)
Special.java
Student.java
hibernate.cfg.xml
Hibernate利用xml配置文件来实现关系映射
ClassRoom.java
Special.java
Student.java
ClassRoom.hbm.xml
Specail.hbm.xml
Student.hbm.xml
两种方法用下面测试代码测试运行,如果能生成下面三张表,则说明配置成功了
小记:
1. 在做映射关系的时候尽可能使用单向关联
2. 在大项目中(数据量超多)如果使用hibernate不建议使用对象关联,可以用冗余字段来代替外键。(但是修改的时候要考虑)
- 班级和专业之间(一对多)
- 专业和班级之间(多对一)
- 学生和班级之间(多对一)
- 班级和学生之间(一对多)
Hibernate的Annotation方法
ClassRoom.javapackage com.xing.hibernate_hql_annotation.entity; import javax.persistence.*; import java.util.Set; /** * Created by Administrator on 2016/8/3. * 班级 */ @Entity @Table(name = "t_class_room") public class ClassRoom { private int id; private String name ; private int grade ; //班级和学生:一对多关系 private Set<Student> stus; //班级和专业:多对一关系 private Special sepcial ; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } @OneToMany(mappedBy = "classRoom") public Set<Student> getStus() { return stus; } public void setStus(Set<Student> stus) { this.stus = stus; } @ManyToOne @JoinColumn(name = "cid") public Special getSepcial() { return sepcial; } public void setSepcial(Special sepcial) { this.sepcial = sepcial; } }
Special.java
package com.xing.hibernate_hql_annotation.entity; import javax.persistence.*; import java.util.Set; /** * Created by Administrator on 2016/8/3. * 专业 */ @Entity @Table(name = "t_sepcial") public class Special { private int id; private String name ; private String type; private Set<ClassRoom> classRooms ; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } // 当前对象在对应ClassRoom对象的属性名,它来维护关系 @OneToMany(mappedBy = "sepcial") public Set<ClassRoom> getClassRooms() { return classRooms; } public void setClassRooms(Set<ClassRoom> classRooms) { this.classRooms = classRooms; } }
Student.java
package com.xing.hibernate_hql_annotation.entity; import javax.persistence.*; /** * Created by Administrator on 2016/8/3. * 学生 */ @Entity @Table(name = "t_stu") public class Student { private int id; private String name; private String sex ; //学生和班级(多对一) private ClassRoom classRoom ; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } //设置数据库表中对应的关联的外键名称 @ManyToOne @JoinColumn(name = "cid") public ClassRoom getClassRoom() { return classRoom; } public void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; } }
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 配置数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置数据库连接驱动--> <property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 配置打印sql --> <property name="show_sql">true</property> <!-- 配置 自动完成类到数据表的转换--> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 加入实体类的映射文件--> <mapping class="com.xing.hibernate_hql_annotation.entity.Special"></mapping> <mapping class="com.xing.hibernate_hql_annotation.entity.Student"></mapping> <mapping class="com.xing.hibernate_hql_annotation.entity.ClassRoom"></mapping> </session-factory> </hibernate-configuration>
Hibernate利用xml配置文件来实现关系映射
ClassRoom.java
package com.xing.hibernate_hql_xml.entity; import java.util.Set; /** * Created by Administrator on 2016/8/3. */ public class ClassRoom { private int id; private String name; private int grade; private Set<Student> stus; private Special special; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } public Set<Student> getStus() { return stus; } public void setStus(Set<Student> stus) { this.stus = stus; } public Special getSpecial() { return special; } public void setSpecial(Special special) { this.special = special; } }
Special.java
package com.xing.hibernate_hql_xml.entity; /** * Created by Administrator on 2016/8/3. */ public class Special { private int id; private String name ; private String type; private ClassRoom classRoom ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public ClassRoom getClassRoom() { return classRoom; } public void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; } }
Student.java
package com.xing.hibernate_hql_xml.entity; /** * Created by Administrator on 2016/8/3. */ public class Student { private int id; private String name; private String sex ; private ClassRoom classRoom ; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public ClassRoom getClassRoom() { return classRoom; } public void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; } }
ClassRoom.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --> <hibernate-mapping package="com.xing.hibernate_hql_xml.entity"> <class name="ClassRoom" table="t_class_room" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="grade"/> <many-to-one name="special" column="sp_id" /> <set name="stus" inverse="true" lazy="extra"> <key column="cid"></key> <one-to-many class="Student" /> </set> </class> </hibernate-mapping>
Specail.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --> <hibernate-mapping package="com.xing.hibernate_hql_xml.entity"> <class name="com.xing.hibernate_hql_xml.entity.Special" table="t_special" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="type"/> <set name="classRoom" inverse="true" lazy="extra"> <key column="sp_id"></key> <one-to-many class="ClassRoom"></one-to-many> </set> </class> </hibernate-mapping>
Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated Nov 9, 2006 6:27:53 PM by Hibernate Tools 3.2.0.beta7 --> <hibernate-mapping package="com.xing.hibernate_hql_xml.entity"> <class name="Student" table="t_student" > <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="sex"/> <many-to-one name="classRoom" column="cid"/> </class> </hibernate-mapping>
两种方法用下面测试代码测试运行,如果能生成下面三张表,则说明配置成功了
import com.xing.util.HibernateUtil; import org.hibernate.Session; import org.junit.Test; /** * Created by Administrator on 2016/8/3. */ public class TestHql { @Test public void test01(){ Session session = null ; try { session = HibernateUtil.openSession() ; session.beginTransaction() ; session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); if(session!=null) session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(session); } } }
小记:
1. 在做映射关系的时候尽可能使用单向关联
2. 在大项目中(数据量超多)如果使用hibernate不建议使用对象关联,可以用冗余字段来代替外键。(但是修改的时候要考虑)
相关文章推荐
- Hibernate使用hbm.xml配置映射关系解析
- Hibernate3.5.4---java application的xml和annotation环境搭建(hibernate.cfg.xml配置文件说明,映射文件Student.hbm.xml说明)
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- Hibernate之关系映射的两种方式(xml映射、annotation注解映射)
- Hibernate3.5.4---java application的xml和annotation环境搭建(hibernate.cfg.xml配置文件说明,映射文件Student.hbm.xml说明
- MyBatis mapper.xml配置一对一关系映射的几种方式整理
- Hibernate关系对映-表映射基于XML配置方式
- Hibernate学习笔记 3 - 关系映射配置(基于注解)
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- Hibernate3.5.4---java application的xml和annotation环境搭建(hibernate.cfg.xml配置文件说明,映射文件Student.hbm.xml说明
- Hibernate学习笔记 2 - 关系映射配置
- java注解配置hibernate映射关系
- Hibernate学习笔记----映射继承关系
- Hibernate建立关系配置(hbm.xml)bag中cascade属性
- hibernate annotation注解方式来处理映射关系
- Hibernate 关系映射 总结整理
- hibernate笔记--继承映射关系的三种实现方式
- 整理hibernate.cfg.xml 与 applicationContext之间的配置方式
- Hibernate -- 注解(Annotation)关系映射
- hibernate映射文件 xx.hbm.xml配置映射元素详解--Hibernate映射类型