数据库的设计及hibernate实体映射

本文介绍了一个商品案例数据库的设计方案,包括管理员表、客户表、商品表等,详细说明了各表之间的关系,并提供了使用Hibernate进行实体映射的具体代码。

以《商品案例数据库为例》

首先

商品案例数据库设计:

管理员表:

        id     :递增序列

        name  :管理员

        pass   :密码

客户表

        id     :递增序列

        name  :登录名称

        pass   :登录密码

        sex    : 性别        //enum

        email  :注册邮箱   

        rdate   :注册日期    //BeanUtils

        state   :是否被激活的状态  0 1

商品表

        id     :递增序列

        name  : 商品的名称

        type   : 商品的类型

        price   :商品的价格

订单表:

        Id         :递增序列

        number    :订单编号

  customerid  :客户名称

        odate      :订单时间

        state       :订单的状态 //已发货  未发货  0 1

        ostate      :确认订单是否订购             0 1

    订单明细表

        id

        goodid   :商品的名称

        num     :商品数量

        total     :商品的总价格

        ordersid  :订单

一张订单可以有多个商品,一个商品可以有多个订单

所以:订单表和商品表是多对多的关系

一个顾客可以有多个订单,一个订单只能属于一个顾客

所以:顾客表和订单表是一对多的关系

 

要实现Hibernate实体映射首先要导入hibernate所需要的包

 

接下来用hibernate的映射实现数据表的生成

首先先生成管理员表

代码如下:

public class Admin implements Serializable{
       private static final long serialVersionUID = 1L;
       private int id;
       private String name;
       private String pass;
       public Admin() {}
       public Admin(String name, String pass) {
           this.name = name;
           this.pass = pass;
       }
      省略 Get,set方法
}
映射文件中的代码:

<hibernate-mapping>
       <class name="cn.csdn.domain.Admin" table="admins" catalog="db">

             <id name="id">

             <generator class="native"/>

             </id>
             <property name="name" type="string" length="30"/>

             <property name="pass" type="string" length="12"/>

       </class>
</hibernate-mapping>
接下来生成顾客表和订单表

       顾客表:顾客表和订单表是一对多的关系

public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
    private String pass;
    private Sex sex; //enum

    private String email;
    private Date rdate; //BeanUtils

    private int state;
    private Set<Orders> orders = new HashSet<Orders>();
    public Customer(String name, String pass, Sex sex, String email,
           Date rdate, int state, Set<Orders> orders) {
       this.name = name;
       this.pass = pass;
       this.sex = sex;
       this.email = email;
       this.rdate = rdate;
       this.state = state;
       this.orders = orders;
    }
    public Customer() {}
省略 Get,set方法
}
映射文件中的代码:

  <class name="cn.csdn.domain.Customer" table="customers" catalog="db">

       <id name="id">

          <generator class="native"/>

       </id>
       <property name="name" type="string" length="30" />

       <property name="pass" type="string" length="12" />

       <property name="sex" type="string" length="4" />

       <property name="email" type="string" length="30" />

       <property name="rdate" type="timestamp" />

       <property name="state" type="integer" />

     <set name="orders" table="orders">

           <key column="cid" />//cid是订单表的外键,顾客表的主键
           <one-to-many class="cn.csdn.domain.Orders" />

     </set>
    </class>
订单表:

顾客表和订单表是一对多的关系;

        订单表和商品表是多对多的关系,所以要加一个表,变成两一对多的实体映射

        订单表和订单明细表是一对多的关系,商品表和订单明细表是一对多的关系

所以就加了一个订单明细表

public class Orders implements Serializable{
    private static final long serialVersionUID = 1L;
    private int id;
    private String number;
    private Customer customer;
    private Date odate;
    private int state;
    private int Qstate;
    private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();

 

    public Orders() { }
    public Orders(int id, String number, Customer customer, Date odate,
           int state, int qstate, Set<OrdersItem> ordersItem) {
       this.id = id;
       this.number = number;
       this.customer = customer;
       this.odate = odate;
       this.state = state;
       Qstate = qstate;
       this.ordersItem = ordersItem;
    }

省略 Get,set方法
}
映射文件中的代码:

<class name="cn.csdn.domain.Orders" table="orders" catalog="db">

       <id name="id">

          <generator class="native"/>

       </id>
       <property name="number" type="string" length="30"/>

 <many-to-one name="customer"

class="cn.csdn.domain.Customer" column="cid"/>

//订单表和顾客表是多对一的关系
       <property name="odate" type="timestamp" />

       <property name="state" type="integer" />

       <property name="Qstate" type="integer" />

       <set name="ordersItem">

         <key column="oid"/>//订单明细表中的oid外键是订单表的主键
         <one-to-many class="cn.csdn.domain.OrdersItem"/>

       //订单表和订单明细表是一对多的关系
       </set>
    </class>

商品表:

一张订单可以有多个商品,一个商品可以有多个订单

所以:订单表和商品表是多对多的关系

订单明细表和商品表是多对一的关系

public class Goods implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
    private String type;
    private double price;
    private Set<OrdersItem> ordersItem = new HashSet<OrdersItem>();
 

    public Goods() {}
    public Goods(String name, String type, double price,
           Set<OrdersItem> ordersItem) {
       this.name = name;
       this.type = type;
       this.price = price;
       this.ordersItem = ordersItem;
    }

省略 Get,set方法
 

}
映射文件中的代码:

<class name="cn.csdn.domain.Goods" table="goods" catalog="db">

       <id name="id">

          <generator class="native"/>

       </id>
       <property name="name" type="string" length="50"/>

       <property name="type" type="string" length="40"/>

       <property name="price" type="double"/>

       <set name="ordersItem">

         <key column="gid"/>

         <one-to-many class="cn.csdn.domain.OrdersItem"/>

       </set>
    </class>

订单明细表:

public class OrdersItem implements Serializable{
    private static final long serialVersionUID = 1L;
    private int id;
    private Goods goods;
    private int num;
    private double total;
    private Orders orders;
    public OrdersItem() {}
public OrdersItem(Goods goods, int num, double total, Orders orders){
       this.goods = goods;
       this.num = num;
       this.total = total;
       this.orders = orders;
    }
省略 Get,set方法
}
映射文件中的代码:

<class name="cn.csdn.domain.OrdersItem" table="ordersItems"

       catalog="db">

       <id name="id">

           <generator class="native" />

       </id>
<many-to-one name="goods" class="cn.csdn.domain.Goods"

           column="gid" />

       <property name="num" type="integer" />

       <property name="total" type="double" />

       <many-to-one name="orders" class="cn.csdn.domain.Orders"

           column="oid" />

</class>

总结:一方主键做多方外键,一方用set集合多方用一方对象

 

AI 代码审查Review工具 是一个旨在自动化代码审查流程的工具。它通过集成版本控制系统(如 GitHub 和 GitLab)的 Webhook,利用大型语言模型(LLM)对代码变更进行分析,并将审查意见反馈到相应的 Pull Request 或 Merge Request 中。此外,它还支持将审查结果通知到企业微信等通讯工具。 一个基于 LLM 的自动化代码审查助手。通过 GitHub/GitLab Webhook 监听 PR/MR 变更,调用 AI 分析代码,并将审查意见自动评论到 PR/MR,同时支持多种通知渠道。 主要功能 多平台支持: 集成 GitHub 和 GitLab Webhook,监听 Pull Request / Merge Request 事件。 智能审查模式: 详细审查 (/github_webhook, /gitlab_webhook): AI 对每个变更文件进行分析,旨在找出具体问题。审查意见会以结构化的形式(例如,定位到特定代码行、问题分类、严重程度、分析和建议)逐条评论到 PR/MR。AI 模型会输出 JSON 格式的分析结果,系统再将其转换为多条独立的评论。 通用审查 (/github_webhook_general, /gitlab_webhook_general): AI 对每个变更文件进行整体性分析,并为每个文件生成一个 Markdown 格式的总结性评论。 自动化流程: 自动将 AI 审查意见(详细模式下为多条,通用模式下为每个文件一条)发布到 PR/MR。 在所有文件审查完毕后,自动在 PR/MR 中发布一条总结性评论。 即便 AI 未发现任何值得报告的问题,也会发布相应的友好提示和总结评论。 异步处理审查任务,快速响应 Webhook。 通过 Redis 防止对同一 Commit 的重复审查。 灵活配置: 通过环境变量设置基
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器的状态空间平均模型的建模策略。该方法通过数学建模手段对直流微电网系统进行精确的状态空间描述,并对其进行线性化处理,以便于系统稳定性分析与控制器设计。文中结合Matlab代码实现,展示了建模与仿真过程,有助于研究人员理解和复现相关技术,推动直流微电网系统的动态性能研究与工程应用。; 适合人群:具备电力电子、电力系统或自动化等相关背景,熟悉Matlab/Simulink仿真工具,从事新能源、微电网或智能电网研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网的动态建模方法;②学习DC-DC变换器在耦合条件下的状态空间平均建模技巧;③实现系统的线性化分析并支持后续控制器设计(如电压稳定控制、功率分配等);④为科研论文撰写、项目仿真验证提供技术支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐步实践建模流程,重点关注状态变量选取、平均化处理和线性化推导过程,同时可扩展应用于更复杂的直流微电网拓扑结构中,提升系统分析与设计能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值