zoukankan      html  css  js  c++  java
  • hibernate总结

    Hibernate 数据库相关配置项

    属性名                         作用

    Hibernate.connection.driver_class JDBC驱动类

    Hibernate.connection.url JDBC  URL

    Hibernate.connection.username 数据库用户名

    Hibernate.connection.password 数据库用户密码

    Hibernate.show_sql 设置控制台sql输出

    hibernate方言(Dialect)类名--可以让hibernate使用某些特定的数据库平台的特性

    Hibernate.dialect 取值:完整的方言类名

    Configuration 配置

      configure()

      configure(String resource)

      addResource(Strng resource)倒入一个指定位置的映射文件

      addClass(Class class)导入与指定类同一包中的以类名为前缀,后缀为.hbm.xml的映射文件

      buildSessionFactory()

      Sessionfactory Session工厂

    openSession();

    openCurrentSession();

    close();

      Session  很重要的一个对象

    操作对象的方法:

    save(Object);

    update(Object);

    delete(Object);

    查询的方法:

    createQuery(String)-->Query

    createCriteria(String );

    管理事务的方法:

    beginTransaction()-->Transaction();

    getTransaction() -->Transaction();获得当前关联的事务

      Transaction  事务

    commit()提交事务

    rollback()事务回滚

      Query        查询

    list()查询一个结果集合

    uniqueResult();查询一个唯一的结果,如果没有结果,则返回null,如果结果有多个,就抛出异常

    Hibernate主配置文件

    1.配置的key前面的hibernate,前缀可以有,也可以没有。如hibernate,dialect或者dialect都可以

    2.按作用可以分为三类:

    1.数据库信息

    a) <property.../>

    方言,jdbcurl,驱动,用户名,密码

    2.导入映射文件

    <mapping...>

    3.其他配置

    <property...>

    show_sql 显示生成的sql语句

    Format_sql 格式化生成的sql语句

    生成表结构的两种方式:

    1,hbm2ddl.auto

    2,使用SchemaExport工具类

    注意:只能建表,不能建库

    <create是先删除后创建

    update如果表不存在就创建,不一样就更新,一样就不改变

    create-drop 初始化时创建表SessionFactory执行close时删除表

    validate验证表结构是否一致,如果不一致就会抛出异常

      <property name="hbm2ddl.auto">create</property>

    <property name="hbm2ddl.auto">update</property>

    对持久化对象/实体的要求

    1.提供一个无参的构造器.使hibernate可以使用Constructor.newInstance()来实例化持久化类

    2.提供一个标识属性(identifier property),通常映射为数据库表的主键字段,如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate().

    3.为持久化类的字段声明访问方法(get/set).hibernatejavabeans风格的属性实行持久化

    4.使用非final类,在运行时生成代理是hibernate的一个重要的功能,如果持久化类没有实现任何接口,hibernate使用CGLIB生成代理,如果使用的是final类,则无法生成CGLIB代理

    5.重写equals()hascode()方法,如果需要持久化类的实例放到set中(当需要进行关联映射),则应该重写这两个方法

    添加环境:

    配置jar

    配置文件

    Hibernate.cfg.xml

    xxx.hbm.xml

    使用hibernate实现增删查改

    //----模板代码

    Configuration cfg=new Configuration();

    SessionFactory sessionFactory=cfg.buildSessionFactory();

    Session session=sessionFactory.openSession();

    Try{

    Transaction tx=session.beginTransaction();

    //

    tx.commit();

    }catch(Exception e){

    tx.rollback();

    throw e;}

    finally{

    session.close();}

    ------操作

    Session中的操作方法:

    save(Object) --->insert into

    update(Object)--->update...

    SaveOrUpdate(Object)--->

    delete(Object)   --->delete...

    get(Class,id)   --->select...

    createQuery(hql)

    主配置文件

    1.数据库信息

    方言,jdbcurl,驱动,用户名,密码

    2.导入映射文件

    3.其它配置 show_sql=true;

    Hbm2ddl.auto=uodate;

    映射配置

    映射基础

    ----

    属性---

    映射普通属性

    name type column length not-null.......

    映射主键

    主键生成策略:native uuid

    一、集合映射。

    类型 Java中声明 映射元素

    ---------------------------------

    Set Set <set>

    List List <list>

    Map Map <map>

    数组 ...[] <array>

    Bag List/Collection <bag>

    ---------------

    要说明的信息有:

    1,只要有集合,就一定有集合表。

    2,集合外键。

    3,集合元素。

    4,对于List和数组,还需要多一个索引列。

    5,对于Map,还需要多一个key列。

    值类型的集合。

    实体类型的集合

    二、关联关系映射(要说明的信息有什么)。

    一对多:

    1,属性名

    2,集合外键

    3,关联的实体类型(one-to-many  class="")

    多对一

    1,属性名

    2,外键列名

    3,关联的实体类型

    多对多

    1,属性名

    2,中间表

    3,集合外键:引用当前对象表主键值的那外外键

    4,关联的实体类型

    5,另一个外键:引用关联实体表主键的那个外键。

    一些重要的属性

    inverse:

    是否放弃维护关联关系。

    默认是false,表示可以维护。

    实体类型的集合映射中可以使用(一对多、多对多)。

    sort:

    在内存中排序(类似于TreeSet)

    默认为unsorted,即不排序。

    在无序的集合映射中可以使用。

    order-by:

    使用数据库排序,即在SQL中增加orderby子句(类似于LinkedHashSet)。

    默认不排序,这里指定的是sql语句中的orderby子句。

    在无序的集合映射中可以使用。

    cascade:

    级联。

    默认为none。

    在所有的关联关系映射中可以使用。

    常用的值:all, save-update, delete, none.

     

     

    对象的状态:

    临时状态:

    与数据库没有对应,跟Session没有关联。

    一般是新new出的对象。

    持久化状态

    对象在Session的管理之中,最终会有对应的数据库记录。

    特点:

    1,有OID

    2,对对象的修改会同步到数据库。

    游离状态:

    数据库中有对应记录,但对象不在Session管理之中。

    修改此状态对象时数据库不会有变化。

    删除状态:

    执行了delete()后的对象。

    三、Session中的方法

    对象的状态

    Session中 数库中

    -----------------------

    临时  

    持久化   最终会有

    游离  

    删除  调用了delete()方法后

    1,操作实体对象的

    save()

    update()

    saveOrUpdate()

    delete()

    2,操作缓存的

    clear() 清空Session缓存,不会执行sql语句。

    evict()

    flush() 马上执行sql语句,不会清楚Session缓存

    3,查询实体对象的

    get()

    load()

    createQuery()

    createCriteria()

    加载方式 返回值 如果数据不存在

    ---------------------------------------------------------

    get 立即加载 真实对象或null 返回null

    load 延迟加载 代理对象 抛异常

    Hibernate继承总结:

    subclass标签就是为子类嵌入父类的表中而设计的,而且要指定鉴别器,即用subclass一定要有判断类型的一个列,鉴别器指定记录属于哪个类型。但是subclass也提供了为子类设置单独的表的功能,即join标签。但是不管是内嵌表还是外部表,都得指定鉴别器。

    joined-subclass标签,提供的功能是只能为子类设定外部表,而且没有鉴别器,即子类一张表,父类一张表,子类以父类的主键为外键。父类对应的表中,没有判断类型的列。

    注意:这两个标签不能混用,若是只想要内嵌表,或者是既想要有内嵌表,又想要外部表,又或者是只想要外部表,那么只能使用subclass标签,需要注意的是,不论哪种方式,都要指定鉴别器,即父类对应的表中,一定有一个判断类型的列;而若是只想要外部表,又不想在父类对应的表中,要那个判断类型的列,那么只能使用join-subclass

    union-subclass是将父类中的属性,添加到子类对应的表中去了。包括父类中的外键。union-class和前两个的区别就在于外键的不同,前两个标签,如果子类有单独对应的表的话,这个表的外键是其父类中的主键,而使用union-class,子类对应的表中的外键则和父类的外键是一样的,因为子类把父类继承的属性,也加到了自己的表当中。这样子类和父类的地位就相当了。不过这不是一种好的理解方式。如果是这样的话,那么就可以把父类设为抽象的类,并且在映射文件中,把父类设置为abstract="true",那么就不会再数据库中生成父类对应的表了,父类就只起到一个抽象的作用了。

  • 相关阅读:
    spark代码的提交
    单位局域网内的vmware的网络配置
    hive安装配置
    sparkshell中执行wordcount
    解决 在IDEA中使用Maven和Scala新建项目没有自动产生src 以及spark的编译运行配置
    IIS环境下MHT文件预览时弹出下载框的问题解决
    MySql解压版使用
    Oracle 11g OEM登录后提示“出现内部错误”
    如何杀掉(kill)Oracle中的会话(Session)
    IIS发布后出现“如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”错误
  • 原文地址:https://www.cnblogs.com/mxf97826/p/8708150.html
Copyright © 2011-2022 走看看