马士兵hibernate文档 (个人完善版)
- 格式:doc
- 大小:1.10 MB
- 文档页数:25
强人Hibernate文档笔记(上)Hibernate文档笔记共分为三个部分,此处是第一部分,讲述了对象定义、实例状态、JMX 集成和JCA 支持四个部分的内容。
一、对象定义.hibernate.SessionFactory对于单个数据库,被编译的映射,是一个线程安全的缓冲区。
是一个Session和ConnectionProvider客户端的工厂。
拥有可选的对过程级和集群级重复利用的数据的缓存(二级缓存)。
.hibernate.Session单线程、短生命周期的在应用程序和持久化存储系统之间的一个会话对象。
封装了一个JDBC连接。
是一个事务的工厂。
拥有强制的对持久化对象的缓存(一级缓存),当通过标识浏览对象之间关系和查找对象时使用。
3.Persistent objects and collections包含执久化状态和业务功能的短生命周期的、单线程对象。
可以是POJOs,通常是和Session(严格说,是单个Session)相关联的对象。
Session一关闭,他们将和Session 分离,可以自由的使用在应用层的任何地方。
(也就是说,作为传输对象使用(Transfer Object)。
)4.Transient and detached objects and collections不和当前Session关联的持久化类的实例。
他们可以被应用程序在不持久化时实例化,也可以被关闭的Session实例化。
.hibernate.Transaction (可选)应用程序用来指定一个原子操作的单线程、短生命周期的对象。
低层JDBC、JTA、CORBA 事务的抽象程序。
在相似的情况下,一个Session可以同时横跨多个事务。
事务划分,既可以使用低层的APIs,也可以使用Transaction。
.hibernate.connection.ConnectionProvider (可选)JDBC连接或JDBC连接池的工厂。
第二章基础语法1. 成员变量:类体内方法体外声明的变量 局部变量:方法体内声明的变量 重要:变量出了它所在的大括号就不起作用了,反之只要是在它的大括号内任何地方都起作用。
TestConvert.javapublic class TestConvert {public static void main(String arg[]) {int i1 = 123;int i2 = 456;double d1 = (i1+i2)*1.2;//系统将转换为double型运算float f1 = (float)((i1+i2)*1.2);//需要加强制转换符byte b1 = 67;byte b2 = 89;byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需//要强制转换符System.out.println(b3);//结果:-100double d2 = 1e200;float f2 = (float)d2;//会产生溢出System.out.println(f2);//infinity(无限)float f3 = 1.23f;//必须加flong l1 = 123;long l2 = 30000000000L;//必须加lfloat f = l1+l2+f3;//系统将转换为float型计算long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)}}TestConvert2public class TestConvert2 {public static void main(String[] args) {int i=1,j=12;float f1=(float)0.1; //0.1ffloat f2=123;long l1 = 12345678,l2=8888888888L;double d1 = 2e20,d2=124;byte b1 = 1,b2 = 2,b3 = 127;j = j+10;i = i/10;i = (int)(i*0.1);char c1='a',c2=125;byte b = (byte)(b1-b2);char c = (char)(c1+c2-1);float f3 = f1+f2;float f4 = (float)(f1+f2*0.1);double d = d1*i+j;float f = (float)(d1*5+d2);}}Fab.javapublic class Fab {public static void main(String[] args) {System.out.println(f(-9));}public static long f(int index) {if(index < 1) {System.out.println("invalid parameter!");return -1;}if(index == 1 || index == 2) {return 1;}long f1 = 1L;long f2 = 1L;long f = 0;for(int i=0; i<index-2; i++) {f = f1 + f2;f1 = f2;f2 = f;}return f;}}。
课程内容 (5)1 HelloWorld (5)2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping (5)3 常见的0/R框架(了解) (5)4 hibernate基础配置(重点) (5)5 ID生成策略(重点 AUTO) (5)6 Hibernate核心开发接口介绍(重点) (5)7 对象的三种状态(了解) (5)8 关系映射(重点) (5)9 Hibernate査询(HQL) (5)10 在Struts基础上继续完善BBS200 (5)11 性能优化(重点) (5)12 补充话题 (5)风格 (5)1 先脉络,后细节 (5)2 先操作,后原理 (5)3 重Annotation,轻xml配置文件 (5)资源 (5)1 http://www. (5)2 hibernate zh_CN文档 (5)3 hibernate annotation references (5)环境准备 (5)1 下载hibernate-distribution-3.3.2.GA-dist (5)2 下载hibernate-annotations-3[1].4.0.GA (5)3 注意阅读hibernate compatibility matrix(hibernate 网站download) (5)4 下载slf4jl.5.8 (6)Hibernate HelloWorld (6)1 建立新java 项目,名为hibernate_0100_HelloWorld (6)2 学习建User-library-hibernate,并加入相应的jar包 (6)3 引入mysql的JDBC驱动包 (6)4 在mysql中建立对应的数据库以及表 (6)5 建立hibernate 配置文件hibernate.cfg.xml (6)6 建立Student 类 (6)7 建立Student 映射文件 Student.hbm.xml (6)8 将映射文件加入到hibernate.cfg.xml中 (6)9 写测试类Main,在Main中对Student对象进行直接的存储测试 (6)10 FAQ: (6)11 Note: (6)12 建立能力 (7)建立 Annotation 版本的 HelloWorld (7)1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO)); (7)2 创建Teacher 类 (7)3 在hibernate lib 中加入annotation的jar包 (7)4 参考Annotaion文档建立对应的注解 (7)5 在hibernate.cfg.xml中建立映射<mapping class:.../〉 .. (7)6 参考文裆进行测试(注意文裆中缺少configure()的小bug) (7)7 FAQ: @不给提示 (7)What is and Why 0/R Mapping (7)1 JDBC操作数据库很繁琐 (7)2 Sql语句编写并不是面向对象的 (7)3 可以在对象和关系表之间建立关联来简化编程 (7)4 0/R Mapping 简化编程 (7)5 0/R Mapping跨越数据库平台 (7)6 Hibernate_0200_OR_Mapping_Simulation (7)0/R Mapping Frameworks (7)1 hibernate (7)2 toplink (8)3 jdo (8)4 JPA (8)Hibernate基础配置 (8)1 对应项目:Hibernate_0300_BasicConfiguration (8)2 介绍MSQL的图形化客户端 (8)3 hibernate.cfg.xml: hbni2ddl.auto (8)4 搭建日志环境并配置显示DDL语句 (8)5 搭建jUnit环境 (8)6 hibernate.cfg.xml:show_sql (8)7 hibernate.cfg.xml:format_sql (8)8 表名和类名不同,对表名进行配置 (8)9 字段名和属性相同 (8)10 字段名和属性名不同 (8)11 不需要psersistence的字段(不用列) (8)12 映射日期与时间类型,指定时间精度 (8)13 映射枚举类型( 比较少用) (9)14 字段映射的位置(field或者get方法) (9)15 @Lob (9)16 课外:CLOBBLOB类型的数据存取 (9)17 课外:Hibernate自定义数据类型 (9)18 hibernate 类型 (9)ID生成策略 (9)1 对应项目:hibernate_0400_ID (9)2 注意: (9)3 xml生成id (9)4 注解方式:@GeneratedValue (9)5 FAQ; (10)6 联合主键 (10)核心幵发接口介绍 (12)1 hibernate_0500_CoreAPI (12)2 Hibernate API文档需要单独下载 (12)3 Configuration (12)4 SessoinFactor (12)5 Session (12)6 SchemaExport (自动建表) (13)7 Query 接口 (13)8 Note: (13)三种对象状态 (14)1 上一个 project (14)2 三种状态的区分关键在于 (14)3 三种状态: (14)4 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比如改变属性的 (14)关系映射(重要) (15)对象之间的关系 (15)1 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 (15)2 简化问题: (15)3 —对一 (15)4 —对多 (15)5 组件映射 (15)一对一关联 (16)1 一对一单向外键关联 (16)2 一对一双向外键关联 (16)3 一对一单向主键关联(不重要) (17)4 一对一双向主键关联(不重要) (17)5 联合主键 (17)组件映射 (17)1 项目:hibernate_1100_component (17)2 对象关系:一个对象是另外一个对象的一部分 (17)3 数据库表:一张表 (17)4 annotation: @ Embeddable @Embbeded (17)5 xml: 使用<component,例如: (18)多对一与一对多 (18)1 多对一单向关联 (18)2 一对多单向关联 (19)3 一对多(多对一)双向关联 (19)多对多 (20)1 单向关联: (20)2 双向关联: (21)关联关系中的CRUD_Cascade_Fetch (21)1 hibernate_1700_one2many_many2one_bi_crud (21)2 设定cascade以设定在持久化时对于关联对象的操作(CUD,R归Fetch管) (21)3 cascade仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大 (21)4 铁律:双向关系在程序中要设定双向关联 (22)5 铁律:双向mappedBy (22)6 fetch (22)7 Update时@ManyToOne()中的cascade参数关系 (22)8 Delete时@ManyToOne()中的cascade关系 (22)9 O/RMapping 编程模型 (23)10 要想删除或者更新先做load,除了精确知道ID之外 (23)11 如果想消除关联关系,先设定关系为null.再删除对应记录,如果不删记录,该记录变成垃圾数据 (23)12 练习:多对多的CRUD (23)关系映射总结 (24)1 什么样的关系,设计什么样的表,进行什么样的映射 (24)2 CRUD,按照自然的理解即可(动手测试) (24)集合映射(不太重要) (24)1 项目名称:hibernate_1800_Collections_Mapping (24)2 Set (24)3 List (与Set差不多多个@OrderBy) (24)4 Map (24)继承映射(不太重要) (24)1 三种方式 (24)作业: (24)1 学生课程、分数的设计(重要) (24)2 设计: (25)3 树状结构的设计(至关重要) (25)Hibernate 查询(Query Language) (26)HQL vs EJBQL (26)1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)" 262 总结:QL应该和导航关系结合,共同为査询提供服务。
day1一. hibernate数据持久化组件对象持久化(Object Persistence):把数据保存在永久存储介质中(数据库)1.为什么要持久化:a.内存是暂时存储设备,断电后数据易丢失b.网络传输无法传输内存中的对象,需要将对象外化c.内存中数据查询,组织不方便d.内存只能存储少量数据2.怎样持久化a.对象序列化 --> 二进制流合并存储,粒度大,无规律不支持检索只适合少数个别对象的序列化b.用JDBC/EJB/ORM 将数据存入数据库用JDBC:(Java DB Connection)优点:底层开发,控制力强(细); 效率最高; 标准的(SQL)JDBC,有可移植性缺点:过于复杂; 代码量大; 可维护性差(代码重用性低);用EJB:(Entity Java Bean)优点:直接自动生成JDBC代码; 持久对象(PO)的状态由服务器管理; 声明式的事务缺点:功能不全(特殊的组件,不能做继承关系); EJB容器是侵入性容器,失去OO的优点; 调试更复杂用ORM:(object relation mapping)对象关系映射优点:自动生成JDBC(代码量下降); 使用(plain oldest java object---pojo),非侵入型; 提供状态管理; 难度下降,不需要容器缺点:由于开源, 文档少; bug多; 技术支持差结论: 用java开发-->必须将数据持久化-->用数据库持久化-->须用ORM-->需要用Hibernate二. Hibernate1.POJO类plain oldest java object,就是标准的Java Bean。
2.HibernateHibernate -->一个可以自动的根据xml完成对象关系映射,并持久化到数据库的开源组件。
其底层也是由JDBC实现的。
hibernate是通过xml文件的配置,对数据库的底层的方言,以及数据库连接所需的信息,以及连接数据库的驱动。
Hibernate开源O/R映射框架表示层业务层持久层数据库不适合批量操作数据不适合使用数据库的特定功能Hibernate的定义Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级得对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JA V A EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口Hibernate的核心接口共有5个,分别为:SessionFactory、Session、Transaction、Query和Configuration。
通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
SessionFactory接口SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,并负责创建Session 对象。
这里用到了工厂模式。
需要注意的是,SessionFactory并不是轻量级得,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Session接口Session接口负责执行被持久化的CRUD操作,但需要注意的是Session对象是非线程安全的。
Transaction接口Transaction接口负责事务相关的操作。
Query和Criteria接口Query和Criteria接口负责执行各种数据库查询。
它可以使用HQL语言或SQL语言两种表达方式。
Configuration接口Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。
在Hibernate的启动过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory 对象。
第一篇:官方文档的处理方法,摘自官方在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持。
1.使用SQLQueryhibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的.1Session.createSQLQuery();1.1标量查询最基本的SQL查询就是获得一个标量(数值)的列表。
1sess.createSQLQuery("SELECT * FROM CATS").list();2sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值。
Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
如果要避免过多的使用ResultSetMetadata,或者只是为了更加明确的指名返回值,可以使用addScalar()。
1sess.createSQLQuery("SELECT * FROM CATS")2 .addScalar("ID", Hibernate.LONG)3 .addScalar("NAME", Hibernate.STRING)4 .addScalar("BIRTHDATE", Hibernate.DATE)这个查询指定了:SQL查询字符串,要返回的字段和类型.它仍然会返回Object数组,但是此时不再使用ResultSetMetdata,而是明确的将ID,NAME和BIRTHDATE 按照Long, String和Short类型从resultset中取出。
同时,也指明了就算query 是使用*来查询的,可能获得超过列出的这三个字段,也仅仅会返回这三个字段。
1.Configuration2.SessionFactory3. Transaction4.保存学生记录的例子保存、更新一定要显式调用事务5.many—to one的级连更新例子6.hibernate查询复杂的查询需求–Restrictions,Projections的用法结果集排序投影Projections,提供聚合函数的类对多个字段进行投影7.分页查询8.根据模版例子查询9.离线查询10.HQL聚合函数11.HQL例子12.清除Session内部缓存的两个方法,Session.evict(Object o) ,Session.clear() 清空内部缓存13.inverse14.15.Hibernate设置二级缓存16.使用经验使用Hibernate 必须首先提供这些基础信息以完成初始化工作,为后继操作做好准备。
这些属性在hibernate 配置文件(hibernate.cfg.xml或hibernate.properties)中加以设定。
Hibernate会自动在当前的CLASSPATH 中搜寻hibernate.cfg.xml文件并将其读取到内存中作为后继操作的基础配置。
Configuration config= new Configuration().configure();会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
它在多个应用线程间进行共享。
通常情况下,整个应用只有唯一的一个会话工厂。
如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。
SessionFactory负责创建Session 实例。
我们可以通过Configuation实例构建SessionFactory:Configuration config = new Configuration().configure();SessionFactory sessionFactory= config.buildSessionFactory();使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)。
(3)面向对象考虑问题的3步 (3)THIS关键字 (3)STATIC关键字(STATIC变量存放在内存中的DATA SEG中) (3)PACKAGE 关键字 (3)访问控制 (3)方法的重写 (3)S UPER关键字 (4)继承中的构造方法 (4)对象转型 (4)多态的3个必要条件 (4)动态绑定 (4)抽象类ABSTRACT (4)F INAL关键字 (4)接口 (5)5异常分类 (5)异常的捕获和处理 (5)THROW和THROWS的区别 (6)6二维数组 (6)7 S TRING B UFFER和S TRING的区别 (7)7I TERA TOR接口 (7)S ET接口 (7)L IST接口 (8)C OMPARABLE接口 (8)读的效率和写的效率 (8)M AP接口 (8)A UTO BOXING/UNBOXING(JDK1.5) (9) (9)处理流 (9)缓冲流 (9)转换流 (9)数据流 (9)Object流 (10)10线程的概念 (10)线程控制基本方法 (10)sleep方法 (10)join方法 (10)yield方法 (10)synchronized 关键字:可修饰方法,执行过程中锁定当前对象 (10)sleep()和wait()的区别 (10)notify()/notifyAll() (11)叫醒当前wait()的线程 (11) (11)TCP协议和UDP协议 (11)S OCKET (11)C OMPONENT (12)C ONTAINER (12)F RAME (12)布局管理器 (12)内部类 (13)G RAPHIC 类 (13)鼠标事件适配器 (13)W INDOW 事件 (13)匿名类 (13)swith 语句,每一条情况最后都需加break,否则会穿透。
多个case可以合并到一起Java中swith语句只能探测int类型(包括可以转换成int的类型)Return语句终止方法的运行并指定要返回的数据面向对象考虑问题的3步1.由哪些类,哪些对象构成2.这些类各自有哪些属性3.这些类之间有什么联系this关键字◆在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
Hibernate教程前言1、 java对象持久化技术1.1 、hibernate是什么1.2、软件模型1.2.1、概念模型1.2.2、关系数据模型1.2.3、域模型1.2.4、域对象1.2.5、域对象之间的关系1.2.6、域对象的持久化概念提示:1.3、数据库访问模式1.3.1、ORM模式1.3.2、主动域对象模式1.3.3、JDO模式1.3.4、CMP模式一、数据源层-O/R Mapping主要介绍三层架构,如何分层?(逻辑上的分层,二个原则)数据层技术的选择:直接使用1.1、SQL/JDBC:优点:很多开发者熟悉关系数据库管理系统,理解SQL,也知道如何使用表和外键进行工作。
此外,他们可以始终使用众所周知并广泛使用的DAO设计模式对业务逻辑隐藏复杂的JDBC代码和不可移植的SQL。
缺点:为域中的每个类手工编写持续性代码的工作是非常可观的,特别是需要支持多种SQL方言时。
这项工作通常会消耗很大一部分的开发努力。
此外,当需求改变时,一个手工编码的解决方案总是需要更多的注意和维护努力。
1.2、序列化:Java有一个内建的持久化机制:序列化提供了将对象图(应用状态)写到字节流中的能力,然后它可能被持久化到文件或数据库中。
持久化也被Java的远程方法调用(RMI)使用来为复杂对象传递值语义。
持久化的另一种用法是在机器集群中跨节点复制应用状态。
缺点:很不幸,一个相互连接的对象图在序列化之后只能被当作一个整体访问,如果不反序列化整个流就不可能从流中取出任何数据。
这样,结果字节流肯定会被认为不适合进行任意的检索或聚合。
甚至不可能独立地访问或更新一个单独的对象或子图。
非常明显,因为当前特定的技术,序列化不适合于作为高并发性的Web和企业应用的持久化机制。
在特定的环境中它被作为桌面应用的适当的持久化机制。
1.3EJB entity beansEJB1.1实体Bean在实践中彻底地失败了。
EJB规范的设计缺陷阻碍了Bean管理的持续性(BMP)实体Bean有效地执行。
+ 您现在的位置:视频下载资料下载:如果您无法下载,请致电010 - 58052712,我们将制作光盘邮寄给您。
请使用电驴软件按顺序下载阅读(电驴使用方法点击这里)邮寄给您的光盘,收费100元(收费流程点击这里)如下:∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_项目源码.rar∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate初印象∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_HelloWorld∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Annotation版本的HelloWorld∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Annotation版本的HelloWorld_总结∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_设定自动提示∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate模拟实现∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_阶段总结∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_常见OR框架简介∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_总结与提纲∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_MySQL客户端介绍∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_hbm2ddl∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_先建表还是先建类∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_搭建Log4J日志环境∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_搭建Junit日志环境∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_showsql_formatsql∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_hibernate基础配置∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Annotation字段映射位置∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_常见问题解答∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_JUnit_BeforeClass不报异常的bug处理∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_XML_配置∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_XML_配置_Annotation配置∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_Annotation配置_IDENTITY_S...∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_Annotation配置_Table_Gene...∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_联合主键_XML∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_ID生成策略_联合主键_Annotation ∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_Configuration_SessionFactory...∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_JTA简介∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_对象三种状态∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_Delete∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_Get_Load∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_Get_Load_2∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_Update∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_saveOrUpdate_Clear_Flush∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_CoreAPI_SchemaExport_and_总结∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一对一单向外键关联_annotation ∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一对一单向外键关联_xml∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一对一双向外键关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一对一单双向主键关联_不重要∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_联合主键关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_阶段总结∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_组件映射∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_多对一单向关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一对多单向关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2__一对多_多对一_双向关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2__多对多单向关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_多对多双向关联∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_1∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_2∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_3∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_4∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_5∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_关联关系的CRUD_Cascade_Fetch_6∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_集合映射∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_作业∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_继承映射∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_作业解答_树状映射∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_作业解答_Student_Course_Score_1∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_作业解答_Student_Course_Score_2∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate查询_HQL_EJBQL_QBC_QBE_1∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate查询_HQL_EJBQL_QBC_QBE_2∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate查询_HQL_EJBQL_QBC_QBE_3∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate查询_HQL_EJBQL_QBC_QBE_4∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_Hibernate查询_HQL_EJBQL_QBC_QBE_5∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_1.N问题∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_list_iterate∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一级缓存_二级缓存_查询缓存∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_一级缓存_二级缓存_查询缓存∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_事务隔离机制_悲观锁_乐观锁_1∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_事务隔离机制_悲观锁_乐观锁_2∙点击下载·尚学堂马士兵_Java视频教程_Hibernate3.3.2_总结∙点击下载·尚学堂马士兵_Struts2_Struts2简介及学习方法简介∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_1∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_2∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_3∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_4∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_5∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_6∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_7_1∙点击下载·尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2∙点击下载·尚学堂马士兵_Struts2_Struts2_Namespace_命名空间∙点击下载·尚学堂马士兵_Struts2_Struts2_Action∙点击下载·尚学堂马士兵_Struts2_Struts2_Path_路径问题∙点击下载·尚学堂马士兵_Struts2_Struts2_ActionMethod_DMI_动态方法调用∙点击下载·尚学堂马士兵_Struts2_Struts2_ActionWildcard_通配符配置∙点击下载·尚学堂马士兵_Struts2_Struts2_用Action的属性接收参数∙点击下载·尚学堂马士兵_Struts2_Struts2_用DomainModel接收参数∙点击下载·尚学堂马士兵_Struts2_Struts2_用ModelDriven接收参数∙点击下载·尚学堂马士兵_Struts2_Struts2_2.1.6版本的中文问题∙点击下载·尚学堂马士兵_Struts2_简单数据验证_1∙点击下载·尚学堂马士兵_Struts2_简单数据验证_2∙点击下载·尚学堂马士兵_Struts2_访问Web元素_1∙点击下载·尚学堂马士兵_Struts2_访问Web元素_2∙点击下载·尚学堂马士兵_Struts2_模块包含∙点击下载·尚学堂马士兵_Struts2_默认Action∙点击下载·尚学堂马士兵_Struts2_Action总结∙点击下载·尚学堂马士兵_Struts2_常见问题∙点击下载·尚学堂马士兵_Struts2_结果类型_result_type_1∙点击下载·_尚学堂马士兵_Struts2_结果类型_result_type_2∙点击下载·尚学堂马士兵_Struts2_result_type_常见问题∙点击下载·尚学堂马士兵_Struts2_Global_Results_全局结果集∙点击下载·尚学堂马士兵_Struts2_动态结果集_dynamic_result∙点击下载·尚学堂马士兵_Struts2_带参数的结果集∙点击下载·尚学堂马士兵_Struts2_结果集总结∙点击下载·尚学堂马士兵_Struts2_作业∙点击下载·尚学堂马士兵_Struts2_总结与OGNL开始∙点击下载·尚学堂马士兵_Struts2_OGNL_1∙点击下载·尚学堂马士兵_Struts2_OGNL_2∙点击下载·尚学堂马士兵_Struts2_OGNL_3∙点击下载·尚学堂马士兵_Struts2_OGNL_4∙点击下载·尚学堂马士兵_Struts2_OGNL_5∙点击下载·尚学堂马士兵_Struts2_OGNL_6∙点击下载·尚学堂马士兵_Struts2_OGNL_7∙点击下载·尚学堂马士兵_Struts2_OGNL_8∙点击下载·尚学堂马士兵_Struts2_Struts标签_1_property∙点击下载·尚学堂马士兵_Struts2_Struts标签_2_set∙点击下载·尚学堂马士兵_Struts2_Struts标签_3_bean_1∙点击下载·尚学堂马士兵_Struts2_Struts标签_4_bean_2∙点击下载·尚学堂马士兵_Struts2_Struts标签_5_include∙点击下载·尚学堂马士兵_Struts2_Struts标签_6_fielderror∙点击下载·尚学堂马士兵_Struts2_Struts标签_7_if∙点击下载·尚学堂马士兵_Struts2_Struts标签_8_iterator∙点击下载·尚学堂马士兵_Struts2_Struts标签_9_ui∙点击下载·尚学堂马士兵_Struts2_Struts标签_总结∙点击下载·尚学堂马士兵_Struts2_BBS2009准备_1∙点击下载·尚学堂马士兵_Struts2_BBS2009准备_2∙点击下载·尚学堂马士兵_Struts2_BBS2009_初步了解ExtJS∙点击下载·尚学堂马士兵_Struts2_BBS2009_建立项目框架_1∙点击下载·尚学堂马士兵_Struts2_BBS2009_建立项目框架_2∙点击下载·尚学堂马士兵_Struts2_BBS2009_建立数据库∙点击下载·尚学堂马士兵_Struts2_BBS2009_建立Model与Service层_1∙点击下载·尚学堂马士兵_Struts2_BBS2009_作业∙点击下载·尚学堂马士兵_Struts2_BBS2009_建立Model与Service层_2∙点击下载·尚学堂马士兵_Struts2_BBS2009_实现页面与Action_1∙点击下载·尚学堂马士兵_Struts2_BBS2009_实现页面与Action_2∙点击下载·尚学堂马士兵_Struts2_BBS2009_总结Category_增删改查∙点击下载·尚学堂马士兵_Struts2_声明式异常处理_实现∙点击下载·尚学堂马士兵_Struts2_声明式异常处理_原理∙点击下载·尚学堂马士兵_Struts2_DefaultActionRef_Bug∙点击下载·尚学堂马士兵_Struts2_I18N原理∙点击下载·尚学堂马士兵_Struts2_I18N_1_Action级别I18N问题∙点击下载·尚学堂马士兵_struts2_I18N_2_package与Application级别I18N问题∙点击下载·尚学堂马士兵_struts2_I18N_3_处理资源文件中的参数∙点击下载·尚学堂马士兵_Struts2_I18N_4_动态语言切换∙点击下载·尚学堂马士兵_Struts2_拦截器_准备∙点击下载·尚学堂马士兵_Struts2_源码解析∙点击下载·尚学堂马士兵_Struts2_拦截器原理模拟∙点击下载·尚学堂马士兵_Struts2_自定义拦截器∙点击下载·尚学堂马士兵_Struts2_使用token拦截器控制重复提交∙点击下载·尚学堂马士兵_Struts2_认识默认的拦截器∙点击下载·尚学堂马士兵_Struts2_类型转换_1∙点击下载·尚学堂马士兵_Struts2_类型转换_2∙点击下载·尚学堂马士兵_Struts2_类型转换_3∙点击下载·尚学堂马士兵_Struts2_总结∙点击下载·尚学堂马士兵_Struts2_源码与文档∙点击下载·尚学堂科技_马士兵_JDBC_MySQL_BBS项目课堂实录视频教程∙点击下载·尚学堂科技_马士兵_BBS项目补充_MySQL简明视频教程∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第01章_JAVA简介_源代码_及重要说明∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第02章_基础语法∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第03章_面向对象∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第04章_异常处理∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第05章_数组∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第06章_常用类∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第07章_容器∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第08章_IO∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第09章_线程∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第10章_网络∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第11章_GUI∙点击下载·尚学堂科技_马士兵_JAVA视频教程_JDK5.0_下载-安装-配置∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第02章_递归补充∙点击下载·尚学堂科技_马士兵_坦克大战视频教程_java_eclipse∙点击下载·尚学堂科技_马士兵_在线聊天系统雏形视频教程_java_eclipse∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_专题_日期处理∙点击下载·尚学堂科技_马士兵_JAVA视频教程_J2SE_专题_正则表达式∙点击下载·尚学堂科技_马士兵_坦克大战图片版∙点击下载·尚学堂科技_马士兵_JAVA_坦克大战网络版视频教程∙点击下载·尚学堂科技_马士兵_JAVA_系列视频教程_BBS_2007∙点击下载·尚学堂科技_马士兵_JAVA_网上商城项目视频讲解∙点击下载·尚学堂科技_马士兵_轻松愉快LINUX视频教程∙点击下载·尚学堂科技_张志宇_SERVLET_JSP_视频教程∙点击下载·尚学堂_JUnit_00源码与文档∙点击下载·尚学堂_JUnit_01_junit_introduction∙点击下载·尚学堂_JUnit_02_assert_string∙点击下载·尚学堂_JUnit_03_hamcrest∙点击下载·尚学堂_JUnit_04_annotation∙点击下载·尚学堂_JUnit_05_annotation2∙点击下载·尚学堂_JUnit_06_runmultitests∙点击下载·尚学堂_JUnit_07_conclusion∙点击下载·尚学堂_JUnit_08_faq∙点击下载·尚学堂科技_马士兵_设计模式_01_Observer∙点击下载·尚学堂马士兵_设计模式热身_Thinking_In_OO_00_源码与文档∙点击下载·尚学堂马士兵_设计模式热身_Thinking_In_OO_01∙点击下载·尚学堂马士兵_设计模式热身_Thinking_In_OO_02∙点击下载·尚学堂马士兵_设计模式热身_Thinking_In_OO_03∙点击下载·尚学堂马士兵_设计模式热身_Thinking_In_OO_04∙点击下载·尚学堂马士兵_设计模式之_Iterator_00_源码与文档∙点击下载·尚学堂马士兵_设计模式之_Iterator_01∙点击下载·尚学堂马士兵_设计模式之_Iterator_02∙点击下载·尚学堂马士兵_设计模式之_Iterator_03.avi∙点击下载·尚学堂马士兵_设计模式之_Iterator_04.avi∙点击下载·尚学堂马士兵_设计模式之_Iterator_05∙点击下载·尚学堂马士兵_设计模式之_Iterator_06∙点击下载·尚学堂马士兵_设计模式之_Strategy_00_源码与文档∙点击下载·尚学堂马士兵_设计模式之_Strategy_01∙点击下载·尚学堂马士兵_设计模式之_Strategy_02∙点击下载·尚学堂马士兵_设计模式之_Strategy_03∙点击下载·尚学堂马士兵_设计模式之_Strategy_04∙点击下载·尚学堂马士兵_设计模式之_Strategy_05∙点击下载·尚学堂马士兵_设计模式之_Strategy_06.avi 详情∙点击下载·尚学堂马士兵_设计模式之_Strategy_07.avi 详情∙点击下载·尚学堂马士兵_设计模式之_Strategy_08∙点击下载·尚学堂马士兵_设计模式之_Strategy_09∙点击下载·尚学堂马士兵_设计模式之_动态代理_00_源码与文档∙点击下载·尚学堂马士兵_设计模式之_动态代理_01∙点击下载·尚学堂马士兵_设计模式之_动态代理_02∙点击下载·尚学堂马士兵_设计模式之_动态代理_03∙点击下载·尚学堂马士兵_设计模式之_动态代理_04∙点击下载·尚学堂马士兵_设计模式之_动态代理_05∙点击下载·尚学堂马士兵_设计模式之_动态代理_06∙点击下载·尚学堂马士兵_设计模式之_动态代理_07∙点击下载·尚学堂马士兵_设计模式之_动态代理_08∙点击下载·尚学堂马士兵_设计模式之_动态代理_09∙点击下载·尚学堂马士兵_设计模式之_工厂系列_00_源码与文档∙点击下载·尚学堂马士兵_设计模式之_工厂系列_01∙点击下载·尚学堂马士兵_设计模式之_工厂系列_02∙点击下载·尚学堂马士兵_设计模式之_工厂系列_03∙点击下载·尚学堂马士兵_设计模式之_工厂系列_04∙点击下载·尚学堂马士兵_设计模式之_工厂系列_05∙点击下载·尚学堂马士兵_设计模式_责任链_00_源码与文档_ChainOfResponsibility_Filter_Inter...∙点击下载·尚学堂马士兵_设计模式_责任链_01∙点击下载·尚学堂马士兵_设计模式_责任链_02∙点击下载·尚学堂马士兵_设计模式_责任链_03∙点击下载·尚学堂马士兵_设计模式_责任链_04∙点击下载·尚学堂马士兵_设计模式_责任链_05∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_源码与文档∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_8∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_7∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_6∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_5∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术_4.avi∙点击下载·尚学堂马士兵_设计模式之_追美眉的技术∙点击下载·马士兵_设计模式之_追美眉的技术_2∙点击下载·马士兵_设计模式之_追美眉的技术_1∙点击下载·网络课堂_JavaSE补充_Path_ClassPath_00_源码与文档∙点击下载·网络课堂_JavaSE补充_Path_ClassPath_01∙点击下载·网络课堂_JavaSE补充_Path_ClassPath_02∙点击下载·马士兵_扯淡系列_00_当工作遇上找工作∙点击下载·马士兵_扯淡系列_01_找工作的过程_资料与文档∙点击下载·马士兵_扯淡系列_01_找工作的过程_6∙点击下载·马士兵_扯淡系列_01_找工作的过程_5∙点击下载·马士兵_扯淡系列_01_找工作的过程_4∙点击下载·马士兵_扯淡系列_01_找工作的过程_3∙点击下载·马士兵_扯淡系列_01_找工作的过程_2∙点击下载·马士兵_扯淡系列_01_找工作的过程_1∙点击下载·马士兵_扯淡系列_02_面试题的道与术_1∙点击下载·马士兵_自学能力训练课程(初级)_01_Log4J∙点击下载·马士兵_自学能力训练课程(初级)_02_junit.avi∙点击下载·马士兵_Flex_0100_ActionScript.rar∙点击下载·马士兵视频教程_XML_AJAX_DOM4J_JavaDB_MetaData.rar。
java-hibernate笔记(讲义)-【尚学堂马士兵老师】知识点终结:1 新建项目2 学习建立user-library-hibernate,并加入相应的jar包a项目右键-build path-configure build path-add libraryb选择user-library,在其中新建library,命命为hibernatec 在该library中加入hibernate所需要的jar包hibernate3.3.2/hibernate3.jar/lib/required目录下的所有包6个Sl4j-nop jar3 引入mysql的JDBC驱动包4 在MYSQL中建数据库和相应的表student(id,name,age)5 建立hibernate配置文件hibernate.cfg.xml参考文档中COPY,修改对应的数据库连接,6 建立student类7 建立映射文件Student.hbm.xml 参考相应文档8 将映射文件加到hibernate-cfg.xml中搭建日志环境并配置显示DDL语句slf的实现:slf4j nodep ,log4j ,jdk logging api ,apache common-log.slf4j.nop.jar是slf-api.jar其相应的接口实现把slf的接口对到log4j的实现,在user library中hibernate,把slf的实现slf4j-nop-1.5.8.jar去掉,添加log4j的实现log4j-1.2.15.jar,再添加一个slf-api和log4j转换器slf4j-log4j12-1.5.8.jar.把slf的接口转换成log4j的接口.最后添加一个log4j的配置文件log4j.properties利用HIBERNA TE导出数据库建表//读取配置文件hibernate.cfg.xmlConfiguration cfg=new AnnotationConfiguration().configure();(有注解时使用AnnotationConfiguration),configure()可以手动指定配置文件名称. Configuration cfg=new Configuration(),会默认读取hibernate.properties文件//创建schemaExport对象import org.hibernate.tool.hbm2ddl.SchemaExport;SchemaExport export=new SchemaExport(cfg);//创建数据库表export.create(true, true);对象映射(采用Annotation注解方式)1 建表Create table teacher(id int primary key,name varchar(20),title varchar(20));2 创建teacher类,并进行注解@import javax.persistence.Entity;import javax.persistence.Id;在bean中加注解@ Entity,@Id(加在getId()上面)3 在hibernate中加入annotation相应的jar包hibernate-annotations.jar/lib目录下加入相应的包ejb3-persistence.jar, hibernate-commons-annotations.jar注意:annotation文档中并没有提到hibernate-annotations.jar包4 参考annotation文档建立对应的注解5 在hibernate.cfg.xml中建立映射<mapping class=”com.xx.xx”/>6 示例//AnnotationConfiguration;Configuration cfg=new AnnotationConfiguration();SessionFactory sf=cfg.configure().buildSessionFactory();Session session=sf.openSession();session.beginTransaction();session.save(t);//session.getTransaction().commit();session.close();sf.close();对象映射(采用配置文件方式)1 在相应的类中建立对应的配置文件.例如Student类对应的配置文件Student.hbm.xml<hibernate-mapping package="com.model"><class name="Student" table=" Student" ><id name="id" column="id"></id><property name="name" column="name" /><property name="age" column="age" /></class></hibernate-mapping>2 在hibernate.cfg.xml中添加该映射文件Student.hbm.xml即可<!-- 建立对应的配置文件关联相应的数据库表 --><mapping resource="com/model/Student.hbm.xml"/>注意包名的写法3 示例//读取配置文件hibernate.cfg.xmlConfiguration cfg=new Configuration().configure();//创建SessionFactorySessionFactory sf=cfg.configure().buildSessionFactory();//创建sessionSession session=sf.openSession();session.beginTransaction();session.save(s);session.getTransaction().commit();session.close();sf.close();hibernate.cfg.xml配置hibernate.hbm2ddl.auto属性取值: validate | update | create | create-drop在sessionfactory创建时,自动检查数据结构,或者将数据库schema(表)的DDL导出到数据库,使用create-drop时,在显式关闭sessionfactory时,将drop掉数据库schema.validate 加载hibernate时,验证创建数据库表结构create 每次加载hibernate,重新创建数据库表结构create-drop 加载hibernate时创建,退出是删除表结构update 加载hibernate自动更新数据库结构表名和类名不同的情况时,对表名进行配置1 在注解中import javax.persistence.Table;@Table(name=”TableName”)2 在XML文件中<hibernate-mapping package="com.model"><class name="Teacher" table="Teacher" >配置对应的table属性为相应的表名<id name="id" column="id"></id>…</class></hibernate-mapping>字段名和属性名相同,默认为对于annotation,如果什么注解都不写的话,相当于加了注解@Basic实体bean中所有的非static非transient的属性都可以被持久化, 除非你将其注解为@Transient.所有没有定义注解的属性等价于在其上面添加了@Basic注解. 通过@Basic注解可以声明属性的获取策略(fetch strategy):对于XML文件中不用写column.字段名和属性名不同时Annotation:@column(name=”column_name”)加上相应的getXXX()方法上XML:column属性不需要persistence的字段import javax.persistence.Transient;@ Transient 意思是说这个属性是透明的,不进行持久化,存储的时候不存进去映射日期和时间类型,指定时间精度Annotation:import javax.persistence.Temporal;@Temporal(TemporalType.TIME)XML:指定type<class name="Teacher" table="Teacher" ><id name="id" column="id"></id><property name="name" type="time" />type=time或date</class>枚举类型的转换@Enumerated(EnumType.STRING)字段映射的位置推荐写在gexXXX方法上在程序中通过Hibernate 来保存java.sql.Clob 或者java.sql.Blob 实例时,必须包含两个步骤:1 在一个数据库事务中先保存一个空的Blob 或Clob 实例。
1 JA V A对象持久化技术概述。
(1)1.1 应程序的分层体系结构 (1)1.2 软件的模型 (2)1.3 直接通过JDBC API 来持久化实体域对象,见试例,采用的是硬编码的形式 (2)1.4 ORM 简介 (2)1.5 实体域对象的其他持久化模式 (2)1.6 Hibernate API简介 (3)2 Hibernate入门 (3)2.1 创建Hibernate的配置文件 (4)2.2 创建持久化类 (4)2.3 创建测试库,这个不需要,自已打一个测试库就行了 (5)2.4 创建对象关系映射文件 (5)2.5 hibernate的初始化见实例 (6)2.6 运行helloapp应用 (6)1JA V A对象持久化技术概述。
1.1 应程序的分层体系结构1.目前用得比较多的是是三层,三层主要:表述层、逻辑层、数据库层。
2.分层有两种方式物理层和逻辑层物理分层方式这里典型的是分布式,每一层都在运行在单独的机器上。
逻辑分层,单个软件模块完成特定的功能。
3.软件分层的特征:每一层由一相关组件(如EJB)共同完成特定的功能;层与层之间存在自上而下的依赖关系,这里的依赖关系主要是上层对下层的访问,同时只能是自上而下依赖;下层对上层都有一个公开API接口。
4.软件分层的优点:伸缩性、可维护性、可扩展性、可重用性、可管理性。
5.软件分层后,结构复杂,开始必须花大量时间进行架构,层之间有依赖关系,底层的修改表明上层也会修改,结构比较复杂感,调试也比较复杂,通常对互相协作要求比较高,适合大型软件开发,不适合小型应用。
6.持久化层,也即数据库层,有许多ORM软件可以完成这个,hibernate所要做的就是持久化层的工作,是一种中间件,他实现的是为业务逻辑层提供接口。
1.2 软件的模型这里主要是软件各个功能和业务范围的抽象,建立模型帮助我们更好了解需求和整体把握软件布局提升开发效率概念模型(主要应用于软件需求分析阶段,业务模型建立)、关系模型(主要应于数据设计初始,数据库关系模型的建立)、域模型域模型包括,实体域对象(hibernate对表的抽象)、过程域对象(业务逻辑)、事件域对象(sevlet 容器)域对象关系:关联(表的映射对象的外键关系),依赖(如:继承)、聚集(暂时未清楚和关联关系的区别??)、一般化(继承)1.3 直接通过JDBC API 来持久化实体域对象,见试例,采用的是硬编码的形式1.4 ORM 简介ORM 对象关系映射(Object-Relation Mapping)模式指的是在单个组件中负责所有实体域对象的持久化,封装数据访问细节. 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
课程内容---…详细包括整合struts hibernate------------------------------------1.面向接口(抽象)编程的概念与好处2.IOC/DI的概念与好处a)inversion of controlb)dependency injection3.AOP的概念与好处4.Spring简介5.Spring应用IOC/DI(重要)a)xmlb)annotation6.Spring应用AOP(重要)a)xmlb)annotation7.Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)a)opensessionInviewfilter(记住,解决什么问题,怎么解决)8.Spring JDBC面向接口编程…(面向抽象编程)1.场景:用户添加2.Spring_0100_AbstractOrientedProgramminga)不是AOP:Aspect Oriented Programming3.好处:灵活什么是IOC(DI),,,有什么好处1.把自己new的东西改为由容器提供a)初始化具体值b)装配<?xml version="1.0"?>-<beans><bean class="erDAOImpl" id="u"/>(class 是个类。
Id就等于构造了一个对象)<bean class="erService" id="userService"><property bean="u" name="userDAO"/> </bean>(把u这个对象注入到UserService这个类的一个userDAO的一个属性里)-</beans>2.好处:灵活装配Spring简介包括整合struts hibernate------------------------------------1.项目名称:Spring_0200_IOC_Introduction2.环境搭建a)只用IOCi.spring.jar , jarkata-commons/commons-loggin.jar3.IOC容器a)实例化具体beanb)动态装配4.AOP支持a)安全检查b)管理transactionSpring IOC配置与应用1.FAQ:不给提示:a)window – preferences – myeclipse – xml – xml catalogb)User Specified Entries – addi.Location: D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsdii.URI:file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd iii.Key Type: Schema Locationiv.Key: /schema/beans/spring-beans-2.5.xsd2.注入类型a)Spring_0300_IOC_Injection_Typeb)setter(重要)c)构造方法(可以忘记)d)接口注入(可以忘记)3.id vs. Name(可以把Id换成name,没什么区别!)a)Spring_0400_IOC_Id_Nameb)name可以用特殊字符4.简单属性的注入a)Spring_0500_IOC_SimplePropertyb)<property name=… value=….>在配置文件里直接赋值!(在此简单属性为int和string,会自动转换)5.<bean 中的scope属性a)Spring_0600_IOC_Bean_Scopeb)singleton 单例(无论去多少次都是同一个bean)c)proptotype 每次创建新的对象6.集合注入a)Spring_0700_IOC_Collectionsb)很少用,不重要!参考程序7.自动装配a)Spring_0800_IOC_AutoWireb)byNamec)byTyped)如果所有的bean都用同一种,可以使用beans的属性:default-autowire-<bean class="erDAOImpl" name="userDAO"><property name="daoId" value="1"/> </bean><bean class="erDAOImpl" name="userDAO2"><property name="daoId" value="2"/> </bean><bean class="erService"autowire="byType" scope="prototype" id="userService"></bean> </beans>(这里会报错,因为有两个userDAO和UserDAO2都是int类型!)(如果说byname则会显示第一个的内容“1”!,因为UserService类里面的userDAO属性与第一个的名字一样!)8.生命周期a)Spring_0900_IOC_Life_Cycleb)lazy-init (不重要)c)init-method与destroy-methd 不要和prototype一起用(了解)<bean class="erDAOImpl" id="u"></bean><bean class="erService" id="userService" scope="prototype"destroy-method="destroy" init-method="init"></bean></beans>9.Annotation第一步:a)修改xml文件,参考文档<context:annotation-config />b)默认按类型by typec)如果想用byName,使用@Qulifierd)写在private field(第三种注入形式)(不建议,破坏封装)e)如果写在set上,@qualifier需要写在参数上f)10.@Resource(重要)a)加入:j2ee/common-annotations.jarb)默认按名称,名称找不到,按类型c)可以指定特定名称d)推荐使用e)不足:如果没有源码,就无法运用annotation,只能使用xml11.@Component@Service @Controller @Repository(四个一样的功能!!)a)初始化的名字默认为类名首字母小写b)可以指定初始化bean的名字首先先加载ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 即读beans.xml里面的内容,然后通过找从com.bjsxt开始“scan”含@component的类,找到之后就初始化对象,结果在其一个属相的set方法上找到一个源为“u”的一个bean,于是就加载那个bean!12.@Scope13.@PostConstruct = init-method;(在构造对象后执行此方法)@PreDestroy = destroy-method;(在容器销毁前执行此方法)什么是AOP1.面向切面编程Aspect-Oriented-Programminga)是对面向对象的思维方式的有力补充2.Spring_1400_AOP_Introduction3.好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码a)Filterb)Struts2的interceptor4.概念:a)JoinPoint 释意:切面与原方法交接点即切入点b)PointCut 释意:切入点集合是com.xyz.someapp.service.下面的任何类,任何方法,任何返回值的一个切入点的集合。
3.hibernate.hbm2ddl.auto :在SessionFactory 创建时,自动检查数据库结构,或者将数据库schema 的DDL 导出到数据库。
使用create-drop 时,在显式关闭SessionFactory 时,将删除掉数据库schema。
例如:validate | update | create | create-dropcreate :如果没有表就创建update :如果表结构更新,就更新validate :每次插入表的时候看看表结构有没有更新。
理论上是先建类后建表:这个时候只要你的类建好了,可以跨数据库。
实际中先建表比先建类多,建好表以后要对数据库进行优化,比如建索引,建试图,各种各样的优化。
project\etc目录下面有很多示例性的文档,log4j的文档就在那个下面。
SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); SessionFactory的建立是很耗费时间的,应该像连接池一样,只建立一次,以后要用就直接从那用。
Hibernate文档建议我们自己写一个辅助类,用单例来做。
JUnit的一个bug:@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}在这句话的时候配置文件如果有的时候写错了,她悄悄把错误隐藏起来了。
解决的方法:可以对这句话加try catch块8.表名和类名不一致的时候:@Entity@Table(name="_teacher")public class Teacher {10字段名和属性名不一致的时候@Column(name="_name")public String getName() {return name;}11 不需要的字段的设置@Transientpublic String getYourWifeName() {return yourWifeName;}12 映射指定的时间日期@Temporal(TemporalType.TIME)public Date getBirthDate() {return birthDate;}在注解里面如果一个注解的属性名字叫value,你可以不写,直接写后面的值,如@Temporal(value=“TemporalType.TIME”)可写成上面的那样。
如果不写会把时间日期都放到表里面指定时间时默认TemporalType.TIMESTAMP还有time 和date 不过最常用的还是默认的。
13注意映射枚举类型用habernate xml的方式很麻烦在设定枚举时:以字符串方式显示:EnumType.STRING 以数字书序显示:EnumType.ORDINAL@Enumerated(EnumType.STRING)public Gender getGender() {return gender;}自增Mysql autoincreatment Oracle sequence如果将来的程序想跨数据库平台选native或uuid@GenerateValue注意是javax.persistence里的value,默认的是nativeincrement(很少用)用于为long, short 或者int 类型生成唯一标识。
只有在没有其他进程往同一张表中插入数据时才能使用。
在集群下不要使用。
identity(用得较多)对DB2,MySQL,MS SQL Server,Sybase 和HypersonicSQL 的内置标识字段提供支持。
返回的标识符是long,short 或者int 类型的。
sequence(用得较多)在DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence),而在Interbase 中使用生成器(generator)。
返回的标识符是long,short 或者int 类型的。
hilo使用一个高/低位算法高效的生成long,short 或者int 类型的标识符。
给定一个表和字段(默认分别是hibernate_unique_key 和next_hi)作为高位值的来源。
高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
uuid用一个128-bit 的UUID 算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP 地址)。
UUID 被编码为一个32 位16 进制数字的字符串。
guid在MS SQL Server 和MySQL 中使用数据库生成的GUID 字符串。
Native(用得较多)根据底层数据库的能力选择identity、sequence 或者hilo 中的一个。
在Oracle里面表名不能以下划线开头@Id@GeneratedValue (默认的是auto相当于native,在jpa1.0中,只有四种ID生成策略,下面的b、c、d、e)这种方式虽然是跨平台的,但是由于各种数据库生成数据的方式不同,生成的数据会有所不同。
如果要在跨平台的数据库中生成的方式也相同,可以采用e。
但极少会出现跨数据库平台的情况。
用auto的方式在Oracle中sequence生成策略只能起名hibernate sequence,不能起别的名字。
跨数据库平台的情况:自己写了一个给别人用的类库,这个类库可以跨平台。
public int getId() {return id;}@Id@GeneratedValue(strategy=GenerationType.TABLE, generator="Teacher_GEN")这里也可指定生成别的方式。
GenerationType可以在javaee文档里面找public int getId() {return id;}在Oracle中生成方式如果是sequence,可以指定一个sequence的名字。
@SequenceGenerator(name="teacherSEQ", sequenceName="teacherSEQ_DB")public class Teacher {@Id@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="teacherSEQ")public int getId() {return id;}6、设计数据库的时候建立主键,能用一个字段就尽量用一个字段,不要用多个字段。
但是不可避免,有些数据库表别人已经设计好了,有两个字段作为主键,这时可以在hibernate中使用联合主键。
在程序中用到面向对象的思想,要建立一个主键类,并对该类实现serializable接口。
实现序列化的原因:出现这种情况:系统实现集群,很多台服务器对外服务,一台服务器当机了,正好有一部分属性在那边;另一种情况:如果内存满了,会用到虚拟内存(把硬盘上的一部分空间作为内存),有部分内容就要存到硬盘上去了。
重写equals和hashcode的原因:主键要保证唯一性,不仅在数据库中要保证,一系列的对象要放在内存中,也要有所区分。
所以一定要重写equals 和hashcode,而且逻辑不能乱写,不能用父类中的equals和hashcode。
要对比是否相同,首先要查hash表的hashcode,再与hashcode相同的对比。
public class StudentPK implements java.io.Serializable{private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic boolean equals(Object o) {if(o instanceof StudentPK) {StudentPK pk = (StudentPK)o;if(this.id == pk.getId() && .equals(pk.getName())) {return true;}}return false;}@Overridepublic int hashCode() {return .hashCode();}}getCurrentSession 和openSession 得到的不是同一个类,所以这两种方式不能混用。
有两种事物,一种是指针对数据库本身的不能处理分布式的事物.另外一种是JTA事物,能处理分布式的。
<property name="current_session_context_class">thread</property> tomcat不能使用这种:因为它没有相关的实现<property name="current_session_context_class">jta</property>public void testClear() {Session session = sessionFactory.getCurrentSession();session.beginTransaction();Teacher t = (Teacher)session.load(Teacher.class, 1);System.out.println(t.getName());session.clear();Teacher t2 = (Teacher)session.load(Teacher.class, 1);System.out.println(t2.getName());//如果没有clear,数据库里面就只有一条更新语句session.getTransaction().commit();}public void testFlush() {Session session = sessionFactory.getCurrentSession();session.beginTransaction();Teacher t = (Teacher)session.load(Teacher.class, 1);t.setName("tttt");session.flush();t.setName("ttttt");//如果没有flush,数据库里面就只有一条更新语句,如果用clear,就变成了transitant状态,就不发语句了。