hibernate中的关系映射01一对多映射

要了解的概念:
关系
一对多
多对一
多对多
一对一
单项关联
双向关联
级联操作


需求:客户与订单的关系是一对多

准备项目2
(1)创建项目
hibernate02relation
(2)引入jar,同前一个项目
(3)复制实体、映射、配置、工具类

1、订单表(也可以后面自动创建)


Create Table

CREATE TABLE `t_order` ( 
  `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  `order_no` varchar(20) DEFAULT NULL, 
  `product_name` varchar(100) DEFAULT NULL, 
  `customer_id` bigint(20) DEFAULT NULL, 
  PRIMARY KEY (`id`), 
  KEY `FKesy3n2gc3fa0s3trrk3tvyv9a` (`customer_id`), 
  CONSTRAINT `FKesy3n2gc3fa0s3trrk3tvyv9a` FOREIGN KEY (`customer_id`) REFERENCES `t_customer` (`c_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

2、创建Order实体类
package name.yaohuan.hibernate.pojo.one2many;
/**
 * 订单(多方)
 */
public class Order {
    private Long id;
    private String orderNo;
    private String productName;

    //关联客户
    private Customer customer;
}

3、修改Customer实体类
package name.yaohuan.hibernate.pojo.one2many;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
 * 客户(一方)
 */
public class Customer{
    private Long id;
    private String name;
    private Character gender;
    private Integer age;
    private String level;
    
    //关联订单
    private Set<Order> orders = new HashSet<Order>();
}

4、在Customer配置文件中配置一对多
     <class name="Customer" table="t_customer">
         ......
         <!-- 一对多配置:属性名称 -->
         <set name="orders">
             <!-- 外键字段名称 -->
             <key column="customer_id"></key>
             <!-- 属性所属的类型 -->
             <one-to-many class="Order"/>
         </set>
     </class>

5、Order配置文件
<hibernate-mapping package="com.**.hibernate.pojo.one2many">
 
     <class name="Order" table="t_order">
         <id name="id" column="id">
             <generator class="native"></generator>
         </id>
         <property name="orderNo" column="order_no" length="20"></property>
         <property name="productName" column="product_name" length="100"></property>
         
         <!-- 多对一配置 -->
         <many-to-one name="customer" class="Customer" column="customer_id" />
     </class>
</hibernate-mapping

6、将映射文件加入hibernte.cfg.xml
        <!-- 4、*.hbm.xml文件 -->
        <mapping resource="com/**/hibernate/pojo/one2many/Customer.hbm.xml"/>
        <mapping resource="com/**/hibernate/pojo/one2many/Order.hbm.xml"/>

7、测试新增关联数据
public class  One2manyTest {
    /**
     * 需求:1个客户 2张订单
     */
    @Test
    public void testCreateOrder(){

        //准备数据
        Customer customer = new Customer();
        customer.setName("老王");
        customer.setGender('男');
        customer.setAge(18);
        customer.setLevel("VIP");

        Order o1 = new Order();
        o1.setOrderNo("210009070001");
        o1.setProductName("看透SpringMVC源代码分析与实践");

        Order o2 = new Order();
        o2.setOrderNo("210009070002");
        o2.setProductName("淘宝技术这十年");

        Session session = HibernateUtil.openSession();
        Transaction tx = session.beginTransaction();

        //建立一对多双向关系(非必须,也可以建立单项关联)
        customer.getOrders().add(o1);
        customer.getOrders().add(o2);

        o1.setCustomer(customer);
        o2.setCustomer(customer);

        //保存数据
        session.save(customer);
        session.save(o1);
        session.save(o2);

        //数据提交
        tx.commit();
        session.close();
    }
}


8、测试查询订单
/**
 * 查询操作
 */
@Test
public void testSearch(){

    Session session = HibernateUtil.openSession();
    Transaction tx = session.beginTransaction();

    //查询一个客户,关联查询订单
    Customer customer = session.get(Customer.class, 1L);
    System.out.println(customer.getName()+"的订单:");
    Set<Order> orders = customer.getOrders();
    for (Order order : orders) {
        System.out.println(order.getOrderNo()+","+order.getProductName());
    }

    tx.commit();
    session.close();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate是一个Java持久化框架,它能够将Java对象映射到数据库的表格,同时支持各种关系数据库,如MySQL、Oracle等。在Hibernate,对于一对一、一对多和多对多的关系,我们可以通过以下方式进行映射。 一对一关系:在Hibernate,可以通过主键关联和外键关联来实现一对一关系映射。主键关联是指两个实体的关联通过主键来进行,可以使用@PrimaryKeyJoinColumn注解将两个实体关联起来。外键关联是指通过一个实体引用另一个实体的主键作为外键,使用@JoinColumn注解来指定外键属性一对多关系:在Hibernate一对多关系通常通过外键关联来实现。在一的一方,使用@OneToMany注解来定义一对多关系,同时使用@JoinColumn注解指定外键属性。在多的一方,使用@ManyToOne注解来定义多对一关系,并使用@JoinColumn注解指定外键属性。 多对多关系:在Hibernate,多对多关系通常通过表来实现。在多对多的两个实体,使用@ManyToMany注解来定义多对多关系。同时,需要在创建两个外键,分别与两个实体的主键关联,并使用@JoinTable注解来指定表的表名和两个外键的列名。 总结:通过Hibernate的注解方式,可以方便地实现一对一、一对多和多对多关系映射。通过合理地使用注解,可以减少编写映射文件的工作量,提高开发效率。同时,Hibernate还提供了在运行时自动生成表结构的功能,可以根据Java实体类来动态创建或更新对应的数据库表格,从而提高系统的可维护性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值