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",那么就不会再数据库中生成父类对应的表了,父类就只起到一个抽象的作用了。

  • 相关阅读:
    搭建非域AlwaysOn win2016+SQL2016
    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
    四、基于Windows 2012配置SQL Server 2014 AlwaysOn
    三、安装SQLserver 2014(For AlwaysOn)
    二、 Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)
    Mybatis-SQL语句构建器类及日志
    Mybatis-JavaAPI
  • 原文地址:https://www.cnblogs.com/mxf97826/p/8708150.html
Copyright © 2011-2022 走看看