博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hiberbate 入门(一)
阅读量:5369 次
发布时间:2019-06-15

本文共 4764 字,大约阅读时间需要 15 分钟。

 

一、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 6
7 8
9 10
11
com.mysql.jdbc.Driver
12
13
jdbc:mysql://localhost:3306/Student
14
root
15
1025263614
16 17
18
1
19 20
21
org.hibernate.dialect.MySQLDialect
22 23
24
thread
25 26
27
28 org.hibernate.cache.NoCacheProvider29
30 31
32
true
33
34
true
35 36
37
38
39
40
create
41
42 43
44
45
46
47
48
49 50

  创建一个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 }

转载于:https://www.cnblogs.com/susana/p/6515382.html

你可能感兴趣的文章
每日python(6)
查看>>
Python正则表达式中的re.S的作用
查看>>
ubuntu15.10运行android studio出错unable to run mksdcard sdk tool
查看>>
HashMap面试知多少
查看>>
Effective C# 学习笔记(二十七)使你的类型可被序列化
查看>>
LDAP客户端配置
查看>>
(转)NAT原理与NAT穿越
查看>>
13.内存原理
查看>>
24.函数信号机制(本质上就是函数指针)
查看>>
The dependency `xxx` is not used in any concrete target.
查看>>
Bootstrap 中 下拉菜单和滚动监听插件(十一)(持续更新中。。。)
查看>>
团队-科学计算器-项目总结
查看>>
python 发邮件
查看>>
sql---left join;right join;inner join---区别
查看>>
maven profile集合spring占位符实现动态打包配置环境
查看>>
感知器算法PLA
查看>>
sklearn中的数据集的划分
查看>>
Xcode的几个高效快捷键
查看>>
机器人运动大赛8月落地嘉峪关,编程和军事成亮点
查看>>
进程控制
查看>>