Hibernate配置与事务管理

数据库中 @num:代表一个变量

Set @num = 10;

Select @[email protected] from dual;  dual:临时表

得到结果 20

Hibernate:运用数据持久化,使用ORM框架

JSP:java server page

ORM:object relationship mapping

Hibernate:对JDBC进行轻量级的对象封装,可取代CMP(容器管理持久化),完成数据持久化的重任

JDBC:java数据连接技术 java database connection

Hibernate入门:

1.O/R Mapping:对象-关系映射,使用元数据(meata data)描述对象与数据库间的映射

2.Entity Bean :重量级框架

3.JDO:java database object  OJB:java桥接技术

4.JPA:java持久化API(应用程序接口)

开发Hibernate的第一步:

1.导入包require文件夹(必要)

2.创建实体对象

3.在src下面创建xml(hibernate.cfg.xml)-----导入dtd(基本配置文件----链接数据库)

<hibernate-configuration>

<session-factory>

<!--配置方言 告诉hibernate是哪个数据库-->

<property name=”dialect”>org.hibernate.dialect.MySqlDialect</property>

<!--配置mysql驱动-->

<property name=”connection.driver.class”>com.mysql.jdbc.Driber</property>

<!--配置mysql的url地址 注意不要空格-->

<property name=”connection.url”>jdbc:mysql://127.0.0.1:3306/text</property>

<!--配置mysql的使用名称 注意不要空格-->

<property name=”connection.username”>root</property>

<!--配置mysql的密码 注意不要空格-->

<property name=”connection.password”>qwe</property>

<!--配置显示sql语句-->

<property name=”show_sql”>true</property>

<!--自动创建一个表 create没有则创建,每次只有一次,会打印sql语句;update:没有则创建,有则直接用,不会打印sql语句-->

<property name=”hbm2ddl.auto”>update</property>

<!--格式化sql语句-->

<property name=”format-sql”>true</property>

<!--映射orm的xml student.hdm.xml-->

<mapping resource=”com/my/cfg/studnet.hdm.xml”/>

</session-factory>

</hibernate-configuration>

4.实体类中必须设置get/set;必须提供一个默认空的构造函数;如果是集合:一般用set集合

集合:set(不能重复) list(能重复);对象实现可序列化(serializable)

5.创建一个实体数据关系映射 对象名称.hbm.xml(链接对象)  DTD:文档类型 DDL:数据库定义语言

<!--packpage 对包文件进行映射-->

-------不写table=t_student/column=sid等,默认表对应类名,属性对应列名

 

<hibernate-mapping package=”com.my.bean”>

<!--对哪个实体bean进行映射 name必须对应的类的名字 table对应你要映射的表名-->

<class name=”student” table=”t_student”>

<!--对应表的标识符 id对应属性的id(标识符) type 可选择项-->

<id name=”id” column=”sid” type=”java.lang.Integer”>

<!--配置主键的生成策略 自动增长id-->

<generator class=”increment”></generator>

</id>

<!--name为对象中的属性名,column对应表中的列名-->

<property name=”name” column=”name” type=”java.lang.string”></property >

<property name=”birthday” column=”birthday”></property >

</class>

</hibernate-mapping>

http(session):与用户打交道的session

hibernate中的session:与数据库打交道

 

事务与数据库打交道

数据库中的执行的一系列操作看做一个整体作为一个事务,要不全部执行成功,要不全部执行失败;----事务

MySQL默认事务自动提交

 

Show variables like %auto%;

Set autocommit = 0;默认事务提交

Rollback;回滚

Commit;提交-----不能再实现回滚

Savepoint nine;-----设置一个保存点,备份

Rollback to nine;----回滚到nine所保存的数据

Lock table 表名 write;-----锁表

Unlock tables;-----解锁表

Set names utf-8;------设置中文的字符集

POJO:javaBean

VO:value object    DO:database object   DTO:database translet object数据传输对象

Teacher t = new Teacher();

增加:session.save(t);

1.增加时,直接添加id;

session.saveorupdate(t);

1.增加时,如果有id时,则不添加,可修改数据;

查询:Teacher t = (Teacher) session.get(Teacher.class,1);

Teacher t1 = (Teacher)session.get(Teacher.class,1);

1.只有一条数据,但是从缓存中取得第二条的数据;不管用不用数据,都会在数据库中提取数据

2.如果找不到对象,则返回null

Teacher t = (Teacher) session.load(Teacher.class,1);

1.load中存在懒加载;当没有使用对象时,不会在数据库中提取数据,当使用对象时,才发送sql语句到数据库

  1. 如果找不到对象,则报错(objectNotFoundException)--------找不到对象

Teacher t = new Teacher(“xiaoming12121”);

瞬时态:1.new的对象

2.还未与session相关联,还不能持久化到数据库中

Session.save(t);

持久态:1.与session相关联

2.在数据库中有与之对应的数据

Session.close();

脱管态:1.与数据库中有与之对应的数据

2.与session断开连接

3.已经提交

实体关系映射:一对一/一对多/多对多

主键:跟业务不挂钩,不轻易变动的数据

主键关联:主键对主键

<!--必须依赖person的id的值-->

在配置一对一中的id时,

生成策略:

<generator class=”foreign”>

<param name=”property”>person</param>

</generator>

<onetoone name=”IDcard” class=”包名.类名” constrained=”true” ></onetoone>

另一个表:

<onetoone name=”person” class=”包名.类名” cascade=”IDcard”></onetoone>

外键关联:外键对主键

在IDcard中:

<many-to-one name=”person” column=”p_id” class=”包名.类名” unique=true></many-to-one>

在双向关联时:(外键建多方,Inverse建在一方,控制权交给多方) Inverse:反转

 

1.加载配置 configuration

2.生成一个session工厂

3.获得session    

openSession():每次都获得一个新的连接/getCurrentSession():每次都是同一个session

4.开启一个事务(添加回滚,提交)

时间: 2024-12-25 20:05:47

Hibernate配置与事务管理的相关文章

配置spring事务管理的几种方式

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager. 具体如下图:

spring配置代理事务管理配置

方式一 <!-- 用代理类对 TransactionManager进行组合切面事务管理 --> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" propagation="REQUIRED" read-only="tr

。。。Hibernate 查询数据 事务管理。。。

在Hibernate中,查询数据的时候,可能会需要事务的管理,为什么呢?因为在查询数据库的时候,Hibernate将数据从数据库里面查询出来之后,会先把数据放入Hibernate的session缓存里,下次你再次发送同一个请求的时候,Hibernate会先从缓存里面查数据,如果发现有这样的数据,OK,那就直接把这个数据拿过去显示,如果没有的话,才会到数据库里面查询显示.这个就是说,在页面显示的数据是A,到后台把数据改为B,现在前台刷新,则还会显示数据A,不会显示数据B的原因!

Spring对Hibernate事务管理【转】

在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你可以在hibernate.cfg.xml我文件中把它设置为事务自动提交: <property name="hibernate

spring与hibernate整合事务管理的理解

在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你可以在hibernate.cfg.xml我文件中把它设置为事务自动提交: xml代码 1 <property name="d

Spring对Hibernate事务管理

谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中 我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自 动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你可以在hibernate.cfg.xml我文件中把它设置 为事务自动提交: <property name="hiberna

Spring注解配置事务管理——问题

在上下文中配置: <!-- 配置注解驱动的Spring MVC控制器编程模型. --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /

spring 配置事务管理器

在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.transaction.support.TransactionTemplate模板,它是Spring所提供的事务管理器的模板 •事务的创建.提交和回滚是通过PlatformTransactionManager接口来完成的. •当事务产生异常时会回滚事务,在默认的实现中所有的异常都会回滚.我们可以通过配置

[转]Spring的事务管理难点剖析(1):DAO和事务管理的牵绊

原文地址:http://stamen.iteye.com/blog/1441758 有些人很少使用Spring而不使用Spring事务管理器的应用,因此常常有人会问:是否用了Spring,就一定要用Spring事务管理器,否则就无法进行数据的持久化操作呢?事务管理器和DAO是什么关系呢?   也许是DAO和事务管理如影随行的缘故吧,这个看似简单的问题实实在在地存在着,从初学者心中涌出,萦绕在老手的脑际.答案当然是否定的!我们都知道:事 务管理是保证数据操作的事务性(即原子性.一致性.隔离性.持久