hibernate30 自学完全文档Word文档格式.docx

上传人:b****6 文档编号:8563384 上传时间:2023-05-11 格式:DOCX 页数:79 大小:208.99KB
下载 相关 举报
hibernate30 自学完全文档Word文档格式.docx_第1页
第1页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第2页
第2页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第3页
第3页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第4页
第4页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第5页
第5页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第6页
第6页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第7页
第7页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第8页
第8页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第9页
第9页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第10页
第10页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第11页
第11页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第12页
第12页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第13页
第13页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第14页
第14页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第15页
第15页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第16页
第16页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第17页
第17页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第18页
第18页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第19页
第19页 / 共79页
hibernate30 自学完全文档Word文档格式.docx_第20页
第20页 / 共79页
亲,该文档总共79页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

hibernate30 自学完全文档Word文档格式.docx

《hibernate30 自学完全文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《hibernate30 自学完全文档Word文档格式.docx(79页珍藏版)》请在冰点文库上搜索。

hibernate30 自学完全文档Word文档格式.docx

2缓存51

2.1缓存的原理51

2.2一级缓存52

2.3二级缓存54

3事务的处理56

3.1JTA事务和事务的边界57

3.2乐观锁和悲观锁61

3.3常见参数解释和常见问题64

3.4其他问题(HQL,监听器等)65

3.5annotation标注67

一hibernate入门

1.hibernate介绍

1.1引入

●模型不匹配(阻抗不匹配)

java面向对象语言,对象模型,其主要的概念有:

继承。

关联。

多态等;

数据库是关系模型,其主要的概念有:

表,主键,外键等

●解决的办法

1.使用JDBC手工转换

2.使用ORM(ObjectRelationMapping对象的关系映射)框架来解决、

1.2安装配置

●下载的地址www。

hibernate。

org本教程用3.2.5

●将下载目录的、hibernate3.jar和、lib下的hibernate运行时必须的包加入classpath中

antlr-2.7.6.jar,asm.jar,asm-attrs.jar,cglib-2.1.3.jar,dom4j-1.6.1.jar,commons-collections-2.1.1.jar,commons-logging-1.0.4.jar,ehcache-1.2.3.jar,

hibernate3.jar,jta.jar

1.3第一个程序

1.加入必要的包(看上节);

2.加入配置文件在F:

\软件\hibernate-3.2\eg\org\hibernate\auction\User.hbm.xml中找到模板的配置文件(放在你程序的包中)

3.加入系统的配置文件在F:

\软件\hibernate-3.2\etc\hibernate.cfg.xml问系统的配置文件,文件放在src目录下

4.配置系统配置文件的属性,属性在F:

\软件\hibernate-3.2\etc\

hibernate.properties文件中查看

 

例子一:

1)加载系统的配置文件(hibernate.cfg.xml)

<

!

DOCTYPEhibernate-configurationPUBLIC

"

-//Hibernate/HibernateConfigurationDTD3.0//EN"

hibernate-configuration>

<

session-factory>

<

propertyname="

connection.driver_class"

>

com.mysql.jdbc.Driver<

/property>

connection.url"

jdbc:

mysql:

//localhost:

3306/student<

connection.username"

root<

connection.password"

123<

dialect"

org.hibernate.dialect.MySQLDialect

mappingresource="

cn/com/hewei/domain/User.hbm.xml"

/>

/session-factory>

/hibernate-configuration>

2)新建bean文件

package.hewei.domain;

importjava.util.Date;

publicclassUser{

privateintid;

privateStringname;

privateDatebirthday;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

publicDategetBirthday(){

returnbirthday;

publicvoidsetBirthday(Datebirthday){

this.birthday=birthday;

}}

3)写配置文件(User.hbm.xml)

?

xmlversion="

1.0"

DOCTYPEhibernate-mappingPUBLIC

-//Hibernate/HibernateMappingDTD3.0//EN"

hibernate-mapping

package="

.hewei.domain"

classname="

User"

table="

user"

idname="

id"

column="

<

generatorclass="

native"

/id>

name"

birthday"

/class>

/hibernate-mapping>

4)写测试类

package.hewei.hibernate;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.Transaction;

importorg.hibernate.cfg.Configuration;

import.hewei.domain.User;

publicclassBase{

publicstaticvoidmain(String[]args){

//初始化类似注册驱动

Configurationcfg=newConfiguration();

cfg.configure();

//类似DriverManager

SessionFactorysf=cfg.buildSessionFactory();

//获得session

Sessions=sf.openSession();

//开始事物

Transactiontr=s.beginTransaction();

Useruser=newUser();

user.setName("

hewei"

);

user.setBirthday(newDate());

s.save(user);

//提交事务

mit();

s.close();

System.out.println("

end"

}

//运行后会自动将bean中的数据加入数据库

//在系统的配置文件中的property标签中加入

hbm2ddl.auto"

create<

//会自动创建表,但是每次都新建表

1.4hibernate开发的一些细节

1.开发的流程

1)由Domainobject-》mapping-》db(官方)

2)有db开始,由工具生成mapping和Domainobject(使用推荐)

3)有映射文件开始

2.domain的限制

1)必须要有缺省的构造方法

2)有一个id

3)非final得到,对懒加载有影响

3.映射文件的解析

hibernate-mappingpackage="

>

//package为包名

//class表示映射的bean,一个class就是一个类

//id表示主键,name表示属性名,cloumn表示表中的字段名,默认不写就和属性名一//generatorclass=”native”generator主键产生器,native是生成器的一种,它会自动增长

//property表示属性name表示属性名,cloumn表示表中的字段名

1.5hibernate工具类的书写

hibernate的源代码在src文件夹中

package.hewei.util;

importjava.io.Serializable;

importorg.hibernate.HibernateException;

publicfinalclassHibernateUtil{

privatestaticSessionFactorysessionFactory;

//不可新建

privateHibernateUtil(){};

//注册驱动只注册一次

static{

//初始化类似注册驱动

sessionFactory=cfg.buildSessionFactory();

//让外界访问sessionFactory

publicstaticSessionFactorygetSessionFactory(){

returnsessionFactory;

publicstaticSessiongetSession()

{

returnsessionFactory.openSession();

//增加

publicstaticvoidadd(Objectobj){

Sessionsession=null;

Transactiontx=null;

try{

session=HibernateUtil.getSession();

tx=session.beginTransaction();

session.save(obj);

mit();

}catch(HibernateExceptione){

if(tx!

=null)

tx.rollback();

throwe;

}finally{

if(session!

session.close();

}

//删除

publicstaticvoiddelete(Objectobj){

session.delete(obj);

}

//更新

publicstaticvoidupdate(Objectobj){

session.update(obj);

//根据主键更新

staticObjectget(Classclazz,Serializableid){

Sessions=null;

s=HibernateUtil.getSession();

Objectobj=(User)s.get(clazz,id);

returnobj;

//TODO:

handleexception

if(s!

=null)

s.close();

1.6Session接口的常用方法

Session的几个主要方法1.save,persist保存数据,persist在事务外不会产生insert语句,而save是产生数据再回滚的。

2.delete,删除对象3.update,更新对象,如果数据库中没有记录,会出现异常。

4.get,根据主键ID查,会立刻访问数据库。

//get函数必须传入id和class,因为class才能找到实体,才能找到映射文件,这样才能找到表和映射关系,也就可以查出表中的信息

5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。

6.saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。

调用.saveOrUpdate就变为持久的了7.lock(把对象变成持久对象,但不会同步对象的状态)。

save和persist的区别(在没有开启事务的前提下是有区别的,如果开启了事务,则效果是一样的。

save在没有开启事务的前提下,会将数据插入数据库,但是当发现事务没有开启的话,插入的数据就会立刻回滚。

persist在没有开启事务的前提下,不会产生insert语句。

saveOrUpdate

unsaved-value="

0"

get和load的区别

调用get()方法,会立刻访问数据库。

生成select语句。

调用load()方法,返回一个代理对象,只有在取得对象属性的时候才会真正的去访

例1取出user(get方法)

staticUsergetUser(intid){

ClassuserClass=User.class;

Useruser=(User)s.get(userClass,id);

returnuser;

}}

在配置文件中加入<

show_sql"

true<

运行的时候就可以输出sql语句

//如果你不知道是持久的还是托管的那么就使用updateOr

1.7实体对象的三种状态

对象的状态

瞬时(transient):

数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

//刚新建的bean,和数据库没关系持久(persistent):

数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;

持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

//在session中,数据库中有数据了,会影响数据库脱管(detached):

数据库中有数据与之对应,但当前没有session与之关联;

托管对象状态发生改变,hibernate不能检测到。

//无session与之关联,但是数据库中有记录,这时候我们要更新的话就需要调用saveOrUpdate方法

1.8HQL和Criteria及分页

HQL(HibernateQueryLanguage)面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写);

HQL中查的是对象而不是和表,并且支持多态;

HQL主要通过Query来操作,Query的创建方式:

Queryq=session.createQuery(hql);

fromPersonfromUseruserwhereuser.name=:

name//替代了?

号//那么赋值的方式为query.setString(“name”,name);

fromUseruserwhereuser.name=:

nameanduser.birthday<

:

birthdayCriteriaCriteria是一种比HQL更面向对象的查询方式;

Criteria的创建方式:

Criteriacrit=session.createCriteria(DomainClass.class);

简单属性条件如:

Criteriaa=criteria.add(Restrictions.eq(propertyName,value)),Criteriab=criteria.add(Restrictions.eq(propertyName,otherPropertyName))

criteria.add(Restrictions.or(a,b));

//默认add是添加了与的关系,使用上句获得or的关系

例1根据姓名查询user(hql)

publicstaticvoidgetByName(Stringname){

//这里的User是类不是表

Stringsql="

fromUserasuserwhereuser.name=?

"

;

//创建处理的方法

Queryquery=session.createQuery(sql);

query.setString(0,name);

//注意从0开始和jdbc有区别

//list()和jdbc中executeQuery类似,如果确定user只有一个可使用Useruser=query.uniqueQuery();

List<

User>

list=query.list();

for(Useruser:

list)

{

System.out.println(user.getId());

}

例2根据姓名查询user(Criteria)

Criteriac=session.createCriteria(User.class);

//add加入一个约束条件,eq表示等于某个条件,gt为大于,lt为小于

c.add(Restrictions.eq("

name));

List<

list=c.list();

{

System.out.println(us

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2