• Hibernate第三天-Hibernate主配置信息


    今天是学习Hibernate的第三天,主要分析一下Hibernate的配置文件中的信息

    Hibernate中的配置文件有两种,第一种是主配置文件hibernate.cfg.xml,第二种是映射配置文件Student.hbm.xml

    一.主配置文件

    首先主配置文件的文件名一般为hibernate.cfg.xml,存放在工程的src目录

    配置文件中主要存在三类信息

    1.数据库的信息

    2.其他参数

    3.加载映射文件

    所有的配置信息都存放在<session-factory>的标签下

    配置参数:

    1.<property name="dialect">方言配置,hibernate在运行时,会根据不同的方言生成符合当前数据库语法的SQL

    数据库的三个方言参数:

    #hibernate.dialect org.hibernate.dialect.MySQLDialect

    #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect

    #hibernate.dialect org.hibernate.dialect.MySQLISAMDialect

    mysql数据库使用第一个方言参数

    2.<property name="connection.url">jdbc:mysql://localhost:3306/student</property>数据库路径、地址配置,主要用于表示数据库的路径和地址

    3.<property name="show_sql">true</property>表示Hibernate在运行时是否打印sql语句,参数为true时打印sql语句

    4.<property name="format_sql">true</property>表示在打印sql之前,先将sql语句进行格式化

    5.<property name="hbm2ddl.auto">update</property>hbm2ddl.auto用于自动生成表结构,如果数据库中没有表,会自动生成一个新的表结构 

    生成表结构的策略

    (1)# hibernate.hbm2ddl.auto update(最常用取值):如果当前数据库不存在表的结构,那么会自动创建表结构。如果存在表结构,并且表结构与实体一致,则不做修改。如果存在表结构,并且表结构与实体不一致,那么会修改表结构,保留原有列。

    (2)# hibernate.hbm2ddl.auto create(使用很少):无论是否存在表结构,每次启动hibernate自动生成表结构,会丢失数据

    (3)# hibernate.hbm2ddl.auto create-drop(使用极少) 无论是否存在表结构,每次hibernate运行结束删除表结构

    (4)# hibernate.hbm2ddl.auto validate(使用很少) 不会自动创建表,也不会自动维护表,只负责检验表结构,表结构不一致时,抛出异常。

    6.<property name="connection.username">root</property>连接数据库的用户名

    7.<property name="connection.password">123</property>连接数据库的密码

    8.<property name="connection.driver_class">com.mysql.jdbc.Driver</property>连接数据库的驱动包

    9.<property name="hibernate.connection.autocommit">true</property>设置Hibernate自动提交

    10.<property name="hibernate.current_session_context_class">thread</property>将session与线程绑定,只有配置了改属性,才能使用getCurrentSession

     

    加载映射文件

    可以使用<mapping>标签的resource属性进行加载映射文件

    <mapping resource="com/zk/Student/Student.hbm.xml">

    二.映射配置文件

    映射文件:映射一个实体类的对象;描述一个对象最终实现可以直接保存对象数据到数据库中

    通常的,我们都是一个JavaBean对象对应一个映射配置文件,并且配置文件和JavaBean对象放在同一个目录下。

    映射配置文件下的节点

    hibernate-mapping节点

    常用属性:

    1.class节点

    class映射某一个对象(一般情况,一个对象写一个映射文件,即一个class节点)

    常用属性:

    (1) name 指定要映射的对象的类型

    (2)table 指定对象对应的表 如果没有指定,默认与对象名称一样

    2.property节点 property是普通属性的映射,即JavaBean普通的成员变量属性

    常用属性:

    (1)name 指定对象的属性名称,user对象中标识主键的属性名称

    (2)column 指定对象属性对应的表的列字段名称,如果不写默认与对象属性一致,主键在表中的列名,如果列名为数据库关键字,需要用反引号或改列名。

    (3)length 指定列的数据长度,默认为255

    (4)type 指定映射表的字段类型,如果不指定会匹配属性的类型,表达类型属性 

    1.java类型:必须写全名

    2.hibernate类型:直接写类型,都是小写

    3.数据库类型

    (5)unsaved-value(不推荐):指定主键为什么值,当做null处理

    (6)access(强烈推荐不要使用):field

    (7)precision:小数点后的精度

    (8)scale:有效位数

    (9)insert:该属性是否加入insert语句,一般不用

    (10)update:该属性是否加入update语句,一般不用

    (11)not-null:指定属性值是否使用非空 true/false

    (12)unique:指定属性的约束是否唯一true/false

    3.id节点

    id是主键映射(1)name指定对象的属性名(2)column指定对象属性对应的表的字段名称

    <id>下的子节点<generator class=""/>

    主键的自动生成策略

    (1)identity自增长(mysql,db2),依赖与数据主键的自增功能

    (2)sequence自增长(序列),依赖于数据中的序列功能,Oracle中自增长是以序列方法实现,仅在oracle数据库中实现。

    如果是mysql数据库,采用自增长方式是identity

    如果是oracle数据库,采用sequence序列的方式实现自增长

    (3)native自增长,由数据库维护主键,自动根据数据库判断,会根据底层数据库自增长的方式选择identity或sequence和hilo(在设置了<generator class="native">之后,需要删除数据库中的表然后重新运行hibernate),它会建立一张新的表,并自增主键。

    (4)increment自增长,数据库自己生成主键,先从数据库中查询最大的id值,将id值加1作为新的主键(会有并发访问的问题,一般在服务器集群环境使用会存在问题。),数据库中要先取消掉数据库本身的自增属性,再设置数据库的自增长属性。

    (5)assigned  自己指定主键值,当表的主键是自然主键时。

    (6)uuid foreign(外键的方式,one-to-one讲),生成32位不重复随机字符串当做主键

     (7) hilo hibernate自己实现序列算法,自己生成主键 Hibernate自动生成一系列不重复的数值(用的很少)

  • 相关阅读:
    Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
    [Pulgin] jQuery插件之ajaxFileUpload
    [Plugin] JQuery.uploadify上传文件插件的使用详解For ASP.NET
    [Plugin] 文件上传利器SWFUpload使用指南
    [HTML] 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
    [JavaEE] IBM
    [TB-Technology] 淘宝在数据处理领域的项目及开源产品介绍
    [Hacker] 端口大全
    [.Net] DataTable添加列和行的三种方法
    [.Net] 导出Excel中身份证等数字串的解决方式
  • 原文地址:https://www.cnblogs.com/longlyseul/p/9830127.html
Copyright © 2020-2023  润新知