Hibernate 学习代码/笔记(四)(一对多)
2015-12-26 13:21
197 查看
先来张代结果码图吧..
![](https://img-blog.csdn.net/20151226132116323?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
好了.....首先实体类
班级类
学生类:
hibernate实体类配置文件
hibernate 主配置文件
hibernate getSession
测试代码
over...
好了.....首先实体类
班级类
package com.hibernate.entity; import java.io.Serializable; import java.util.HashSet; import java.util.Set; /** * 单向一对多 * 一个班级对应多个学生 * @author cyx * */ public class Grade implements Serializable { private int gid; private String gname; private String gdesc; //在一方定义一个多方的集合 private Set<Student> student = new HashSet<Student>(); public Set<Student> getStudent() { return student; } public void setStudent(Set<Student> student) { this.student = 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 Grade(String gname, String gdesc) { // super(); this.gname = gname; this.gdesc = gdesc; } public Grade() { // super(); } }
学生类:
package com.hibernate.entity; /** * * @author cyx * */ public class Student { 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; } @Override public String toString() { return "Student [sid=" + sid + ", sname=" + sname + ", sex=" + sex + "]"; } public Student(String sname, String sex) { // super(); this.sname = sname; this.sex = sex; } public Student() { // super(); } }
hibernate实体类配置文件
<?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.hibernate.entity.Grade" table="grade" > <id name="gid" type="integer" column="gid"> <generator class="increment"/> </id> <property name="gname" type="string" column="gname" not-null="true" length="20"></property> <property name="gdesc" column="gdesc"></property> <!-- 配置单向一对多关联关系 --> <set name="student" table="student"> <key column="gid"></key> <!-- 指定关联的外键 --> <one-to-many class="com.hibernate.entity.Student"/> </set> <!-- set元素常用属性: name: 映射类属性的名称 也就是Garade实体类中,添加的student set集合 table: 关联类的目标数据库 lazy: 指定关联对象是否使用延时加载 默认为 proxy inverse:表示双向关联中被动的一方 默认为 false --> </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.hibernate.entity.Student" table="student"> <id name="sid" type="int" column="sid"> <generator class="increment"/> </id> <property name="sname" type="java.lang.String" column="sname" length="20" not-null="true"></property> <property name="sex" type="java.lang.String" column="sex"></property> </class> </hibernate-mapping>
hibernate 主配置文件
<?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.username">root</property> <!-- 数据库用户名 --> <property name="connection.password">1234</property> <!-- 数据库密码 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 数据库驱动 --> <!-- 数据库地址 --> <property name="connection.url">jdbc:mysql://localhost:3306/test?user=root&password=1234&useUnicode=true&characterEncoding=UTF-8</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- mysql 数据库方言 --> <property name="show_sql">true</property> <property name="format_sql">false</property> <property name="hbm2ddl.auto">update</property> <mapping resource="com/hibernate/entity/Grade.hbm.xml"/> <mapping resource="com/hibernate/entity/Student.hbm.xml"/> </session-factory> </hibernate-configuration>
hibernate getSession
package com.hibernate.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 config = new Configuration().configure(); //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //创建会话工厂对象 sessionFactory = config.buildSessionFactory(serviceRegistry); //创建会话对象 // session = sessionFactory.openSession(); } //获取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(); } } }
测试代码
package com.hibernater.test; import java.util.Set; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import com.hibernate.entity.Grade; import com.hibernate.entity.Student; import com.hibernate.util.HibernateUtil; public class TestOneToMany { private Session session; private HibernateUtil hibernateUtil; private Transaction transaction; /** * 添加学生 */ @Test public void add(){ try{ session = hibernateUtil.getSession(); transaction = session.beginTransaction(); Grade grade = new Grade("JAVA一班", "软件开发"); Student student = new Student("小明", "男"); Student student2 = new Student("大明", "女"); //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关系链接 grade.getStudent().add(student); grade.getStudent().add(student2); session.save(grade); session.save(student); session.save(student2); transaction.commit(); }catch(Exception e){ transaction.rollback(); e.printStackTrace(); }finally{ if(session != null){ hibernateUtil.closeSession(session); } } } /** * 查询班级中包含的学生 */ @Test public void findStudentByGrade(){ session = hibernateUtil.getSession(); Grade grade = (Grade)session.get(Grade.class, 1); System.out.println(grade.getGname()+","+grade.getGdesc()); Set<Student> student = grade.getStudent(); for (Student student2 : student) { System.out.println(student2.getSname()+","+student2.getSex()); } } /** * 修改学生所属班级 */ @Test public void update(){ try{ session = hibernateUtil.getSession(); transaction = session.beginTransaction(); Grade grade = new Grade("PHP一班","软件开发"); Student studet = (Student)session.get(Student.class, 1); grade.getStudent().add(studet); session.save(grade); transaction.commit(); }catch(Exception e){ transaction.rollback(); e.printStackTrace(); }finally{ if(session != null){ hibernateUtil.closeSession(session); } } } /** * 删除学生 */ @Test public void delete(){ try{ session = hibernateUtil.getSession(); Transaction transaction = session.beginTransaction(); Student student = (Student)session.get(Student.class, 1); session.delete(student); transaction.commit(); }catch(Exception e){ e.printStackTrace(); transaction.rollback(); }finally{ if(session != null){ hibernateUtil.closeSession(session); } } } }
over...
相关文章推荐
- C语言学习笔记----伊能C语言学习笔记----如何在一个文件中使用另一个文件中定义的变量呢??
- Java基础学习总结(1)——equals方法
- Java基础学习总结(1)——equals方法
- 25个Java机器学习工具&库
- Eclipse安装WindowBuilder
- 实战c++中的智能指针unique_ptr系列-- unique_ptr的get_deleter方法(自定义删除器)
- 实战c++中的智能指针unique_ptr系列-- unique_ptr的get_deleter方法(自定义删除器)
- eclipse--.classpath .project文件的含义
- Weiphp随笔,百度天气API接口
- Java随机生成验证码
- 【Java学习笔记】——Statement & PrepareStatement
- MAC上安装JAVA 1.8,安装不成功,以及配置JAVA_HOME遇到的问题
- R语言的科学编程与仿真 chapter 4 答案
- google大牛Jeffrey Dean
- java.lang.String源码分析(1)
- 核心编程答案(第二章)(自编)
- Java+MySQL图书管理系统
- Java系列: JAVA字符串格式化-String.format()的使用(zz)
- java编码解码过程
- C++ string的遍历