- 浏览: 62672 次
- 性别:
- 来自: 北京
最新评论
-
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 1930在http://my.oschina.net/xpbug/bl ... -
第八章 最大自序列和
2012-11-01 20:29 833第八章的问题是常见的---最大自序列和 的问题 书中提 ... -
第二章 旋转字符串的思考
2012-10-26 16:09 845编程珠玑第二章旋转字符串,abcdefg向左旋转3位,变为de ... -
Mongdb的upsert出现E11000 duplicate key errors的错误分析
2012-10-25 17:36 9153昨日上线的系统,今天查日志时发现有不少E11000 dupli ... -
开源的Mongodb java client -- mango发布
2012-07-20 21:53 1852Mango ---- 一个非常简单的操作mongodb的 ... -
浅出Apache Cxf
2012-03-05 20:14 0由于业务需要,开放了系统的 Web Se ... -
struts2源码浅析(四)
2011-10-19 17:15 1512接上一篇讲了filter后,现在request到了action ... -
struts2源码浅析(三)
2011-10-19 16:50 1568接上篇http://mazhiyuan.iteye.com/b ... -
struts2源码浅析(二)
2011-10-19 16:34 2226接上一篇http://mazhiyuan.iteye.com/ ... -
struts2源码浅析(一)
2011-10-19 16:18 17271. Struts2架构图 请求首先通过Filter ... -
struts2.1权威指南-笔记
2010-12-19 22:36 10951.struts 1.x 和 struts 2.x的 ... -
Hibernate学习总结4---对象状态
2010-12-10 16:14 949session 的几个主要方法: 1,save方法和persi ... -
Hibernate学习总结3 --配置文件
2010-12-10 16:10 938如果不希望使用默认的hibernate.cfg.xml 文件作 ... -
HF servlet&jsp 前6章要点总结
2010-11-21 11:58 881今天有时间把前6章主要讲servlet的内容坐下总结。好了,开 ... -
jquery源码分析之属性篇
2010-11-20 20:09 1914jquery提供了一些快捷函 ... -
HF servelt&jsp 定制标记开发 要点总结
2010-11-13 11:41 13061.标记文件使用一个页 ... -
bean相关标准动作总结+复习
2010-11-07 23:22 7561.<jsp:useBean>动作会定义一个变量, ... -
HF servlet&jsp ---include 指令和动作元素
2010-11-07 23:02 8101.include的2种方式 include多用于网站中可重用 ... -
HF servlet&jsp 总结—无脚本的JSP
2010-11-04 18:26 7948无脚本的JSP 8.1在JSP页面使用动作元素 <js ... -
HF servlet&jsp 总结—使用JSP
2010-11-02 17:37 746初看HF系列的servlet&jsp前6章主讲的ser ...
相关推荐
hibernate学习总结文档,帮助快速入门
hibernate 学习总结.doc
Hibernate学习总结.doc
hibernate3学习总结hibernate3学习总结hibernate3学习总结hibernate3学习总结
hibernate学习总结
Hibernate学习笔记Hibernate学习笔记Hibernate学习笔记Hibernate学习笔记
struts\Hibernate 学习总结.doc
hibernate学习总结
【吐血推荐】 hibernate学习笔记,学习大纲
Hibernate_学习总结 很好的资料 欢迎下载
1、内存断电后,数据就会消失 2、需要共享数据 3、内存空间有限 4、使数据格式,便于管理和查询 对象持久化的途径: 1、对象序列化:不适合大量数据操作 2、关系型数据库 企业计算的需求: 1...
Hibernate 初步认知
关于 Hibernate 的学习总结ppt 内包含了 inverse 的看法与eclipse安装 Hibernate 插件
老师精心总结的关于面试过程中有可能遇到的hibernate的面试题 关于hibernate的总结,用于个人学习和面试之用
学习HIbernate总结
对hibernate进行学习,总结的笔记
struts2、hibernate、spring学习总结文档,struts2、hibernate、spring学习总结文档
hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结