Dept实体类

  1. public class Dept {
  2. private Integer deptno;
  3. private String deptname;
  4. public Set<Emp> getEmps() {
  5. return emps;
  6. }
  7. public void setEmps(Set<Emp> emps) {
  8. this.emps = emps;
  9. }
  10. private Set<Emp> emps=new HashSet<Emp>();
  11. public Integer getDeptno() {
  12. return deptno;
  13. }
  14. public void setDeptno(Integer deptno) {
  15. this.deptno = deptno;
  16. }
  17. public String getDeptname() {
  18. return deptname;
  19. }
  20. public void setDeptname(String deptname) {
  21. this.deptname = deptname;
  22. }
  23. }

Emp实体类

  1. public class Emp {
  2. private Integer empno;
  3. private String empname;
  4. //植入部门单个对象
  5. private Dept dept;
  6. public Integer getEmpno() {
  7. return empno;
  8. }
  9. public void setEmpno(Integer empno) {
  10. this.empno = empno;
  11. }
  12. public String getEmpname() {
  13. return empname;
  14. }
  15. public void setEmpname(String empname) {
  16. this.empname = empname;
  17. }
  18. public Dept getDept() {
  19. return dept;
  20. }
  21. public void setDept(Dept dept) {
  22. this.dept = dept;
  23. }
  24. }

Dept.hbm.xml小配置

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.hibernate.day1228">
  6. <!--实体 name=实体端的内容 column=DB端的内容-->
  7. <class name="Dept" table="Dept" schema="zyx">
  8. <!--和底层数据表对应的主键 业务意义-->
  9. <id name="deptno" column="deptno">
  10. <!--主键生成策略 :assigned:程序员手动给值-->
  11. <generator class="native"/>
  12. </id>
  13. <property name="deptname" column="deptname"></property>
  1. <!-- 一对多 1个部门 多个员工-->
  1. <set name="emps" cascade="save-update" inverse="true"> <key column="deptno"></key> <one-to-many class="Emp"></one-to-many> </set> </class> </hibernate-mapping>

Emp.hbm.xml小配置

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.hibernate.day1228">
  6. <!--实体 name=实体端的内容 column=DB端的内容-->
  7. <class name="Emp" table="EMP" schema="zyx">
  8. <!--和底层数据表对应的主键 业务意义-->
  9. <id name="empno" column="empno">
  10. <!--主键生成策略 :assigned:程序员手动给值-->
  11. <generator class="native"/>
  12. </id>
  13. <property name="empname" column="empname"></property>
  14. <!-- 多对一 emp多的一方 dept一的一方
  1. name:再多的一方植入的一的一方的对象名
    class:再多的一方植入的一德一方的类型名
    column:在当前分析的对象对应的底层表的外列的值
  1. --> <many-to-one name="dept" class="Dept" column="deptno"></many-to-one> </class> </hibernate-mapping>

hibernate.cfg.xml大配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5.  
  6. <hibernate-configuration>
  7. <!--创建Session的基础配置-->
  8. <session-factory>
  9. <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  10. <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
  11. <property name="connection.username">zyx</property>
  12. <property name="connection.password">zyx</property>
  13. <!-- SQL dialect (方言)-->
  14. <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
  15. <!-- Echo all executed SQL to stdout 在控制台打印sql -->
  16. <property name="show_sql">true</property>
  17. <!--格式化SQL-->
  18. <property name="format_sql">true</property>
  19. <!-- Drop and re-create (重新创建)the database schema(架构) on startup (启动)
  20. 是否根据hbm.xml自动建表 建表的策略 update create
  21. -->
  22. <property name="hbm2ddl.auto">update</property>
  23. <!--关联小配置 -->
  24.  
  25. <mapping resource="cn/hibernate/day1228/Dept.hbm.xml"/>
  26. <mapping resource="cn/hibernate/day1228/Emp.hbm.xml"/>
  27. </session-factory>
  28.  
  29. </hibernate-configuration>

测试

  1. public class Test20171228sql {
  2. Configuration cfg;
  3. Session session;
  4. Transaction tx;
  5. SessionFactory factory;
  6. @Before
  7. public void myBefore(){
  8. //创建配置对象
  9. cfg=new Configuration().configure();
  10. // 2.根据配置对象创建SessionFactory
  11. factory=cfg.buildSessionFactory();
  12. //3.根据SessionFactory去创建Session
  13. session= factory.openSession();
  14. //3.5在Session创建后开启事务 xxx0001 xxxxx003
  15. tx= session.beginTransaction();
  16. }
  17. //关联查询 多对一单向关联
  18. @Test
  19. public void t5(){
  20. //提供一个员工的编号
  21. Emp emp=session.load(Emp.class,1);
  22. System.out.println(emp.getEmpname());
  23. //隶属的部门
  24. System.out.println(emp.getDept().getDeptname());
  25. tx.commit();
  26. session.close();
  27. }
  28. //添加部门的同时添加员工
  29. @Test
  30. public void t7(){
  31. Dept dept=new Dept();
  32. dept.setDeptname("nv部");
  33. Emp emp=new Emp();
  34. emp.setEmpname("666");
  35. emp.setDept(dept);
  36. //将部门的引入绑定到员工对象的一个属性上
  37. dept.getEmps().add(emp);
  38. session.save(dept);
  39. tx.commit();
  40. }
  41. //修改员工表的部门编号
  42. @Test
  43. public void t10(){
  44. Emp emp=(Emp)session.get(Emp.class,1);
  45. Dept dept=(Dept) session.get(Dept.class,1);
  46. emp.setDept(dept);
  47. tx.commit();
  48. session.close();
  49. }
  50. //一队多双向关联
  51. @Test
  52. public void t6(){
  53. //可以通过部门获取该部门下所有员工(因为设置了从部门到员工的一对多的关联)
  54. String hql="from Dept";
  55. Query query=session.createQuery(hql);
  56. List<Dept> list=query.list();
  57. for (Dept dept:list){
  58. System.out.println(dept.getDeptname()+"=============");
  59. //部门中有哪些员工
  60. for (Emp emp:dept.getEmps()){
  61. System.out.println(emp.getEmpname());
  62. }
  63. System.out.println("=========End================");
  64. }
  65. //可以通过某个员工获取该员工所在的部门(因为设置了从员工到部门的多对一的关联)
  66. Emp emp=session.load(Emp.class,1);
  67. System.out.println(emp.getDept().getDeptname());
  68. tx.commit();
  69. session.close();
  70. }
  71. }

 

版权声明:本文为spghs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/spghs/p/8136534.html