关系映射

根据学习到的资料缕一缕

hibernate 5.x的sessionfactory创建:
变成了:

        Configuration conf = new Configuration().configure("这里可以写cfg文件路径");
        ServiceRegistry  serviceRegistry = newStandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
        SessionFactory factory = conf.buildSessionFactory();
        //这里要注意的是最好使用getCurrentSession来获取Session,因为这样会在事务完结时关闭session。
        Session sess = factory.getCurrentSession();

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <!-- 通常,一个session-factory节点代表一个数据库 -->
    <session-factory>

        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">tiger</property>


        <!-- 2. 其他相关配置 -->
        <!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 2.2 格式化sql -->
        <property name="hibernate.format_sql">true</property>
        <!-- 2.3 自动建表 
        这里的create是指有没有表,每次都删掉了重新创建,一般的话是填update,
        有的话就不创建,没有的话就新创建一个,如果实体类新增苏醒,那么会相应的
        更新数据库的表结构,删除属性的话不会影响表字段
        -->
        <property name="hibernate.hbm2ddl.auto">create</property>

        <!-- 具体为什么这样写现在不是很懂,但update需要加上这个才有效,
        这时就需要加上这个属性,scott是指哪个数据库,由于是orcl所以写成用户名 -->
        <property name="hibernate.default_schema">scott</property>

        <!-- 3. 加载所有映射 -->
        <mapping class="com.emiya.sshFreamWork.entity.Blog" />
        <mapping class="com.emiya.sshFreamWork.entity.UsrEnty" />

    </session-factory>
</hibernate-configuration>

xml文件映射

hibernate的映射关系大致分为以下三种:

1.一对一
2.一对多
3.多对多

附上cfg配置

<?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">

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/testhibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <!-- 
            <property name="hibernate.hbm2ddl.auto">create</property>
         -->
        <mapping resource="entity\idCard.hbm.xml"/>
        <mapping resource="entity\pepole.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

首先是一对一:
以人和身份证举例,一个人只能对应一张身份证,一张身份证对应一个人,下面以把关系交给Pepole类来维护为例

Pepole类:

package entity;

public class Pepole {
    private int id;
    private String name;

    private IdCard card;//用于维护跟IdCard类的关系

    public IdCard getCard() {
        return card;
    }
    public void setCard(IdCard card) {
        this.card = card;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

IdCard类:

public class IdCard {
    private int id;
    private String number;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }

Pepole映射文件配置:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
    <class name="entity.Pepole" table="t_pepole">  
        <id name="id">   
            <generator class="foreign">
                <param name="property">card</param>
            </generator>  
        </id>  
        <property name="name"></property>
        <!--这里的constrained表示当前主键 参照指定属性的id IdCard是pepole的外键-->
        <one-to-one name="card" constrained="true"></one-to-one>

    </class>  
</hibernate-mapping>

IdCard映射文件配置:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping>  
    <class name="entity.IdCard" table="t_idcard">  
        <id name="id">   
            <generator class="identity"></generator>  
        </id>  
        <property name="number"></property>

    </class>  
</hibernate-mapping>

注解映射:

注解映射只需要在实体类对应的属性的 get 方法上写上对应的注解,摆脱了成堆的 xml 文件,在 hibernate.cfg.xml 中的 mapping 节点中也只需要引入对应的实体类即可

例:

package com.emiya.sshFreamWork.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "blog", catalog = "")
public class Blog {
    private int id; //微博id
    private String content; //内容
    private String publishtime; //发布时间
    private int userid; //用户

    @Id
    @Column(name = "id",unique = true, nullable = false, length = 10)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "content", nullable = false, length = 1000)
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }

    @Column(name = "Publishtime", nullable = false, length = 6)
    public String getPublishtime() {
        return publishtime;
    }
    public void setPublishtime(String publishtime) {
        this.publishtime = publishtime;
    }

    @Column(name = "Userid", nullable = false, length = 6)
    public int getUserid() {
        return userid;
    }
    public void setUserid(int userid) {
        this.userid = userid;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值