- 浏览: 64274 次
- 性别:
- 来自: 北京
最新评论
-
wucaifang819787:
你好!麻烦问下不知道哪个图片行不行的:http://dl.it ...
struts2源码浅析(四) -
ChenXzh:
高手,佩服得五体投地
关于struts2报There is no Action mapped for namespace / and action name xxx_xxx
引入:
模型不匹配(阻抗不匹配)
java面向对象语言,对象模型,其主要概念有:继承,关联,多态等;数据库是关系模型,其主要概念有:表,主键,外键等。
解决方法:
1.使用JDBC手工转换
2.使用ORM(object relation mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate,TopLink,OJB
技术:
SessionFactoroy 类似于jdbc中的DriverManager,通过sessionFactory获得的session类似于jdbc中获得的数据库连接connection。
在jdbc中事务是自动提交的,每一条语句默认就是一个事务。而在hibernate中,事务是默认关闭的,所以要手动的开启事务Transaction。
<property name="hibernate.hbm2ddl.auto">create</property> 自动创建数据库表,该属性有四个取值:create-drop(多用于测试,程序启动创建表,运行结束删掉表,在真实的情况下,不应使用),create(在启动前把表删掉),update,validate
注意:在做试验时,有可能未提交事务,表中也插入了数据。可能是跟你使用的数据库有关。你的数据库的存储引擎是MyISAM的话,它不支持事务和外键。当你在程序中未使用过事务时,它同样能够把数据更新到表中。mysql3.23的默认存储引擎就是MyISAM.如果你的数据库存储引擎是InnoDB的话,它支持事务的回滚,外键,行级锁定等。在你的程序中未使用事务的话,他一开始把数据更新到表中,但是没有遇到提交事务的语句,所以就把该操作进行回滚了,所以在表中看不到更新的结果。mysql的较新版本的存储引擎用的都是InnoDB,性能更好。
开发流程:
由domain object->mapping->db(官方推荐)
由db开始,用工具生成mapping和domain object(开发中使用较多)
由映射文件开始。
Domain Object的限制:
1,默认的构造方法(必须的,受内部机制影响,反射需要不带参数的构造方法)
2,有无意义的标识符id(主键)(可选)
3,非final的,对懒加载有影响(可选)
持久化对象(Persistent Object)及其集合(Collection)
生命期短促的单线程的对象,包含了持久化状态和商业功能。它们可能是普通的JavaBeans,唯一特别的是他们现在从属于且仅从属于一个Session。
获得session连接:
(1)使用户自行提供的jdbc连接
SessionFactory可以使用一个用户自行提供的JDBC连接来打开一个Session。这种设计可以让应用程序来自己管理JDBC连接。应用程序必须小心,不能在同一个连接上打开多个并行的session。
java.sql.Connection conn = datasource.getConnection(); Session sess = sessions.openSession(conn); // start a new transaction (optional) Transaction tx = sess.beginTransaction(); java.sql.Connection conn = datasource.getConnection(); Session sess = sessions.openSession(conn); // start a new transaction (optional) Transaction tx = sess.beginTransaction();
(2)使用hibernate提供的jdbc连接
可以让SessionFactory替你打开连接。SessionFactory必须事先知道连接的参数,有几种不同的方法设置参数:
1,传递一个java.util.Properties到Configuration.setProperties()方法。
2,在classpath的根目录中提供hibernate.properties文件。
3,通过java -Dproperty=value指定使用系统属性。
4,在hibernate.cfg.xml文件中包含<property>元素。这个文件应该放在你的CLASSPATH的根目录中。
如果你使用这种方法,打开一个Session是非常简单的:
Session sess = sessions.openSession(); // obtain a JDBC connection and // instantiate a new Session // start a new transaction (optional) Transaction tx = sess.beginTransaction(); Session sess = sessions.openSession(); // obtain a JDBC connection and // instantiate a new Session // start a new transaction (optional) Transaction tx = sess.beginTransaction();
系统级别的配置只能通过java -Dproperty=value或者在hibernate.properties文件中配置,而不能通过传递给Configuration的Properties实例来配置。
方言:
如果你不需要使用基于native或者sequence的主键自动生成算法,或者悲观锁定(使用Session.lock() 或 Query.setLockMode())的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得你手工指定它们。
绑定SessionFactory到JNDI
假若你希望把SessionFactory绑定到一个JNDI命名空间,用hibernate.session_factory_name这个属性指定一个名字(比如,java:comp/env/hibernate/SessionFactory)。如果这个属性省略了,SessionFactory不会被绑定到JNDI。(在一个只读的JNDI默认值实现的环境中,这特别有用。比如,Tomcat。)
当把SessionFactory 绑定到JNDI,Hibernate会使用hibernate.jndi.url,hibernate.jndi.class的值来获得一个初始化上下文的实例。如果他们没有指定,就会使用默认的InitialContext。
如果你选择使用JNDI,EJB或者其他工具类就可以通过JNDI查询得到SessionFactory。
发表评论
-
JAVA多线程-厕所问题
2012-11-22 11:55 1985在http://my.oschina.net/xpbug/bl ... -
第八章 最大自序列和
2012-11-01 20:29 900第八章的问题是常见的---最大自序列和 的问题 书中提 ... -
第二章 旋转字符串的思考
2012-10-26 16:09 893编程珠玑第二章旋转字符串,abcdefg向左旋转3位,变为de ... -
Mongdb的upsert出现E11000 duplicate key errors的错误分析
2012-10-25 17:36 9213昨日上线的系统,今天查日志时发现有不少E11000 dupli ... -
开源的Mongodb java client -- mango发布
2012-07-20 21:53 1886Mango ---- 一个非常简单的操作mongodb的 ... -
浅出Apache Cxf
2012-03-05 20:14 0由于业务需要,开放了系统的 Web Se ... -
struts2源码浅析(四)
2011-10-19 17:15 1595接上一篇讲了filter后,现在request到了action ... -
struts2源码浅析(三)
2011-10-19 16:50 1614接上篇http://mazhiyuan.iteye.com/b ... -
struts2源码浅析(二)
2011-10-19 16:34 2279接上一篇http://mazhiyuan.iteye.com/ ... -
struts2源码浅析(一)
2011-10-19 16:18 17861. Struts2架构图 请求首先通过Filter ... -
struts2.1权威指南-笔记
2010-12-19 22:36 11311.struts 1.x 和 struts 2.x的 ... -
Hibernate学习总结4---对象状态
2010-12-10 16:14 993session 的几个主要方法: 1,save方法和persi ... -
Hibernate学习总结3 --配置文件
2010-12-10 16:10 995如果不希望使用默认的hibernate.cfg.xml 文件作 ... -
HF servlet&jsp 前6章要点总结
2010-11-21 11:58 935今天有时间把前6章主要讲servlet的内容坐下总结。好了,开 ... -
jquery源码分析之属性篇
2010-11-20 20:09 1954jquery提供了一些快捷函 ... -
HF servelt&jsp 定制标记开发 要点总结
2010-11-13 11:41 13351.标记文件使用一个页 ... -
bean相关标准动作总结+复习
2010-11-07 23:22 7951.<jsp:useBean>动作会定义一个变量, ... -
HF servlet&jsp ---include 指令和动作元素
2010-11-07 23:02 8371.include的2种方式 include多用于网站中可重用 ... -
HF servlet&jsp 总结—无脚本的JSP
2010-11-04 18:26 8478无脚本的JSP 8.1在JSP页面使用动作元素 <js ... -
HF servlet&jsp 总结—使用JSP
2010-11-02 17:37 800初看HF系列的servlet&jsp前6章主讲的ser ...
相关推荐
**Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...
**hibernate学习总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Java世界中,Hibernate 提供了一种在对象模型和关系数据库之间进行转换的机制,使得开发...
**Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...
【Struts+Spring+Hibernate 学习总结】 SSH(Struts、Spring、Hibernate)是Java Web开发中的一个经典企业级应用架构,它将MVC设计模式应用到Web应用的各个层次,实现了良好的分层和解耦。这篇学习总结旨在帮助读者...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
Hibernate是Java开发中的一款强大的对象关系映射(ORM)框架,它为开发者提供了一种在Java应用程序中操作数据库的面向对象方式,极大地简化了数据库操作的复杂性。通过使用Hibernate,开发者可以避免直接编写SQL语句...
这些资料构成了一套完整的Hibernate学习路径,从基础到高级,从配置到实践,对于理解Hibernate的核心机制和提升开发技能都非常有帮助。通过阅读和研究这些内容,开发者可以更熟练地运用Hibernate进行数据库操作,...
【北大青鸟Hibernate学习资料】 Hibernate是一个开源的Java ORM(对象关系映射)框架,它为开发者提供了在Java应用中管理关系数据库数据的便捷方式。本学习资料集合了多个关于Hibernate的重要主题,包括对象关系...
**Hibernate核心知识点详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以...阅读提供的"Hibernate.pdf"文档将进一步深入理解这些概念,并提供实际示例帮助学习。
HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发人员以面向对象的方式编写查询,而不是直接使用SQL。这使得查询更加符合Java开发人员的思维习惯,同时也更容易理解和维护。 例如,如果有一个...