hibernate学习笔记

来源:互联网 发布:陕汽重卡软件 编辑:程序博客网 时间:2024/05/01 10:02

对象 表记录

 

从对象到表记录

                               JDBC

表记录到对象 数据库

 

 

 

API 配置

 

一、HibernateAPI:

1.Confuguration

Configure(String)加载指定的主配置文件

Configure()(读取)加载默认的主配置文件(hibernate.cfg.xml

如何不在主配置文件中添加映射文件,也可以使用API手动添加,使用方法

addResourceString

addClass(类名.class//即映射文件的同名类

buildSessionFactory()生成session工厂

(方法链)

2.sessionFactory session工厂

openSession() 打开一个新的session

getCurrentSession()

Close()

3.Session

beginTransaction()

getTransaction()//获取当前关联的事务

close()

Save(Object)

Delete(Object)//删除的是实体对象

Update(Object)

Get(class,id)//返回Object

Query  createQuery(String HQL)//返回Query

4.Transaction

Commit()

rollback()

5.Query

list()返回List 

uniqueResult()返回object

setFirstResult(int)

setMaxResults(int)

二、主配置文件:

Hibernate.cfg.xml

1.数据库信息

2.声明映射文件

3.其他信息

<!-- 

数据库中没有表时可以使用如下属性建表

create:先删表,后建表

create-drop:启动时建表(创建sessionFactory开始,退出前删表

update:如果表结构不一致,就更新或创建

validate:启动时验证表结构,如果不一致就报异常

 -->

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

映射文件:

类名.hbm.xml

-->

属性-->

……

高级特性:

数据库连接池

二级缓存

懒加载

 

一、主键的映射

        <id name="id" type="java.lang.Integer">

            <column name="id" />

            <generator class="native" /><!-- 组件生成策略 -->

        </id>

策略:native  *:自动选择,根据底层数据库的能力选择identity,sequence或Hilo其中的一个

Identify:使用数据库的主键自动增长(Oracle不能用),在保存时会忽略手工正定的值,而由数据库生成的,要求此属性是数字类型

Assigned:手工指定主键的值,比如指定uuid否则会报错。

Increment

Uuid  *:由hibernate生成uuid并指定为主键值,要求此属性是String类型

Foreign

Hilo:主键的的类型是数字

Sequence

指定主键是怎么生成的

复合主键: <composite-id>

<key-property name=""></key-property>

</composite-id>

一、推荐使用代理主键

业务主键:与业务相关

代理主键:与业务无关(推荐使)

二、推荐数字使用包装类型(Integer)因为有null值,不适用原始类型int

 

 

 

 

第二天

HashSet是无序的

TreeSet按自然顺序排序

LinkedHashSet按插入顺序排序

映射文件中:

<!--set集合映射

Table:集合表的名字

<key>中的column:集合外键

<element>集合元素列的信息

Sort属性:如果指定为为natural,就会像TreeSet那样进行排序(效率低)

Order-by属性:指定查询集合元素用的SQL中的order by部分,这里写的是SQl语句(建议使用)

-->

<set name=”addressSet” table=”user_addressSet” sort=”natural”(order-by=“address DESC ”)>

<key column=”userId”/>

<element column=”address” type=”string”></element>

</set>

<!--list集合映射

Table:集合表的名字

<key>中的column:集合外键,代表属于哪个对象

<list-index>,存放元素索引的列,list必有,无须进行排序,怎么插入的就是什么顺序

<element>集合元素列的信息

-->

<!-- addressList属性,List集合 -->

<list name="addressList" table="user_addressList">

<key column="userId"></key>

<list-index column="idx"></list-index>

<element column="address" type="string"></element>

</list>

<!--Map集合映射

Table:集合表的名字

<key>中的column:集合外键

<map-key>,map的key

<element>集合元素列的信息,map中的value

-->

 

 

 

 

 

 

<hibernate-mapping package="cn.itcast.h_hbm_oneTomany">

<class name="Department" table="deparment">

<!-- 映射联合主键 -->

<id name="id">

<generator class="native"></generator>

</id>

<property name="name"></property>

<!-- employee属性,Set集合,表达的是Department与Employee的一对多的关系 

inverse属性:表示是否放弃维护关联关系true表示放弃,false不放弃,让对方维护,在一的一方,只有五外键方才能有inverse属性设置。

-->

<set name="employees" inverse="false">

<key column="departmentId"></key>

<one-to-many class="Employee"/>

</set>

</class>

</hibernate-mapping>

0 0