Hibernate小结

第一讲

  1. 对象-关系映射(Object Relational Mapping,简称ORM),把域模型表示的对象映射到关系数据模型对应的数据库结构中去。ORM 技术是在实体类对象和数据库表之间提供了一条桥梁;通过ORM只需简单的操作实体对象的属性和方法,不需要再去和复杂的 SQL语句打交道

在这里插入图片描述
3. Hibernate是什么?
在分层体系结构中Hibernate位于持久层,是完成对象持久化的持久层框架;
Hibernate是连接Java应用程序和关系型数据库的框架,能够建立对象模型和关系数据模型之间的映射,是一种自动ORM框架;
Hibernate是对JDBC API的封装,是JDBC轻量级封装框架。
4. Hibernate需要从配置文件中读取数据库配置信息,配置文件一般位于项目根路径。
Hibernate配置文件两种方式:
hibernate.properties (键=值方式)
默认名字为:hibernate.propeties
hibernate.cfg.xml
一般推荐使用第二种
5. hibernate.cfg.xml的具体配置信息

 <?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->     
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序,8.0版本的MySQL要在mysql和jdbc之间加上cj-->     
  <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名--> 
   <!--与之前使用的版本不同,8.0要加上时区的配置,且中间都要使用&amp;隔开,如果是直接在servlet里面写连接路径,则不需要写&amp;只需要一个&隔开就好  -->     
 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/anno?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">1234</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>  
   <!--指定映射文件,可映射多个映射文件,一个类规范写有一个映射文件--> 
  <mapping resource="com/ddd/entity/Course.hbm.xml"/>
  <mapping resource="com/ddd/entity/Student.hbm.xml"/>
  <mapping resource="com/ddd/entity/Score.hbm.xml"/>
</session-factory>
</hibernate-configuration> 
  1. 持久化类:指其实例需要被Hibernate持久化到数据库中的类即实体类
    private 类型属性;
    public 类型的 setter 和 getter 方法;
    public 或 protected 类型的无参数的构造方法。
  2. 描述持久化类与数据库表之间的对应关系。
    在这里插入图片描述
  3. 持久化类的配置文件
    class元素用于指定类和表之间的映射。
    name属性设定类名(包含路径);
    table属性设定表名,默认以类名作表名。
    class元素包含一个id子元素及多个property子元素。
    id 子元素设定持久化类的OID和表的主键的映射关系。
    column – 指定表字段的名称;
    generator – 元素指定OID的生成器。

property 子元素设定类的其他属性和表的字段的映射关系。
name – 对应类的属性名称;
type – 指定属性的类型;
column – 指定表字段的名称;
not-null – 指定属性是否允许为空。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- packge对应持久化类的包名 -->
<hibernate-mapping package="com.ddd.entity">
   <class name="Course" table="course">
   <!-- id 和 property 元素不能颠倒位置 -->
        <id name="id" column="id">
            <!-- 主键生成策略 使用native,需要底层数据库自己设置主键的值哦,比如AUTO_INCREMENT -->
            <generator class="identity">
            </generator>        
        </id>
       
        <property name="name" column="name"></property>
        <property name="credit" column="credit"></property>
         <!-- 一个课程关联多个学生 -->
        <!-- 
            使用set来描述在一的一方中关联的多,也即Set<Orders>
            它的name属性就是Set集合的名称:orders
     key:它主要描述关联的多的一方产生的外键名称,注意要与多方定义的外键名称相同
             inverse属性:
                默认为false,表示本方维护关联关系。
                如果为true,表示本方不维护关联关系。
                只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有任何影响。
            cascade属性:
                默认为none,代表不级联。
                级联是指操作主对象时,对关联的对象也做相同的操作。
                可设为:delete,save-update,all,none,...
            one-to-many:主要描述集合中的类型
            cascade="all"
        -->
         <set name="stu" table="score" inverse="true">
         <!--指的是本实体类在第三方表中外键的名称  -->
         <key column="cid"></key>
         <many-to-many class="Student" column="stuid" />
         </set>

    </class>
    
  </hibernate-mapping>

第二讲

  1. 主键必须满足的条件:
    不允许null;
    每条记录必须有唯一的主键值,主键值不能重复;
    每条记录的主键值不能改变。
    主键分类:
    业务(自然)主键:具有实际意义;
    代理主键:没有实际意义。(我们使用的id就属于代理主键)

  2. OID 是关系数据库表中的主键(通常是代理主键)在 Java 对象模型中的等价物;
    Hibernate 采用 OID 来维持Java持久化类和数据库表中对应关系;

  3. Hibernate 允许在持久化类中把OID定义为以下三种类型:
    Short、Integer、Long;为了保证 OID 的唯一性,通常由 Hibernate 或底层数据库给 OID 赋值。

  4. 在对象-关系映射配置文件中class元素的子元素用来设置 OID。
    generator子元素用来指定OID的生成器。
    List item

  5. increment 标识符:该机制是 Hibernate 以递增的方式为OID赋值。不依赖于底层数据库系统,适合所有数据库;适合单独的 Hibernate 应用使用,不适合在集群情况下使用。
    identity 标识符: 该机制依赖于底层数据库,需要数据库支持自动增长字段。//把数据库原有的id删除了,它只会在已删除的id上自动增长,如果数据有id大于已删除的字段则在最大的id上增长,如果删除的是最大的id,则以已删除的最大id增长,比如删掉了id为5、6的数据,数据库中目前最大是4,则下一条id是7而不是5
    assigned 标识符: 该机制是由外部程序负责生成 OID, Hibernate 不负责维护主键生成,与Hibernate和底层数据库都无关。需要自己在程序中设值;例如: Student 类没有定义 ID,而是以学号 studentNo 作为业务主键。在这里插入图片描述
    然后在程序中set.studentNo();设置id的值;

第三讲

  1. Hibernate提供两种映射一对一关联关系的方式:
    主键关联映射;
    唯一外键关联映射。
    外键必须设定 unique 约束。
  2. 主键关联映射 – 外键表(PERSON )
    通过one-to-one 元素配置。
    constrained 属性为 true,表明 PERSON 表 ID 为外键,参照主表(USER)。
    外键表实体类配置文件中 OID 使用 foreign 生成策略。
  3. 唯一外键关联映射 - 主键表(PERSON)。
    通过one-to-one 元素配置。
    property-ref 属性,表明建立了从User到Person的一对一关联关系。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值