大致流程:①建一个java项目,建立一个lib目录,将相关的jar包导入。
②创建一个hibernate的工具类,获得一个会话工厂。
③配置hibernate配置文件hibernate.cfg.xml。
④创建实体类grade和student
⑤在数据库中建表并设置关联关系
⑥配置映射文件grade.hbm.xml和student.hbm.xml
⑦创建测试类
package com.xatu.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class HibernateUtil { private static SessionFactory sessionFactory; private static Session session; static{ //创建configuration对象,读取hibernate.cfg.xml文件,完成初始化。 Configuration config = new Configuration().configure(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //创建工厂回话对象 sessionFactory = config.buildSessionFactory(serviceRegistry); } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ session = sessionFactory.openSession(); return session; } public static void closeSession(Session session){ if(session!=null){ session.close(); } } }
<?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.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url"> <![CDATA[ jdbc:mysql://localhost:3306/xatu?useUnicode=true&characterEncoding=utf8 ]]> </property> <property name="connection.username">root</property> <property name="connection.password">mysql</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl_auto">update</property> <mapping resource="com/xatu/entity/Grade.hbm.xml"/> <mapping resource="com/xatu/entity/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
<?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="com.xatu.entity.Grade" table="grade"> <id name="gid" column="gid" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="gname" type="java.lang.String"> <column name="gname" length="20" not-null="true"></column> </property> <property name="gdesc" type="java.lang.String"> <column name="gdesc"></column> </property> <!-- 配置单向的一对多关联关系 --> <set name="students" table="student"> <!-- 指定关联的外键类 --> <key column="gid"></key> <one-to-many class="com.xatu.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="com.xatu.entity.Student" table="student"> <id name="sid" column="sid" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="sname" type="java.lang.String"> <column name="sname" length="20" not-null="true"></column> </property> <property name="sex" type="java.lang.String"> <column name="sex"></column> </property> </class> </hibernate-mapping>
package com.xatu.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Grade implements Serializable { private int gid; private String gname; private String gdesc;//班级描述 //在一方创建多方的集合 private Set<Student> students = new HashSet<Student>(); 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; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } public Grade(String gname, String gdesc) { //super(); this.gname = gname; this.gdesc = gdesc; } public Grade() { } }
package com.xatu.entity; import java.io.Serializable; public class Student implements Serializable { private int sid; private String sname; private String sex; 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 Student(String sname, String sex) { super(); this.sname = sname; this.sex = sex; } public Student(){ } }
package com.xatu.entity; import java.util.Set; import org.hibernate.Session; import org.hibernate.Transaction; import com.xatu.util.HibernateUtil; public class Test { /** * 单向一对多关联关系(班级--->学生) */ public static void main(String[] args) { //addStudent(); //findStudentByGrade(); //updateStudent(); deleteStudent(); } //添加学生 public static void addStudent(){ Grade g = new Grade("java一班", "软件开发专业"); Student s1 = new Student("张三", "男"); Student s2 = new Student("李四", "女"); g.getStudents().add(s1); g.getStudents().add(s2); Session session = HibernateUtil.getSession(); Transaction t = session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); t.commit(); HibernateUtil.closeSession(session); } //从班级中查找学生 public static void findStudentByGrade(){ Session session = HibernateUtil.getSession(); //获取session对象 Grade g = (Grade) session.get(Grade.class, 1); //获取班级信息 System.out.println(g.getGname()+","+g.getGdesc()); Set<Student> students = g.getStudents(); //获取班级学生信息,用集合保存 for(Student stu:students){ System.out.println(stu.getSname()+","+stu.getSex()); } } //修改学生信息 public static void updateStudent(){ Grade g = new Grade("java二班", "软件维护专业"); //创建新的班级 Session session = HibernateUtil.getSession(); Transaction t = session.beginTransaction(); //开启事务 Student stu = (Student) session.get(Student.class, 1); //获取学号为1的学生信息 g.getStudents().add(stu); session.save(g); t.commit(); HibernateUtil.closeSession(session); } //删除学生 public static void deleteStudent(){ Session session = HibernateUtil.getSession(); Transaction t = session.beginTransaction(); Student stu = (Student) session.get(Student.class, 2); session.delete(stu); t.commit(); HibernateUtil.closeSession(session); } }