標籤:mod hibernate 單向多對一 date sch video 註解 vax figure
? 著作權聲明:本文為博主原創文章,轉載請註明出處
說明:該執行個體是通過對應檔和註解兩種方式實現的。可根據自己的需要選擇合適的方式
執行個體:
1.項目結構
2.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><groupId>org.hibernate</groupId><artifactId>Hibernate-ManyToOne</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- hibernate --><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.1.7.Final</version></dependency><!-- MySQL --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version></dependency></dependencies></project>
3.Grade.java
package org.hibernate.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import org.hibernate.annotations.GenericGenerator;@Entitypublic class Grade {@Id@GeneratedValue(generator="gid")@GenericGenerator(name="gid", strategy="native")private int gid;// 班號@Column(length=100)private String gname;// 班名private String gdesc;// 描述public Grade() {}public Grade(String gname, String gdesc) {super();this.gname = gname;this.gdesc = gdesc;}public int getGid() {return gid;}public void setGid(int gid) {this.gid = gid;}public String getGname() {return gname;}public void setGname(String gname) {this.gname = gname;}public String getGdesc() {return gdesc;}public void setGdesc(String gdesc) {this.gdesc = gdesc;}}
4.Student.java
package org.hibernate.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.GenericGenerator;@Entitypublic class Student {@Id@GeneratedValue(generator="sid")@GenericGenerator(name="sid", strategy="native")private int sid;// 學號@Column(length=100)private String sname;// 姓名@Column(length=2)private String sex;// 性別@ManyToOne(fetch=FetchType.EAGER)@Cascade(value=org.hibernate.annotations.CascadeType.SAVE_UPDATE)@JoinColumn(name="gid")private Grade grade;// 所屬班級 public Student() {}public Student(String sname, String sex, Grade grade) {this.sname = sname;this.sex = sex;this.grade = grade;}public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Grade getGrade() {return grade;}public void setGrade(Grade grade) {this.grade = grade;}}
5.Grade.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="org.hibernate.entity.Grade" table="grade"><id name="gid" type="java.lang.Integer"><column name="gid"/><generator class="native"/></id><property name="gname" type="java.lang.String"><column name="gname" length="100"></column></property><property name="gdesc" type="java.lang.String"><column name="gdesc"/></property></class></hibernate-mapping>
6.Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="org.hibernate.entity.Student" table="student"><id name="sid" type="java.lang.Integer"><column name="sid"/><generator class="native"/></id><property name="sname" type="java.lang.String"><column name="sname" length="100"/></property><property name="sex" type="java.lang.String"><column name="sex" length="2"/></property><!-- 配置單向的多對一關聯關係 --><many-to-one name="grade" cascade="save-update" column="gid" class="org.hibernate.entity.Grade"/></class></hibernate-mapping>
7.hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><!-- 配置SessionFactory --><session-factory><!-- 設定資料庫串連資訊 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///hibernate?useSSL=true&characterEncoding=UTF-8</property><property name="connection.username">root</property><property name="connection.password">***</property><!-- 配置hibernate常用屬性 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><!-- 方言 --><property name="hbm2ddl.auto">update</property><!-- 是否自動建立表結構 --><property name="show_sql">true</property><!-- 是否顯示SQL --><!-- 引入映射類 --><!-- <mapping class="org.hibernate.entity.Student"/><mapping class="org.hibernate.entity.Grade"/> --><!-- 引入對應檔 --><mapping resource="hbm/Student.hbm.xml"/><mapping resource="hbm/Grade.hbm.xml"/></session-factory></hibernate-configuration>
8.TestManyToOne.java
package org.hibernate.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.entity.Grade;import org.hibernate.entity.Student;import org.junit.After;import org.junit.Before;import org.junit.Test;public class TestManyToOne {private SessionFactory sessionFactory;private Session session;private Transaction transaction;@Beforepublic void before() {// 建立SessionFactory對象sessionFactory = new Configuration().configure().buildSessionFactory();// 擷取Session對象session = sessionFactory.openSession();// 開啟事務transaction = session.beginTransaction();}@Afterpublic void after() {// 提交事務transaction.commit();// 關閉Sessionsession.close();// 關閉SessionFactorysessionFactory.close();}@Testpublic void testAdd() {Grade grade = new Grade("Java一班", "Java應用開發一班");Student student1 = new Student("張三", "男", grade);Student student2 = new Student("李四", "男", grade);session.save(grade);session.save(student1);session.save(student2);}@Testpublic void testQuery() {Student student = session.get(Student.class, 1);System.out.println(student.getSname() + " - " + student.getSex() + " - "+ student.getGrade().getGname() + " - " + student.getGrade().getGdesc());}@Testpublic void testUpdate() {Grade grade = new Grade("Java二班", "Java應用開發二班");Student student = session.get(Student.class, 2);student.setGrade(grade);session.update(student);}@Testpublic void testDelete() {Student student = session.get(Student.class, 2);session.delete(student);}}
9.效果預覽
9.1 執行testAdd方法
9.2 執行testQuery方法
9.3 執行testUpdate方法
9.4 執行testDelete方法
參考:http://www.imooc.com/video/8675
http://www.imooc.com/video/10089
Hibernate學習之單向多對一映射