1.创建实体类
创建学生类,宿舍类和学科类。其中学生类和宿舍类是多对一关系,学生类和学科类是多对多关系。
学生类:
package entity;
import java.util.HashSet;
import java.util.Set;
public class student {
private int stuID;
private String name;
private String sex;
private department dept;
private Set<course>courses = new HashSet<course>();
public int getStuID() {
return stuID;
}
public void setStuID(int stuID) {
this.stuID = stuID;
}
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 department getDept() {
return dept;
}
public void setDept(department dept) {
this.dept = dept;
}
public Set<course> getCourses() {
return courses;
}
public void setCourses(Set<course> courses) {
this.courses = courses;
}
}
宿舍类:
package entity;
import java.util.HashSet;
import java.util.Set;
public class department {
private int deptID;
private int room_number;
private Set<student> students = new HashSet<student>();
public int getDeptID() {
return deptID;
}
public void setDeptID(int deptID) {
this.deptID = deptID;
}
public int getRoom_number() {
return room_number;
}
public void setRoom_number(int room_number) {
this.room_number = room_number;
}
public Set<student> getStudents() {
return students;
}
public void setStudents(Set<student> students) {
this.students = students;
}
}
学科类:
package entity;
import java.util.HashSet;
import java.util.Set;
public class course {
private int courseID;
private String course_name;
private String classroom;
private Set<student> students = new HashSet<student>();
public int getCourseID() {
return courseID;
}
public void setCourseID(int courseID) {
this.courseID = courseID;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getClassroom() {
return classroom;
}
public void setClassroom(String classroom) {
this.classroom = classroom;
}
public Set<student> getStudents() {
return students;
}
public void setStudents(Set<student> students) {
this.students = students;
}
}
2.创建关联关系映射
学生:
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!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="entity.student" table="t_student">
<id name="stuID" column="stuID">
<generator class="native" />
</id>
<property name="name" column="name" length="16"/>
<property name="sex" column="sex" length="16"/>
<many-to-one name="dept" column="deptID" cascade="save-update"/>
<set name="courses" cascade="all" inverse="true">
<key column="stuID"></key>
<one-to-many class="entity.course"/>
</set>
</class>
</hibernate-mapping>
宿舍:
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!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="entity.department" table="t_department" select-before-update="true" dynamic-update="true">
<id name="deptID" column="deptID">
<generator class="native" />
</id>
<property name="room_number" column="room_number"/>
<set name="students" cascade="all" inverse="true">
<key column="deptID"></key>
<one-to-many class="entity.student"/>
</set>
</class>
</hibernate-mapping>
课程:
<?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">
<hibernate-mapping>
<class name="entity.course" table="t_course" select-before-update="true" dynamic-update="true">
<id name="courseID" column="courseID">
<generator class="native" />
</id>
<property name="course_name" column="course_name" length="100"/>
<property name="classroom" column="classroom" length="100"/>
<set name="students" cascade="all" inverse="true">
<key column="courseID"></key>
<one-to-many class="entity.student"/>
</set>
</class>
</hibernate-mapping>
3.创建核心配置文件
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!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>
<!-- 在控制台显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 连接数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 连接数据库的驱动名 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的URL -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/database01</property>
<!-- 连接数据库的用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 连接数据库的密码 -->
<property name="hibernate.connection.password">0x3137</property>
<!-- 保证每个线程有一个属于自己的Session对象 -->
<property name = "hibernate.current_session_context_class">thread</property>
<!-- 自动生成表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="entity/student.hbm.xml"/>
<mapping resource="entity/department.hbm.xml"/>
<mapping resource="entity/course.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.打开数据库
创建数据库database01,与实体类进行连接。
5.编写测试类
实现增删改查功能:
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.jws.soap.SOAPBinding.Use;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;
import dao.HibernateUtil;
import entity.course;
import entity.department;
import entity.student;
public class Main {
@Test
public void save() {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSessionFactory().getCurrentSession();
tx= s.beginTransaction();
course c = new course();
c.setCourse_name("语文");
department dept = new department();
dept.setRoom_number(101);
student stu = new student();
stu.setName("小田");
stu.setDept(dept);
stu.getCourses().add(c);
s.save(stu);
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.commit();
}
}
@Test
public void query() {
Session s = null;
Transaction tx = null;
Query<student> query = null;
try {
s = HibernateUtil.getSessionFactory().getCurrentSession();
tx= s.beginTransaction();
query = s.createQuery("from student s where s.name=:name");
query.setParameter("name", "小田");
student stu = query.list().get(0);
department dept = stu.getDept();
System.out.println(stu.getName()+" "+dept.getRoom_number()+" ");
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.commit();
}
}
@Test
public void update() {
Session s = null;
Transaction tx = null;
Query<student> query = null;
try {
s = HibernateUtil.getSessionFactory().getCurrentSession();
tx= s.beginTransaction();
query = s.createQuery("from student s where s.name=:name");
query.setParameter("name", "小田");
student stu = query.list().get(0);
stu.setName("小章");
s.update(stu);
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.commit();
}
}
@Test
public void delete() {
Session s = null;
Transaction tx = null;
Query<student> query = null;
try {
s = HibernateUtil.getSessionFactory().getCurrentSession();
tx= s.beginTransaction();
query = s.createQuery("from student s where s.name=:name");
query.setParameter("name", "小章");
student stu = query.list().get(0);
department dept = stu.getDept();
s.delete(dept);
tx.commit();
} catch (Exception e) {
if(tx!=null)
tx.commit();
}
}
}