Hibernate笔记

来源:互联网 发布:java文件上传中文乱码 编辑:程序博客网 时间:2024/06/07 12:43

ORM(Object/Relationship Mapping):对象/关系映射

 

创建Hibernate的配置文件

创建持久化类

创建对象-关系映射文件

通过HibernateAPI编写访问数据库的代码

 

MYSQL语句的规范

关键字与函数名称全部大写

数据库名称、表名称、字段名称全部小写

SQL语句必须以分号结尾

 

hibernate.cfg.xml常用配置

hibernate.show_sql SQL语句输出到控制台

hibernate.format_sql 输出到控制台的SQL语句是否排版

hbm2ddl.auto CREATE/UPDATE可以帮助由java代码生成数据库脚本进而生成具体的表结构

hibernate.default_schema 默认的数据库

hibernate.dialect 配置数据库方言

 

session可以理解为操作数据库的对象。session与connection,是哦多对一的关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。

 

hibernate对数据的操作都封装在事物当中,并且默认是非自动提交的方式。

 

获得session对象:

1)  openSession

2)  getCurrentSession

如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:

如果是本地事物(jdbc事务)

<propertyname=”hibernate.current_session_context_class”>thread</property>

如果是全局事务(jta事务)

<propertyname=”hibernate.current_session_context_class”>jta</property>

 

openSession与getCurrentSession的区别

1.      getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果没有关闭,多次之后会导致连接池溢出。

2.      openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

 

hbm配置文件常用设置

<hibernate-mapping

schema=”schemaName”

catalog=”catalogName”

default-cascade=”cascade_style”   //级联风格

default-access=”field|property|ClassName”    //访问策略

default-lazy=”true|false”   //加载策略

package=”packagename”

/>

 

<class

name=”ClassName”

table=”tableName”

batch-size=”N”

where=”condition”

entity-name=”EntityName:

/>

 

<id

name=”propertyName”

type=”typename”

column=”column_name”

length=”length”

<generator class=“generatorClass”/

</id>

 

单一主键

assigned由java应用程序负责生成

native由底层数据库自动生成标示符

 

组件属性

实体类中的某个属性属于用户自定义的类的对象

<componentname=”address” class=”Address”>

<property name=”postcode” column=”POSTCODE”></property>

<property name=”phone” column=”PHONE”></property>

<property name=”address” column=ADDRESS”></property>

</component>

 

get与load的区别

在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。

查询不存在的数据时,get方法返回null,load方法抛出异常。

0 0
原创粉丝点击