zoukankan      html  css  js  c++  java
  • 3.Hibernate基础配置

    1.Hibernate.cfg.xml:hbm2ddl.auto  

       在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库

      <property name="hbm2ddl.auto">create</property>  除了 create 还有其他取值,可以去查文档

      a)先建表还是先建实体类 (理论先类,实际先表)

    2.搭建日志环境并配置显示DDL语句(数据库定义语言:直接提交的)(就是SQL语句)

      使用slf接口 ,然后使用log4j的实现(slf是一个规范,一个标准,类似于接口,类似的标准还有JPA,JDBC等)

        a)首先引入 slf-api-1.5.8.jar  这个接口标准 

        b)然后引入log4j(log4j-1.2.14.jar)

        c)然后再引入slf4j实现LOG4J的适配器jar包(slf4j-log4j12-1.5.8.jar)  (这里体现了适配器模式)

        d)最后创建log4j的配置文件(log4j.properties),并加以修改,只要保留

    适配器模式将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。

    原本 slf 接口  和  log4j 接口是不兼容的,但是这里通过slf4j-log4j12-1.5.8.jar,将 log4j中的接口 转换成 符合 slf 标准的接口

    JDBC也是类似,只提供了一个标准,mysql 和 oracle 都要使用相应的jar包,使其能够适配JDBC这个标准

    3.hibernate.cfg.xml:show_sql    是否输出所有语句到控制台

               format_sql 是否在log 和 console中 打印出更漂亮的SQL

    4.表名和类名不同,如何对表名进行配置 (默认加了@Entity的类名就是表名)

      1.Annotation:使用@Table(name="tableName") 进行注解
      2.xml:<class name="Student" table="t_student">

    5.字段名和属性名相同

      1.Annotation:默认为@Basic (如果成员属性没有加入任何注解,则默认在前面加入了@Basic)

      2.xml中不需要写 column

    6.字段名和属性名不同

      1.Annotation:使用@Column(name="columnName") 进行注解

      2.xml:<property name="name" column="_name"/>

    7.不需要持久化的字段 (即实体类某个成员属性不打算保存在DB中)

      1.Annotation:使用@Transient 进行注解就可以了

      2.xml:不写就可以(就是不需要对这个成员属性进行映射)

    8.映射日期与时间类型,指定时间精度(数据库中存的数据的类型)
      1.Annotation:使用Temporal(value=TemporalType) 来注解表示日期和时间
        其中Temporal 有三个值:Temporal.TIMESTAMP 表示 yyyy-MM-dd HH:mm:ss
                     Temporal.DATE 表示 yyyy-MM-dd
                        Temporal.TIME 表示 HH:mm:ss
      注:当使用注解时,属性为value时,则这个属性名可以省略,例如:@Temporal(TemporalType)

      2.xml:使用type属性指定hibernate类型
        <property name="birthDate" type="date"/>
      注:hibernate 日期时间类型有:date,time,timestamp,当然也可以使用java包装类

    9.映射枚举类型
      1.Annotation:使用@Enumerated(value=EnumType) 来注解表示此成员属性为枚举映射到数据库

      其中 EnumType 可以取两个值:

        1.EnumType.STRING 表示直接将枚举名称存入数据库 (数据库字段的类型为varchar(255))

        2.EnumType.ORDINAL 表示将枚举所对应的下标数值存入数据库(数据库字段的类型为int)

      2.xml:映射非常的麻烦,要先定义自定义类型,然后再使用这个定义的类型,一般不使用这种方式

    10.字段映射的位置(field 或者 get方法)

      即对字段的注解是放在字段本身,还是该字段的get方法上

      Best practice:应该放在get方法上,原因:java的封装性

      字段的定义是 private, 是不希望别人来访问的,如果强行将注解放到 字段上,对,hibernate的确也可以访问到(暴力反射),

      但是后果就是会破坏java的封装性,而放到 get方法(public)就不会有这样的情况,

  • 相关阅读:
    LostRoutes项目日志——玩家飞机精灵Fighter解析
    quartz Cron表达式一分钟教程
    vue-cli入门
    SQL中merge into用法
    SQLSERVER查询那个表里有数据
    C#实现复杂XML的序列化与反序列化
    MVC和WebApi 使用get和post 传递参数。
    项目管理软件推荐
    JS跨域请求
    Android动画效果translate、scale、alpha、rotate详解
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7384463.html
Copyright © 2011-2022 走看看