Hibernate学习

来源:互联网 发布:数字照度计软件 编辑:程序博客网 时间:2024/06/01 22:49

hibernate.cfg.xml常用配置

  • hibernate.show_sql :是否把hibernate运行时的sql语句输出到控制台,便于编码阶段的测试
  • hibernate.format_sql 输出到控制台的sql语句是否进行排版,便于阅读,一般设为true
  • hbm2ddl.auto 帮助java代码生成数据库脚本,进而生成具体的表结构 (如果表存在,create:删除原来的表创建新表 update 在原表之上进行更新,create-drop先创建新表再删除原表 validate 如果与原来的表结构不同,不会创建新表)
  • hibernate.default_schema 在创建的数据库前面加上前缀,比如:当标签之间填hibernate时,数据库名为hibernate.XXX
  • hibernate.dialect 配置hibernate数据库方言,hibernate可针对不同的数据库进行优化。

session简介
看图

解析:首先创建配置对象(configuration对象new Configuration().configure()还要有服务注册对象SeviceRegistry对象,new SeviceRegistryBuilder()…)来读去配置文档,获取配置对象后用它来创建sessionfactory对象,该对象会读取对象关系映射文件(XXX.hbm.xml),之后创建session对象,相当于JDBC中的connection,即操作数据库对象
执行session的方法,每次执行方法时要开启事物,执行完方法之后要提交事务,最后关闭session

重点内容
session不建议直接使用jdbc的connection操作数据库,而要通过session操作数据库
每个session对应一个connection,一个connection不同时刻供多个session使用。
调用session的方法,将对象保存在关系数据库中

  • save()
  • update()
  • delete()
  • createQuery()

    transaction简介
        hibernate对数据库的操作是封装到事物当中,并且非自动提交,所以用session保存对象,如果不开启事务,但却手工提交事务,对象并不会真正保存在数据库中。(表现为没有插入数据)

    jdbc自动提交事务,

如何获得session对象

  1. openSession方法
    需要手动关闭,如果没有关闭多次之后导致连接池溢出。
    每次创建新的session对象
  2. getCurrentSession方法
    自动关闭,
    使用现有的session对象(相当于单例模式)
    需要在hibernate.cfg.xml中进行配置
    本地事物(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>

全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>

详情

小知识
可以用session的doWork方法,重写Work()来打印出connection.hashCode可以比较session是否为 同一个session对象。如果没有关闭session有多个hashcode(表示多个session将导致溢出)

session.doWork(new Work(){    public void execute(Connection connection) throws SQLException{    System.out.print(connection.hashCode())};});

hbm配置文件常用设置
<class />标签中的属性
name 映射的类名
table 映射的数据库中的表名
batch-size=‘n’ 一次抓取多少条记录
where=’condition’ 设置抓取记录的条件
entity-name=” 同一个类映射多个表

<id ></id>

id标签的属性有:
name映射的属性
type属性的类型
column 映射成数据库后子段的名称
length 映射成数据库后子段的长度
``
<generator class="generatorClass"

主键生成策略

详情

原创粉丝点击