Hibernate annotation 学习笔记(3)

2018-11-28 15:49

Hibernate—annotation 学习笔记 第11页 共109页

} session.beginTransaction(); session.save(t); session.getTransaction().commit(); session.close(); sf.close(); 7、 FAQ:@ 后不给提示

解决方法:windows→Proferences→seach “Content Assist”设置Auto-Activation如下:

第8课 什么是O/R Mapping

一、 定义:

ORM(Object Relational Mapping)---是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。简单说:ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据中。本质上就是将数据从一种形式转换到另外一种形式。

Struts、JSF、Jsp、WebWork等表示层Action/FormBean,配置文件、模板页面分层注意:业务层及持久层不能依赖于表示层业务层Spring(主要是使用Struts与Hibernate做集成的)等IoC容器,AOP、Hibernate的支持Hibernate(冬眠):把对象存入数据库中(具体的过程不用做它)映射文件,Hibernate接口,DAO模式持久层O--实体模型数据层R–关系模型 分层后,上层不需要知道下层是如何做了。 分层后,不可以循环依赖,一般是单向依赖。

二、 Hibernate的创始人:

Gavin King

Hibernate—annotation 学习笔记 第12页 共109页

三、 Hibernate做什么:

1、 就是将对象模型(实体类)的东西存入关系模型中, 2、 实体中类对应关系型库中的一个表,

3、 实体类中的一个属性会对应关系型数据库表中的一个列 4、 实体类的一个实例会对应关系型数据库表中的一条记录。

%%将对象数据保存到数据库、将数据库数据读入到对象中%%

OOA---面向对象的分析、面向对象的设计 OOD---设计对象化 OOP---面向对象的开发

阻抗不匹配---例JAVA类中有继承关系,但关系型数据库中不存在这个概念这就是阻抗不匹配。Hibernate可以解决这个问题

四、 Hibernate存在的原因: 1、 解决阻抗不匹配的问题;

2、 目前不存在完整的面向对象的数据库(目前都是关系型数据库); 3、 JDBC操作数据库很繁琐 4、 SQL语句编写并不是面向对象

5、 可以在对象和关系表之间建立关联来简化编程 6、 O/R Mapping简化编程 7、 O/R Mapping跨越数据库平台

8、 hibernate_0200_OR_Mapping_Simulation

五、 Hibernate的优缺点:

1、 不需要编写的SQL语句(不需要编辑JDBC),只需要操作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可

以提高生产效;

2、 因为使用Hibernate只需要操作对象就可以了,所以我们的开发更对象化了;

3、 使用Hibernate,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其

它任务的操作);

4、 Hibernate实现了透明持久化:当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹

的单纯对象—称为POJO对象(最纯粹的对象—这个对象没有继承第三方框架的任何类和实现它的任何接口) 5、 Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架 6、 Hibernate代码测试方便。

六、 Hibernate使用范围:

1. 针对某一个对象,简单的将它加载、编辑、修改,且修改只是对单个对象(而不是批量的进行修改),这种情况比较适用; 2. 对象之间有着很清晰的关系(例:多个用户属于一个组(多对一)、一个组有多个用户(一对多)); 3. 聚集性操作:批量性添加、修改时,不适合使用Hibernate(O/映射框架都不适合使用); 4. 要求使用数据库中特定的功能时不适合使用,因为Hibernate不使用SQL语句;

第9课 Hibernate的重点学习:Hibernate的对象关系映射

一、对象---关系映射模式 ? ? ?

属性映射; 类映射: 关联映射:

Hibernate—annotation 学习笔记 第13页 共109页

? ? ?

二、常用的O/R映射框架:

1、 Hibernate 2、 Apache OJB

3、 JDO(是SUN提出的一套标准—Java数据对象) 4、 Toplink(Orocle公司的)

5、 EJB(2.0X中有CMP;3.0X提出了一套“Java持久化API”---JPA)

6、 IBatis(非常的轻量级,对JDBC做了一个非常非常轻量级的包装,严格说不是O/R映射框架,而是基于SQL的映射(提供

了一套配置文件,把SQL语句配置到文件中,再配置一个对象进去,只要访问配置文件时,就可得到对象)) 7、 JAP(是SUN公司的一套标准)

a)

意愿统一天下 一对一; 一对多; 多对多。

第10课 模拟Hibernate原理(OR模拟)

一、 项目名称

hibernate_0200_OR_Mapping_Simulation 我们使用一个项目来完成

功能:有一个配置文件,文件中完成表名与类名对象,字段与类属性对应起来。 测试驱动开发

二、 原代码 Test类: public static void main(String[] args) throws Exception{ } Session类 import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.HashMap; import java.util.Map; import com.wjt276.hibernate.model.Student; public class Session { String tableName = \; Student s = new Student(); s.setId(10); s.setName(\); s.setAge(1); Session session = new Session();//此Session是我们自己定义的Session session.save(s); Hibernate—annotation 学习笔记 第14页 共109页

Map cfs = new HashMap(); String[] methodNames;//用于存入实体类中的get方法数组 public Session(){ } public void save(Student s) throws Exception{ } private String createSQL() { String str1 = \; int index = 0; for(String s : cfs.keySet()){ String v = cfs.get(s);//取出实体类成员属性 v = Character.toUpperCase(v.charAt(0)) + v.substring(1);//将成员属性第一个字符大写 methodNames[index] = \ + v;//拼实体类成员属性的getter方法 str1 += s + \;//根据表中字段名拼成字段串 String sql = createSQL();//创建SQL串 Class.forName(\); Connection conn = PreparedStatement ps = conn.prepareStatement(sql); // for(int i = 0; i < methodNames.length; i++){ } Method m = s.getClass().getMethod(methodNames[i]);//返回一个 Method 对象,它反映此 Class Class r = m.getReturnType();//返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法if(r.getName().equals(\)) { } if(r.getName().equals(\)) { } if(r.getName().equals(\)) { } System.out.println(m.getName() + \ + r.getName()); String returnValue = (String)m.invoke(s); ps.setString(i + 1, returnValue); Integer returnValue = (Integer)m.invoke(s); ps.setInt(i + 1, returnValue); //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 //个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换 String returnValue = (String)m.invoke(s); ps.setString(i + 1, returnValue); cfs.put(\, \); cfs.put(\, \); cfs.put(\, \); methodNames = new String[cfs.size()]; DriverManager.getConnection(\,\,\); 对象所表示的类或接口的指定公共成员方法 的正式返回类型 ps.executeUpdate(); ps.close(); conn.close(); Hibernate—annotation 学习笔记 第15页 共109页

}} } str1 = str1.substring(0,str1.length() -1); String str2 = \; //根据表中字段数,拼成?串 for (int i = 0; i < cfs.size(); i++){ str2 += \;} str2 = str2.substring(0,str2.length() -1); String sql = \ + tableName + \ + str1 + \ + \ + str2 + \; System.out.println(sql); return sql; index ++; 第11课 Hibernate基础配置

一、 提纲

1、 对应项目:hibernate_0300_BasicConfiguration 2、 介绍MYSQL的图形化客户端 3、 Hibernate.cfg.xml:hbm2ddl.auto

a) 先建表还是先建实体类

4、 搭建日志环境并配置显示DDL语句 5、 搭建Junit环境

a) 需要注意Junit的Bug 6、 ehibernate.cfg.xml : show_sql 7、 hibernate.cfg.xml :format_sql 8、 表名和类名不同,对表名进行配置

a) Annotation:@Table b) Xml:自己查询 9、 字段名和属性相同

a) 默认为@Basic b) Xml中不用写column 10、 字段名和属性名不同

a) Annotation:@Column b) Xml:自己查询

11、 不需要psersistence的字段

a) Annotation:@Transient b) Xml:不写

12、 映射日期与时间类型,指定时间精度

a) Annotation:@Temporal b) Xml:指定type 13、 映射枚举类型

a) Annotation:@Enumerated b) Xml:麻烦

14、 字段映射的位置(field或者get方法)

a) Best practice:保持field和get/set方法的一致 15、 @Lob

16、 课外:CLOB BLOB类型的数据存取 17、 课外:Hibernate自定义数据类型 18、 Hibernate类型


Hibernate annotation 学习笔记(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:儿童文明礼仪小故事(共4篇)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: