- 浏览: 161171 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jiangyeqt:
好好的温习了一遍,讲的非常的到位
Session的原理 -
JAVA静静:
这是什么啊?有没有源码?看不懂诶!
开源框架Pushlet入门 -
colinzhy:
讲的很深刻,学习了
Session的原理 -
昔雪似花:
...
Map-iterator -
不相信眼泪:
恩,很好,多谢
.scc文件是做什么用的?
类拟框架:Apache OJB,JDO,Toplink,EJB(CMP)JPA,IBatis
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
* hibernate_home/hibernate3.jar
* hibernate_home/lib/*.jar
* MySql jdbc验动
3 创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
9 为了方便跟踪SQL执行,在hibernate.cfg.xml中加入
<property name="hibernate.show_sql">true</property>
创建HibernateUtils类,对重量级容量进行优化:
Session接口的CRUD操作
瞬时/持久化/离线对象示例:
适合查询及单个对象的编辑,适合于对象之间有清晰的关系,不适用于批量修改,关系复杂的对象及特定的sql功能
第一个项目
1 新建java项目
2 创建User Library,加入如下jar
* hibernate_home/hibernate3.jar
* hibernate_home/lib/*.jar
* MySql jdbc验动
3 创建hibernate配置文件hibernate.cfg.xml,为了便于调试最好加入log4j配置文件
<hibernate-configuration>
<session-factory >
<!-- 连接串 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<!-- 驱动类 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 适配器(反译) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 可以防表被重新建立 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<session-factory >
<!-- 连接串 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<!-- 驱动类 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 适配器(反译) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 可以防表被重新建立 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4 定义实体类,继承java.io.ser
5 定义User类的映射文件User.hbm.xml
<hibernate-mapping>
<class name="com.myobj.hibername.User" table="">
<id name="id">
<generator class="uuid"/>
<generator class="native"/>
<generator class="assigned"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
6 将User.hbm.xml文件加入到hibernate.cfg.xml文件中
<class name="com.myobj.hibername.User" table="">
<id name="id">
<generator class="uuid"/>
<generator class="native"/>
<generator class="assigned"/>
</id>
<property name="name"/>
<property name="password"/>
<property name="createTime"/>
<property name="expireTime"/>
</class>
</hibernate-mapping>
<session-factory >
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
7 编写hbm2ddl工具类,将实体类生成数据库表,手工建数据库
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate1</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/myobj/hibername/User.hbm.xml"/>
</session-factory>
public class ExportDB {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件,默认为.properties文件,
//读取xml文件用new Configuration().configure()
Configuration cfg=new Configuration().configure();
//生成工具类
SchemaExport export=new SchemaExport(cfg);
//生成数据库表
export.create(true, true);
}
}
8 开发客户端Client类添加数据
public static void main(String[] args) {
//读取hibernate.cfg.xml文件,默认为.properties文件,
//读取xml文件用new Configuration().configure()
Configuration cfg=new Configuration().configure();
//生成工具类
SchemaExport export=new SchemaExport(cfg);
//生成数据库表
export.create(true, true);
}
}
public class Client {
public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建SessionFactory,与数据库绑定,一个数据库对应一个SessionFactory,与二级缓存相关,为重量级对象,是线程安全的
SessionFactory factory=cfg.buildSessionFactory();
//
Session session=null;//不同于connction,是对其的封装,用时到连接池拿来conn
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存数据
session.save(user);
//提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
//关闭session,是非线程安程的
session.close();
}
}
}
}
}
******session.update()相关类都改,session.merge()只改当前类,session.delete(),都要开启事务******public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建SessionFactory,与数据库绑定,一个数据库对应一个SessionFactory,与二级缓存相关,为重量级对象,是线程安全的
SessionFactory factory=cfg.buildSessionFactory();
//
Session session=null;//不同于connction,是对其的封装,用时到连接池拿来conn
try {
session = factory.openSession();
//开启事务
session.beginTransaction();
User user = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//保存数据
session.save(user);
//提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally{
if(session!=null){
if(session.isOpen()){
//关闭session,是非线程安程的
session.close();
}
}
}
}
}
9 为了方便跟踪SQL执行,在hibernate.cfg.xml中加入
<property name="hibernate.show_sql">true</property>
持久化对象的状态
1 瞬时对象:使用new操作符初始化的对象不是立刻就持久的。
2 持久化对象:持久实例是任何具有数据库标识的实便函。
3 离线对象:Session关闭后持久化对象就变为离线对名象。
持久化对象的生命周期:
Transient对象new但在数据库中没有记录且没有被Session管理,
Persistent对象数据库中有记录,并Session在管理。在清理缓存(或脏数据检查)时与数据库同步。Session与一级缓存绑定.
Detached对象数据库中有记录,Session没有管理它。
创建HibernateUtils类,对重量级容量进行优化:
public class HibernateUtils {
private static SessionFactory factory;
//static块只执行一次
static{
try {
Configuration cfg = new Configuration().configure();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
public static Session getSession(){
return factory.openSession();
}
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
private static SessionFactory factory;
//static块只执行一次
static{
try {
Configuration cfg = new Configuration().configure();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
public static Session getSession(){
return factory.openSession();
}
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
}
Session接口的CRUD操作
瞬时/持久化/离线对象示例:
public class SessionTest extends TestCase {
public void testSave1(){
Session session=null;
Transaction tx=null;
User user=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态,未被Session管理
user=new User();
user.setName("ssssss");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//persistent状态,被Session管理,当属性发生改变的时候,hibernate会自动和数据库同步。
session.save(user);
user.setName("王五");
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//detached状态,被Session踢出缓存,未被管理
user.setName("张三");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
public void testSave1(){
Session session=null;
Transaction tx=null;
User user=null;
try{
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态,未被Session管理
user=new User();
user.setName("ssssss");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//persistent状态,被Session管理,当属性发生改变的时候,hibernate会自动和数据库同步。
session.save(user);
user.setName("王五");
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//detached状态,被Session踢出缓存,未被管理
user.setName("张三");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
Session接口
加载数据get与load的区别:
lazy代理:get没有, load支持lazy;
查不存在数据:get返回null,load抛出异常ObjectNotFoundException
//get查询数据
public void testReadByGetMethod1(){
Session session=null;
try {
session=HibernateUtils.getSession();
session.beginTransaction();
//采用get方式,马上发出查询sql,加载波User对象
User user=(User)session.get(User.class, "5c68c3ed206a327d01206a3281fa0001");
http://www.blogjava.net/Images/OutliningIn
public void testReadByGetMethod1(){
Session session=null;
try {
session=HibernateUtils.getSession();
session.beginTransaction();
//采用get方式,马上发出查询sql,加载波User对象
User user=(User)session.get(User.class, "5c68c3ed206a327d01206a3281fa0001");
http://www.blogjava.net/Images/OutliningIn
发表评论
-
Java通用数据访问层Fastser-DAL推荐
2014-12-29 10:20 5606本着不重复造轮子的原则,基于mybatis、spring ... -
hibernate基础-基本映谢标签和属性
2009-11-03 15:35 778hibernate基本映射 实体类------>表 实体 ... -
hibernate基础-映射关系(多对一I一对一)
2009-11-03 15:53 709多对一关联映射 many-to-one关联映射本质: * ... -
hibernate基础-映射关系(一对多I多对多).
2009-11-03 16:04 655一对多关联映射(one-to-many) 一对多关联映射利用了 ... -
hiberante基础-继承映射
2009-11-03 16:15 621继承映射的三种策略: * 单表继承,每棵类继承树使用一个表 ... -
hibernate基础-其他映射
2009-11-03 16:17 649set、list、array、map Collection: ... -
hibernate基础-自关联映射
2009-11-03 16:19 6481 class Node: private int id;pr ... -
hibernate基础-Component+[联合]映象
2009-11-03 16:22 600Component映射(值对象映射) 在hibernate中, ... -
hibernate基础-lazy策略
2009-11-03 16:33 585lazy策略可以使用在: * <class> ... -
hibernate基础-fetch抓取
2009-11-03 16:34 694抓取策略(单端代理的批量抓取) 1 保持默认,也就是fetch ... -
hibernate基础-Session_Flush
2009-11-03 16:37 830session flush测试: session ... -
hibernate基础-悲观[乐观]锁
2009-11-03 16:40 683悲观锁 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据 ... -
hiberante基出-缓存
2009-11-03 16:49 744一级缓存 * 一级缓存是缓存实体对象的 * 如果管理一 ... -
hibernate基础-HQL
2009-11-03 17:14 781在hql中关键字不区分大小写,但是属性和类名区分大不写简单属性 ... -
hibernate基础-HibernateTemplate
2009-11-03 17:20 7521 ,void delete ( Object entity ... -
[导入]Hibernate 深入研究之 Criteria
2009-11-03 17:35 673文章来源:http://www.cnblogs.com/ ... -
DetachedCriteria
2009-11-03 17:41 942org.hibernate.criterion.Detache ... -
Restrictions
2009-11-03 17:46 839HQL运算符 ... -
hibernate.cfg.xml
2009-11-03 17:56 651<?xml version="1.0&quo ... -
由映射文件生成表
2009-11-03 17:57 713import org.hibernate.cfg.Confi ...
相关推荐
3. "hibernate-1" - 这是源代码的第一部分,可能包含Hibernate的初步设置、基本的CRUD操作等入门内容,适合初学者上手。 4. "hibernate-4" - 可能涉及到Hibernate的第四部分,涵盖了一些高级主题,如HQL(Hibernate ...
以上就是"hibernate学习笔记-01helloworld"涵盖的初步知识,这个简单的示例是进一步深入Hibernate学习的基础。通过这个起点,可以逐步学习到更复杂的持久化操作,如关联映射、级联操作、缓存策略等高级特性。
以上便是对Hibernate基础的概览,实际开发中,还需要深入了解实体关系映射、集合映射、级联操作、缓存机制、事务管理、性能优化等方面的知识,才能更好地利用Hibernate提升开发效率并保证应用程序的稳定运行。...
hibernate是Java开发中的一款流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,而无需直接编写SQL语句。...希望这份压缩文件能详细地引导你走过Hibernate的初步学习阶段。
最后,我们将引入Ajax,实现初步的客户端交互功能。 在这个过程中,你将学习到如何使用Struts的拦截器来添加全局行为,如登录验证;如何利用Spring的AOP进行权限控制;以及如何利用Ajax和JSON进行前后端通信。这将...
通过上述内容的学习,我们对Hibernate 3 的基础知识有了初步的认识,了解了它的历史背景、基本配置方法以及简单的O/R映射示例。随着深入学习,我们将探索更多高级特性,如缓存管理、事务处理以及更复杂的查询功能。...
1. **Hibernate框架基础**: Hibernate通过对象模型到关系数据库的映射,简化了数据层的编程。它主要包括以下三部分: - **持久化对象(Persistent Objects)**:这些对象是Java类,它们代表数据库中的表或记录。 -...
### Hibernate基础教程知识点详解 #### 一、Hibernate简介(开源O/R映射框架) **Hibernate** 是一个开源的对象关系映射(Object/Relational Mapping,简称 O/R Mapping)框架,它为Java应用提供了使用关系型...
**Hibernate配置示例详解** Hibernate,作为Java领域中的一款强大且流行的对象关系映射(ORM)框架,极大地简化了数据库操作。...通过这个示例,你应该对Hibernate有了初步的认识,可以以此为基础进一步学习和实践。
在"chapter1"这个子目录中,你可能找到关于Hibernate 2.1的初步教程或示例,这将帮助你了解如何配置项目、创建实体类、设置映射关系、执行基本的CRUD操作等。通过对这些内容的学习,你可以掌握Hibernate的基本用法,...
在本文中,我们将深入探讨如何使用Hibernate 4框架进行初步的“Hello World”实践。Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过将Java对象与数据库表之间的...
通过以上步骤,你就成功地完成了使用Hibernate进行数据库操作的初步开发。在实际项目中,你可能需要进一步学习和掌握更多的Hibernate特性,如懒加载、级联操作、事务管理等,以便更高效、灵活地管理数据。同时,理解...
【标题】"Hibernate之第1解之-hibernate_demo_1" 涉及的主要内容是对Hibernate框架的基础理解和应用,这是Java开发中一个重要的持久化工具。这篇博客可能详细介绍了如何搭建Hibernate开发环境,以及进行初步的数据...
这个文件可能包含了关于Hibernate入门的初步讲解,包括基本概念、环境配置、简单数据插入的示例代码等。 **总结** Hibernate作为Java的ORM框架,简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层...
#### 首个Hibernate应用:从基础到进阶 ##### 第一部分:首个Hibernate应用概览 - **第一个类**:介绍了创建第一个Hibernate应用程序所需的最基本元素——定义一个持久化类。 - **映射文件**:阐述如何通过XML映射...
《Hibernate 进阶教程》是一本专为对Hibernate有初步了解并希望深入学习的开发者准备的手册。Hibernate作为Java领域中最流行的持久化框架之一,它极大地简化了数据库操作,使得开发者能够更专注于业务逻辑,而非繁琐...
第2章通常涉及Hibernate的基础,包括JDBC的初步介绍。这部分可能会讲解如何使用JDBC进行数据库连接、执行SQL查询和事务管理。Hibernate作为ORM工具,它的目标就是简化这些操作,将Java对象与数据库表之间的交互变得...
通过以上步骤,我们完成了Hibernate的初步配置,现在可以开始编写代码,使用Hibernate API来操作数据库,如保存、更新、查询和删除实体对象。理解并掌握这些基础,将有助于你在实际项目中更加高效地使用Hibernate,...