hibernate教学学习文档.docx

上传人:b****9 文档编号:29159738 上传时间:2023-07-20 格式:DOCX 页数:26 大小:305.30KB
下载 相关 举报
hibernate教学学习文档.docx_第1页
第1页 / 共26页
hibernate教学学习文档.docx_第2页
第2页 / 共26页
hibernate教学学习文档.docx_第3页
第3页 / 共26页
hibernate教学学习文档.docx_第4页
第4页 / 共26页
hibernate教学学习文档.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

hibernate教学学习文档.docx

《hibernate教学学习文档.docx》由会员分享,可在线阅读,更多相关《hibernate教学学习文档.docx(26页珍藏版)》请在冰豆网上搜索。

hibernate教学学习文档.docx

hibernate教学学习文档

1hibernate入门

1.1框架介绍

1.2回顾

●传统使用JDBC开发

●使用工具包,DbUtils(commons-...)

1.3hibernate介绍

●轻量级:

依赖其他内容较少,消耗资源成本少。

●持久层:

与数据库进行数据交换。

●ORM,对象关系映射(objectrelationmapping)

对象:

java一切都是对象,一般情况使用JavaBean

关系:

数据库中的表(二维表)

映射:

配置文件

1.4流行框架

2第一个案例

2.1编写步骤

●创建java项目

●导入jar包

●核心配置文件hibernate.cfg.xml(configuration)

●JavaBean+映射文件(bean名称.hbm.xml)

注意:

必须将映射文件,添加核心配置文件中

●操作api

2.2导入jar包

●版本:

3.6.10

●导入jar(n个)

%h%/hibernate3.jar核心

%h%/lib\required必须目录下的所有

%h%/lib\jpajava规范(javapersistapi)java持久api,hibernate对其支持(一般注解开发)

注意:

数据驱动

2.3核心配置文件

●名称:

hibernate.cfg.xml

●位置:

src(classpath)

●内容:

(driver、url、username、password、方言)

●约束

DOCTYPEhibernate-configurationPUBLIC

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

"http:

//www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

--sessionFactory相当于DataSource(连接池)-->

--1基本4项-->

com.mysql.jdbc.Driver

jdbc:

mysql:

//localhost:

3306/h_day01_db

root

1234

--2方言,注意后缀-->

org.hibernate.dialect.MySQL5Dialect

注意:

必须手动创建数据库

2.4javabean和映射文件

2.4.1javabean字段

publicclassUser{

privateIntegeruid;//注意:

必须是整形

privateStringusername;

privateStringpassword;

2.4.2映射文件

●名称:

User.hbm.xml

●位置:

javabean同包

●内容:

(配置javabean属性和表中字段对应关系)

●约束

DOCTYPEhibernate-mappingPUBLIC

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

"http:

//www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

--给表配置主键-->

--主键生成策略(下午讲,暂时为固定值)-->

--其他属性-->

注意:

映射文件必须添加到核心配置文件中

●解决方案:

hibernate.cfg.xml

表不存在

方案1:

数据库手动创建表(建议)

方案2:

hibernate自动创建(上课优先)

3CRUD操作

添加:

save

更新:

update

删除:

delete

通过id查询,get(Class,id)

查询所有:

newQuery("from...").list()

分页:

setFirstResult(int)

setMaxResults(int)

@Test

publicvoiddemo04(){

Configurationconfig=newConfiguration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

//分页查询,提供hibernate提供的api分页

//*回顾sqlselect*fromt_userlimitstartIndex,pageSize;

//**startIndex开始索引

//**pageSize每页显示个数

Queryquery=session.createQuery("fromUser");

//第一页

//query.setFirstResult(0);

//query.setMaxResults

(2);

//第二页

query.setFirstResult

(2);//回顾算法:

startIndex=(pageNum-1)*pageSize;

query.setMaxResults

(2);

ListallUser=query.list();

for(Useruser:

allUser){

System.out.println(user);

}

session.getTransaction().commit();//获得之前开启的事务

session.close();

sessionFactory.close();

}

@Test

publicvoiddemo03(){

Configurationconfig=newConfiguration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

//查询所有--使用hibernate查询query语句hql

//*hqlhibernate提供面向对象的查询语句,类似与sql

//**sql格式:

select表中字段from表名where...,例如:

select*fromt_user

//**hql格式:

[select对象属性]from对象[where...],例如:

fromUser

Queryquery=session.createQuery("fromUser");

ListallUser=query.list();

for(Useruser:

allUser){

System.out.println(user);

}

session.getTransaction().commit();//获得之前开启的事务

session.close();

sessionFactory.close();

}

@Test

publicvoiddemo02(){

Configurationconfig=newConfiguration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

//通过id查询

Useruser=(User)session.get(User.class,1);

System.out.println(user);

session.getTransaction().commit();//获得之前开启的事务

session.close();

sessionFactory.close();

}

@Test

publicvoiddemo01(){

Useruser=newUser();

user.setUid

(1);

user.setUsername("杰克");

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.openSession();

Transactiontransaction=session.beginTransaction();

//更新--通过id更新所有内容,如果没有设置null

session.update(user);

mit();

session.close();

factory.close();

}

4api详解

4.1结构图

POpersistentobject持久对象

应用程序通过po类与hibernate进行交互。

4.2Configuration

●hibernate提供用于加载配置文件的。

●核心配置文件种类:

hibernate.properties和hibernate.cfg.xml

一般情况使用hibernate.cfg.xml,可以配置不同内容(基本信息,映射文件)

hibernate.properties只能配置基本信息(key=value)

参考:

%h%/project/etc/hibernate.properties

●构造方法,newConfiguration()hibernate将加载hibernate.properties配置文件

●提供方法:

configure()加载hibernate.cfg.xml配置文件

通过configure(String)指定自定义的cfg.xml文件。

●加载映射文件hbm.xml

addResource()加载自定义的映射文件。

例如:

config.addResource("cn/itcast/domain/User.hbm.xml");

addClass()加载自定义映射文件。

例如:

config.addClass(User.class);

建议:

映射文件与Java通同名同包,且扩展名为hbm.xml

注意:

如果重复添加JavaBean,提示错误

4.3SessionFactory

●hibernate提供工厂,用于生成session

●每一个应用程序只能有一个实例(单例),类似Jdbc时学习的连接池

●线程安全的,及不同的线程都可以获得不同session。

●获得实例configuration.buildSessionFactory()

●获得session

openSession()创建一个回话,每执行一次,session都是新的。

getCurrentSession()获得当前线程中绑定的session,暂时不能用。

●SessionFactory缓存配置信息(例如:

hibernate.cfg.xml/...hbm.xml配置内容)

4.4Session

●hibernate提供操作PO类

●线程不安全,及每一个用户必须独享自己的session。

●常用api

save/update/delete/createQuery(list/setFirstResult/setMaxResults)

●操作事务

session.beginTransaction()开启事务

session.getTransaction()获得当前事务

4.5事务操作

●开启事务:

beginTransaction()

●提交事务:

commit()

●回滚事务:

rollback()

5主配置文件详解

●名称:

hibernate.cfg.xml

●位置:

src(classpath)--->WEB-INF/classes

●配置BeanFactory异常

原因:

javaweb6.0项目,默认进行Bean校验,通常不使用。

解决方案:

方案1:

删除此jar

方案2:

hibernate配置取消

--1基本4项-->

com.mysql.jdbc.Driver

jdbc:

mysql:

///h_day01_db

root

1234

--2方言-->

org.hibernate.dialect.MySQL5Dialect

--3开发时,优化设置-->

--3.1显示生产sql语句-->

true

--3.2格式化方式显示sql-->

true

--4表的创建(了解)

*开发中表先由DBA创建好,通过表自动生成hbm.xml映射文件。

*学生时,方便使用。

*取值:

validate|update|create|create-drop

create:

每一次都将创建表,如果表已经存在将删除。

(测试)程序结束之后,表存在的。

create-drop:

每一次都将创建表,如果表已经存在将删除。

(测试)程序结束之后,将删除表。

注意:

必须执行factory.close()否则与“create”相同

update:

如果表不存在,将创建。

如果存在,将维护对应关系(映射文件-表)【】

注意:

只负责添加,但不进行删除。

validate:

运行时,将校验映射文件和表对应关系,如果一一对应程序正常运行,如果不对应抛异常。

-->

--5取消bean校验-->

none

--6将session绑定当本地线程中

*hibernatesession管理:

只将使用。

*当在cfg.xml配置thread,SessionFactory提供getCurrentSession()将可以使用。

*hibernate底层使用ThreadLocal线程局部变量,可以在一个线程中共享数据。

***get()##map.get(Thread)

***set(value)##map.put(Thread,value)

***remove()##map.remove(Thread)

-->

thread

6问题

●如果使用session.openSession()可以通过执行多次session.beginTransaction()进行多次事务操作。

●但如果使用session.getCurrentSession()只能使用一次,如果进行提交,默认情况下,将进行session.close(),解决此问题,spring采用OpenSessionInViewFilter过滤器。

@Test

publicvoiddemo01(){

Configurationconfig=newConfiguration().configure();

SessionFactoryfactory=config.buildSessionFactory();

Sessionsession=factory.getCurrentSession();

//开启事务

Transactiontransaction=session.beginTransaction();

//****操作

Useruser=newUser();

user.setUsername("rose2");

user.setPassword("1234");

session.save(user);

//5提交

mit();

//再开启SpringOpenSessionInViewFilter

Transactiontransaction2=session.beginTransaction();

//****操作

Useruser2=newUser();

user2.setUsername("tom");

user2.setPassword("1234");

session.save(user2);

//5提交

mit();

//6释放

session.close();

//7关闭工厂

factory.close();

}

7映射文件详解

●文件名称:

javabean名称.hbm.xml

●位置:

javabean同包

●内容:

7.1约束

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEhibernate-mappingPUBLIC

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

"http:

//www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

7.2属性基本设置

普通属性

name:

默认用于配置javabean属性名称

length:

配置长度,字符串默认255,mysql类型varchar(255)

column:

当前属性对应表中字段(列)名称,默认name的值

方式1:

column属性(attribute),

方式2:

子标签

type:

数据字段类型

方式1:

hibernate类型,例如:

string

方式2:

java类型,例如:

java.lang.String

方法3:

mysql类型,例如:

varchar(50)

日期时间类型

date,日期java.util.Date,对应jdbc类型:

java.sql.Date

time,时间java.util.Date,对应jdbc类型:

java.sql.Time

timestamp,时间戳java.util.Date(注意:

时间戳随着数据更改变化),对应jdbc类型:

java.sql.Timestamp

项目使用:

字符串、long(date.getTime())、日期时间

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1