Hibernate表中数据多对多

Hibernate表中数据多对多

标签: JAVA框架


学生和课程多对多的练习

订单(订单id 订单名称)和商品的关系 一个订单可以有多个商品  一个商品可以在多个订单中

1 生成一个新的订单,并添加3个新商品
2 生成一个新的订单,并添加2个已经存在商品
3 把某个订单的一个商品替换为另一个新的商品
4 把某个订单的一个商品替换为另一个已经存在的商品
5 删除某个订单中的所有商品

学习过程

第一步创建工程HomeWork1219,导入jar包

第二步在src目录下创建hibernate.cfg.xml

第三步配置hibernate.cfg.xml文件

hibernate.cfg.xml文件的配置信息
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>
    <session-factory>
    <!-- 这里配置数据库相关信息 -->
    <property name="connection.username">root</property>
    <property name="connection.password">123456</property>
    <property name="connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="connection.url">
        jdbc:mysql://localhost:3306/jdbc03
    </property>
    <property name="dialect">
        org.hibernate.dialect.MySQLDialect
    </property>
    <!-- update每次hibernate启动的时候,检查表是否存在,如果不存在,创建,如果存在,则什么都不做 -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 这里配置可持续化映射信息 -->
    <mapping resource="com/cd/domain/Goods.hbm.xml"/>
    <mapping resource="com/cd/domain/Order.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>

第四步,创建可持续化类Goods,Orders

1>Goods
package com.cd.domain;
import java.util.Set;
public class Goods {
    private int gid;
    private String gname;
    private String gdescription;
    //写Set集合用于保存关联关系
    private Set<Orders> orders;
    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 getGdescription() {
        return gdescription;
    }
    public void setGdescription(String gdescription) {
        this.gdescription = gdescription;
    }
    public Set<Orders> getOrders() {
        return orders;
    }
    public void setOrders(Set<Orders> orders) {
        this.orders = orders;
    }
}
2>Order
package com.cd.domain;
import java.util.Set;
public class Orders {
    private int oid;
    private String oname;
    private String odescription;
    //写Set集合用于保存关联关系
    private Set<Goods> goods;
    public int getOid() {
        return oid;
    }
    public void setOid(int oid) {
        this.oid = oid;
    }
    public String getOname() {
        return oname;
    }
    public void setOname(String oname) {
        this.oname = oname;
    }
    public String getOdescription() {
        return odescription;
    }
    public void setOdescription(String odescription) {
        this.odescription = odescription;
    }
    public Set<Goods> getGoods() {
        return goods;
    }
    public void setGoods(Set<Goods> goods) {
        this.goods = goods;
    }
}

第五步,创建可持续化类的映射(在于可持续化类相同的包下)

1>Goods.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.cd.domain.Goods" table="goods">
<id name="gid">
<generator class="increment"></generator>
</id>
<property name="gname" length="20"></property>
<property name="gdescription" length="50"></property>
<!--  用set集合配置多对多关系 column name指的是表中列的名字 即good_order表中储存的列的名字 -->
<set name="orders" table="good_order" cascade="all">
<key>
<column name="gid"></column>
</key>
<many-to-many class="com.cd.domain.Orders" column="oid"></many-to-many>
</set>
</class>
</hibernate-mapping>
2>Order.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.cd.domain.Orders" table="orders">
<id name="oid">
<generator class="increment"></generator>
</id>
<property name="oname" length="20"></property>
<property name="odescription" length="50"></property>
<!--  用set集合配置多对多关系 column name指的是表中列的名字 即good_order表中储存的列的名字 -->
<set name="goods" table="good_order" cascade="all">
<key>
<column name="oid"></column>
</key>
<many-to-many class="com.cd.domain.Goods" column="gid"></many-to-many>
</set>
</class>
</hibernate-mapping>

第六步,创建一个CreateTable.java的测试类

用这个测试类来测试是否能建立表
package com.cd.db;
import org.hibernate.cfg.Configuration;
public class CreateTable {
    public static void main(String[] args){
        Configuration configuration = new Configuration();
        configuration.configure();
        configuration.buildSessionFactory();
    }
}

第七步,写完成数据功能的类ManytoManyDao.java

目标功能
1 生成一个新的订单,并添加3个新商品
2 生成一个新的订单,并添加2个已经存在商品
3 把某个订单的一个商品替换为另一个新的商品
4 把某个订单的一个商品替换为另一个已经存在的商品
5 删除某个订单中的所有商品

package com.cd.dao;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cd.domain.Goods;
import com.cd.domain.Orders;
import com.cd.util.HibernateUtil;

public class ManytoManyTest {
    public static void main(String[] args){
        //save3goodorder();
        //save2goodorder();
        //tihuangoods();
        //tihuan2goods();
        del();
    }
    //  5 删除某个订单中的所有商品
    private static void del() {
        // TODO Auto-generated method stub
        Session session = HibernateUtil.getSession();
        Transaction transaction =  session.beginTransaction();
        Orders order2 = (Orders)session.get(Orders.class, 2);
        order2.getGoods().clear();
        transaction.commit();
        session.close();
    }
    //  4 把某个订单的一个商品替换为另一个已经存在的商品
    private static void tihuan2goods() {
        // TODO Auto-generated method stub
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Goods good1 = (Goods)session.get(Goods.class, 1);
        Goods good4 = (Goods)session.get(Goods.class, 4);
        Orders order2 = (Orders)session.get(Orders.class, 2);
        //旧的订单拥有商品集合,所以可以直接对集合进行操作,无需新集合
        order2.getGoods().remove(good4);
        order2.getGoods().add(good1);
        transaction.commit();
        session.close();
    }
    //  3 把某个订单的一个商品替换为另一个新的商品
     private static void tihuangoods() {
        // TODO Auto-generated method stub
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Goods good4 = new Goods();
        good4.setGname("商品4");
        good4.setGdescription("商品4描述");
        Goods good1 = (Goods)session.get(Goods.class, 1);
        Orders order2 = (Orders)session.get(Orders.class, 2);
        //旧的订单拥有商品集合,所以可以直接对集合进行操作,无需新集合
        order2.getGoods().remove(good1);
        order2.getGoods().add(good4);
        //也无需用save方法提交保存
        transaction.commit();
        session.close();
    }

    //  2 生成一个新的订单,并添加2个已经存在商品
    private static void save2goodorder() {
        // TODO Auto-generated method stub
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Orders order2 = new Orders();
        order2.setOname("订单2");
        order2.setOdescription("订单2描述");
        Set<Goods> goods = new HashSet<Goods>();
        Goods good1 = (Goods)session.get(Goods.class, 1);
        Goods good2 = (Goods)session.get(Goods.class, 2);
        goods.add(good1);goods.add(good2);
        //创建新订单放入商品时需要一个确定的集合
        order2.setGoods(goods);
        session.save(order2);
        transaction.commit();
        session.close();
    }

    //  1 生成一个新的订单,并添加3个新商品
    private static void save3goodorder() {
        // TODO Auto-generated method stub
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Orders order1 = new Orders();
        order1.setOname("订单1");
        order1.setOdescription("订单1描述");
        Set<Goods> goods = new HashSet<Goods>();
        for(int i=0;i<3;i++){
            Goods good = new Goods();
            good.setGname("商品"+(i+1));good.setGdescription("商品描述"+(i+1));
            goods.add(good);
        }
        //创建新订单放入商品时需要一个确定的集合
        order1.setGoods(goods);
        session.save(order1);
        transaction.commit();
        session.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值