Hibernate(四)一对多映射 补充一:单向一对多关系(班级->学生)

xiaoxiao2021-02-28  56

数据库表创建

create table grade ( gid int primary key, gname varchar(20) not null, gdesc varchar(50) ); create table student ( sid int primary key, sname varchar(20) not null, sex char(2), gid int ); alter table student add constraint fk_student_gid foreign key (gid) references grade(gid);

Grade年级class

package com.imooc.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() { super(); } public Grade(String gname, String gdesc) { super(); this.gname = gname; this.gdesc = gdesc; } public Grade(int gid, String gname, String gdesc, Set<Student> students) { super(); this.gid = gid; this.gname = gname; this.gdesc = gdesc; this.students = students; }

学生student class

package com.imooc.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() { super(); } public Student(String sname, String sex) { super(); this.sname = sname; this.sex = sex; } }

Grade.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"> <hibernate-mapping > <class name="com.imooc.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" > <column name="gdesc"></column> </property> <!-- 配置单向的一对多关系 --> <set name="students" table="student" > <!--指定关联的外键列 --> <key column="gid"></key> <one-to-many class="com.imooc.entity.Student"/> </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"> <hibernate-mapping > <class name="com.imooc.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" > <column name="sex"></column> </property> </class> </hibernate-mapping>

HibernateUtil.Java class

package com.imooc.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory; private static Session session; static{ Configuration config = new Configuration().configure(); //ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); sessionFactory = config.buildSessionFactory(ssr); } //获取SessionFactory public static SessionFactory getSessionFactory(){ return sessionFactory; } //获取Session public static Session getSession(){ session = sessionFactory.openSession(); return session; } //关闭session public static void closeSession(Session session){ if(session!=null){ session.close(); } } }

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> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///imooc?useUnicode=true&characterEncoding=UTF-8</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/imooc/entity/Grade.hbm.xml"/> <mapping resource="com/imooc/entity/Student.hbm.xml"/> </session-factory> </hibernate-configuration>

//增删改查

package com.imooc.entity; import java.util.Set; import org.hibernate.Session; import org.hibernate.Transaction; import com.imooc.util.HibernateUtil; public class Test { public static void main(String[] args) { add(); //findStudentsByGrade(); //update(); //delete(); } //将学生添加到班级 public static void add(){ Grade g = new Grade("JAVA一班"," Java软件开发一班 "); Student stu1 = new Student("张三","男"); Student stu2 = new Student("慕女神","女"); //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系 g.getStudents().add(stu1); g.getStudents().add(stu2); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); //保存班级 session.save(g); //保存学生 session.save(stu1); session.save(stu2); tx.commit(); HibernateUtil.closeSession(session); } /*执行console :先新增,在修改 Hibernate: select max(gid) from grade Hibernate: select max(sid) from student Hibernate: insert into grade (gname, gdesc, gid) values (?, ?, ?) Hibernate: insert into student (sname, sex, sid) values (?, ?, ?) Hibernate: insert into student (sname, sex, sid) values (?, ?, ?) Hibernate: update student set gid=? where sid=? Hibernate: update student set gid=? where sid=?*/ //查询班级,学生信息 public static void findStudentsByGrade(){ Session session = HibernateUtil.getSession(); Grade grade = (Grade) session.get(Grade.class, 1); System.out.println(grade.getGname()+","+grade.getGdesc()); Set<Student> students= grade.getStudents(); for(Student stu:students){ System.out.println(stu.getSname()+","+stu.getSex()); } } /*执行结果console: Hibernate: select grade0_.gid as gid1_0_0_, grade0_.gname as gname2_0_0_, grade0_.gdesc as gdesc3_0_0_ from grade grade0_ where grade0_.gid=? JAVA一班, Java软件开发一班 Hibernate: select students0_.gid as gid4_0_0_, students0_.sid as sid1_1_0_, students0_.sid as sid1_1_1_, students0_.sname as sname2_1_1_, students0_.sex as sex3_1_1_ from student students0_ where students0_.gid=? 慕女神,女 张三,男*/ //将学生编号1,加入java二班 public static void update(){ Grade g = new Grade("Java二班","Java软件开发二班"); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); Student stu = (Student) session.get(Student.class,1); g.getStudents().add(stu); session.save(g); tx.commit(); HibernateUtil.closeSession(session); } /*执行结果console: Hibernate: select student0_.sid as sid1_1_0_, student0_.sname as sname2_1_0_, student0_.sex as sex3_1_0_ from student student0_ where student0_.sid=? Hibernate: select max(gid) from grade Hibernate: insert into grade (gname, gdesc, gid) values (?, ?, ?) Hibernate: update student set gid=? where sid=?*/ //删除学生2 public static void delete(){ Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); Student stu = (Student) session.get(Student.class, 2); session.delete(stu); tx.commit(); HibernateUtil.closeSession(session); } /*console执行结果: Hibernate: select student0_.sid as sid1_1_0_, student0_.sname as sname2_1_0_, student0_.sex as sex3_1_0_ from student student0_ where student0_.sid=? Hibernate: delete from student where sid=? */ }
转载请注明原文地址: https://www.6miu.com/read-63823.html

最新回复(0)