Hibernate—annotation 学习笔记 第6页 共109页
第1课 课程内容
1、 HelloWorld
a) b)
Xml Annotction
2、 Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3、 常风的O/R框架 4、 Hibernate基础配置 5、 Hibernate核心接口介绍 6、 对象的三种状态 7、 ID生成策略 8、 关系映射
9、 Hibernate查询(HQL)
10、 在Struts基础上继续完美BBS2009 11、 性能优化 12、 补充话题
第2课 Hibernate UML图
Hibernate—annotation 学习笔记 第7页 共109页
第3课 风格
1、 先脉络,后细节 2、 先操作、后原理
3、 重Annotation,轻xml配置文件
a) b)
JPA (可以认为EJB3的一部分) Hibernate – extension
第4课 资源
1、 http://www.hibernate.org
a) b) c)
hibernate-distribution-3.3.2.GA-dist.zip hibernate-annotations-3.4.0.GA.zip slf4j-1.5.10.zip (hibernate内部日志用)
2、 hibernate zh_CN文档
3、 hibernate annotateon references
第5课 环境准备
1、 下载hibernate3.3.2
2、 下载hibernate-annotations-3.4.0 3、 注意阅读hibernate compatibility matrix 4、 下载slf4j 1.5.8
第6课 第一个示例Hibernate HelloWorld
1、 建立新的java项目,名为hibernate_0100_HelloWorld 2、 学习建立User-liberary-hibernate,并加入相应的jar包
a) b) c)
项目右键-build path-configure build path-add library 选择User-library ,在其中新建library,命名为hibernate 在该library中加入hibernate所需的jar名 i. ii. iii.
Hibernate core /lib/required Slf-nop jar
3、 引入mysql的JDBC驱动名
4、 在mysql中建立对应的数据库以及表
a) b) c) a) b) c)
Create database hibernate; Use hibernate;
Create table Student (id int primary key, name varchar(20),age int); 从参考文档中copy 修改对应的数据库连接 注释提暂时不需要的内容
5、 建立hibernate配置文件hibernate.cfg.xml
6、 建立Student类
7、 建立Student映射文件Student.hbm.xml
a) a)
参考文档 参考文档
8、 将映射文件加入到hibernate.cfg.xml
9、 写测试类Main,在Main中对Student对象进行直接的存储测试
Hibernate—annotation 学习笔记 第8页 共109页
public static void main(String[] args) { Configuration cfg = null; SessionFactory sf = null; Session session = null; Student s = new Student(); s.setId(2); s.setName(\); s.setAge(1); /* * org.hibernate.cfg.Configuration类的作用: * 读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的. * new Configuration()默认是读取hibernate.properties * 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件 */ cfg = new Configuration().configure(); /* * 创建SessionFactory * 一个数据库对应一个SessionFactory * SessionFactory是线线程安全的。 */ sf = cfg.buildSessionFactory(); try { //创建session //此处的session并不是web中的session //session只有在用时,才建立concation,session还管理缓存。 //session用完后,必须关闭。 //session是非线程安全,一般是一个请求一个session. session = sf.openSession(); //手动开启事务(可以在hibernate.cfg.xml配置文件中配置自动开启事务) session.beginTransaction(); /* * 保存数据,此处的数据是保存对象,这就是hibernate操作对象的好处, * 我们不用写那么多的JDBC代码,只要利用session操作对象,至于hibernat如何存在对象,这不需要 * 这些都有hibernate来完成。我们只要将对象创建完后,交给hibernate就可以了。 */ session.save(s); session.getTransaction().commit(); e.printStackTrace(); //回滚事务 session.getTransaction().rollback(); 我们去关心它, } catch (HibernateException e) { } finally { Hibernate—annotation 学习笔记 第9页 共109页
10、 FAQ:
a) *
注意:在hibernate里的操作都应该放在事务里
要调用new Configuration().configure().buildSessionFactory(),而不是省略 org.hibernate.cfg.Configuration类的作用:
* 读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的. * new Configuration()默认是读取hibernate.properties
* 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件 } } //关闭session session.close(); sf.close(); 第7课 建立Annotation版本的HellWorld
注意:要求hibernate3.0版本以后支持
1、 创建teacher表,create table teacher(id int primary key,name varchar(20),title varchar(10)); 2、 创建Teacher类
public class Teacher { } 3、 在hibernate library中加入annotation的jar包
a) b)
Hibernate annotations jar Ejb3 persistence jar
private int id; private String name; private String title; //设置主键使用@Id public int getId() { } public void setId(int id) { } public String getName() { } public void setName(String name) { } public String getTitle() { } public void setTitle(String title) { } this.title = title; return title; this.name = name; return name; this.id = id; return id; Hibernate—annotation 学习笔记 第10页 共109页
c) d)
Hibernate common annotations jar
注意文档中没有提到hibernate-common-annotations.jar文件 import javax.persistence.Entity; import javax.persistence.Id; /** @Entity 表示下面的这个Teacher是一个实体类 * @Id 表示主键Id*/ @Entity //*** public class Teacher { private int id; private String name; private String title; //设置主键使用@Id @Id //*** public int getId() { } public void setId(int id) { } public String getName() { } public void setName(String name) { } public String getTitle() { } public void setTitle(String title) { }} this.title = title; return title; this.name = name; return name; this.id = id; return id; 4、 参考Annotation文档建立对应的注解 5、 在hibernate.cfg.xml中建立映射