一、Hibernate简介
1、什么是Hibernate?
Hibernate是数据持久层的一个轻量级框架。数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,用面向对象的思想来操作数据库,节省了我们开发处理数据的时间。
2、Hibernate的优点
1)、使用简介的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。
2)、使用or映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。
3)、没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。
4)、支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。
3、当然一个事物,不可能十全十美,即使如此优秀的Hibernate也有自己的弱点。比如:若是大量数据批量操作。则不适合使用Hibernate。并且一个持久化对象不能映射到多张表中。
4、Hibernate中5个核心接口
1)、Configuration接口:负责配置及启动Hibernate,用来创建sessionFactory
2)、SessionFactory接口:一个SessionFactory对应一个数据源存储,也就是一个数据库对应一个SessionFactory。SessionFactory用来创建Session对象。并且SessionFactory是线程安全的,可以由多个线程访问SessionFactory共享。
3)、Session接口:这个接口是Hibernate中常用的接口,主要用于对数据的操作(增删改查)。而这个Session对象不是线程安全的。不能共享。
4)、Query接口:用于数据库的查询对象。
5)、Transaction接口:Hibernate事务接口。它封装了底层的事务操作,比如JTA(;java transcation architecture)所有的数据操作,比如增删改查都写在事务中。
二、Hibernate环境搭建所需软件
1、JDK:
2、Tomcat:
3、MySQL:
4、MySQL JDBC数据库驱动:
4、Nvicat:
5、MyEclipse破解版:
6、Hibernate 3.6.10:
7、slf4j 1.6.1:
三、Hibernate环境搭建
1、安装JDK7(最新版好像已经到8了吧,反正我也没用过,不管它),配置好Java环境变量
2、安装Tomcat,Tomcat现阶段还用不到,不过以后肯定会用到,先装上,一路点下去就行,没什么要注意的
3、安装MySQL,设置用户名、密码时候注意下就行。MySQL数据查看推荐使用Nvicat。
4、安装MySQL JDBC驱动,驱动的jar包一般在C:\Program Files (x86)\MySQL\MySQL Connector J下
4、MyEclipse的安装。
四、第一个Hibernate小程序
创建一个Hello_World的Java项目,导入所需jar包(本机可以配置成User Librairies,方便使用),具体配置请见文章最后的源码,此处不再缀诉。
在src目录下,创建一个hibernate.cfg.xml的配置文件,文件配置设置可以参见hibernate的官方文档。
1 2 5 67 8 9 10 11 49 50com.mysql.jdbc.Driver 12 13jdbc:mysql://localhost:3306/Student 14root 151025263614 16 17 181 19 20 21org.hibernate.dialect.MySQLDialect 22 23 24thread 25 26 2728 org.hibernate.cache.NoCacheProvider29 30 31 32true 33 34true 35 36 37 38 39 40create 4142 43 44 45 46 47 48
创建一个Teacher的实体类,这里用的是annotion注解,还有一种方法是创建XXX.hbm.xml的关系映射文件,具体实现请参见附件的源码
1 package com.lsj.hibernate.model; 2 3 import javax.persistence.Entity; 4 import javax.persistence.Id; 5 import javax.persistence.Table; 6 7 //Entity是javax.persistence.Entity包中的 8 @Entity 9 // 映射的表名10 @Table(name = "teacher")11 public class Teacher {12 13 private int id;14 private int age;15 private String name;16 private String title;17 18 // 主键,一般写在get方法中,而不是在定义中19 @Id20 public int getId() {21 return id;22 }23 24 public void setId(int id) {25 this.id = id;26 }27 28 public int getAge() {29 return age;30 }31 32 public void setAge(int age) {33 this.age = age;34 }35 36 public String getName() {37 return name;38 }39 40 public void setName(String name) {41 this.name = name;42 }43 44 public String getTitle() {45 return title;46 }47 48 public void setTitle(String title) {49 this.title = title;50 }51 }
创建一个TeacherTest的测试类
1 package com.lsj.hibernate.test; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.Configuration; 6 7 import com.lsj.hibernate.model.Teacher; 8 9 public class TeacherTest {10 11 public static void main(String[] args) {12 Teacher t = new Teacher();13 t.setAge(30);14 t.setName("小杰");15 t.setTitle("背包客");16 17 Configuration cfg = new Configuration();18 // 读取hibernate.cfg.xml中的配置19 cfg.configure();20 // 获取SessionFactory21 SessionFactory sf = cfg.buildSessionFactory();22 // 获取Session23 Session session = sf.openSession();24 // 开启事务25 session.beginTransaction();26 // 保存27 session.save(t);28 // 提交事务29 session.getTransaction().commit();30 // 关闭连接31 session.close();32 sf.close();33 }34 }