Hibernate框架入门

导读

本文主要介绍hibernate的入门,主要包括以下内容:hibernate介绍、hibernate环境搭建、hibernate简单测试、测试涉及的api详解。

一、hibernate介绍

JDBC是Java操作数据库的工具,我们可以使用jdbc来书写并执行sql语句来操作数据库,对于普通的业务,jdbc工具是完全可以胜任的,但但当任务复杂,特别是数据库中表格很多的时候,jdbc就会显得力不从心,代码复用率低且sql语句容易出错。

Hibernate框架从jdbc面向过程操作数据库的过程转变为面向对象来操作数据库。其原理是ORM编程,即Object Relational Mapping(对象关系映射)。每一个数据库表对应一个实体类,这个实体类通过映射关系来操作这个数据库表,映射可以理解为平常我们所说的函数,如y=f(x);y是数据库中的表,x是实体类,f(x)即映射关系,我们通过操作x可以改变y值,同样的操作实体类便可以达到操作数据库的目的,这就是通过面向对象方式来操作数据库。

二、hibernate环境搭建

hibernate的环境搭建包括以下部分:1、导入运行环境需要的jar包;2、创建数据库表和对应的实体类;3、编写表和实体之间的映射关系(也叫orm元数据);4、编写主配置文件hibernate.cfg.xml

1、导包

搜索下载压缩包:hibernate-release-5.0.7.Final.zip就可以找到相应的jar包:

注:不要忘了导入数据库驱动包(这里我使用的是mysql数据库),所以还需导入:

2、创建数据库表和实体类

这里假设我们创建了user表:

CREATE TABLE `user` (
`uid` bigint(32) NOT NULL AUTO_INCREMENT,
`uname` varchar(32) NOT NULL,
PRIMARY KEY (`uid`)
)

实体类:User

 1 package domain;
 2 public class User {
 3     private Long uid;
 4     private String uname;
 5
 6     public Long getUid() {
 7         return uid;
 8     }
 9     public void setUid(Long uid) {
10         this.uid = uid;
11     }
12     public String getUname() {
13         return uname;
14     }
15     public void setUname(String uname) {
16         this.uname = uname;
17     }
18     @Override
19     public String toString() {
20         return "User [uid=" + uid + ", uname=" + uname + "]";
21     }
22 }

3、编写表和实体之间的映射关系(orm元数据)

1)导入dtd约束

hibernate框架使用的是xml文件作为配置文件,所以在编写xml文件之前需要先导入dtd约束(该约束文件也在上面使用到的压缩包里)

导入方式:eclipse-->Preferences-->xml-->XML Catalog-->add

两个文件都添加完成后你的eclipse中有了这个dtd约束了,如果你的eclipse已经有了该dtd约束上面的步骤就可以忽略。

2)配置映射关系:User.hbm.xml

一般该文件的命名格式为(当然你可以随意命名):类名.hbm.xml。且放在和该实体类同一个目录下。

xml简写版:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6     <hibernate-mapping package="domain" >
 7
 8     <class name="User" table="user" >
 9         <id name="uid"  >
10             <generator class="native"></generator>
11         </id>
12
13     <property name="uname" column="uname" ></property>
14     </class>
15 </hibernate-mapping>

xml注释版:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- 1、导入dtd约束 -->
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 6
 7 <!-- 2、ORM元数据:配置表与实体对象的关系(映射关系) -->
 8
 9    <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. -->
10     <hibernate-mapping package="domain" >
11
12     <!--
13         2.1 class元素: 配置实体与表的对应关系的
14             name: 完整类名
15             table:数据库表名
16      -->
17     <class name="User" table="user" >
18         <!-- id元素:配置主键映射的属性
19                 name: 填写主键对应属性名
20                 column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
21                 type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
22                         每个类型有三种填法: java类型|hibernate类型|数据库类型
23                 not-null(可选):配置该属性(列)是否不能为空. 默认值:false
24                 length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
25          -->
26         <id name="uid"  >
27             <!-- generator:主键生成策略(明天讲) -->
28             <generator class="native"></generator>
29         </id>
30         <!-- 2.2property元素:除id之外的普通属性映射
31                 name: 填写属性名
32                 column(可选): 填写列名
33                 type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
34                         每个类型有三种填法: java类型|hibernate类型|数据库类型
35                 not-null(可选):配置该属性(列)是否不能为空. 默认值:false
36                 length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
37          -->
38         <property name="uname" column="uname" ></property>
39     </class>
40 </hibernate-mapping>

4、编写主配置文件

主配置文件一般是整体环境的配置一些数据库操作设置。主要分为:1、必要配置:数据库驱动等配置;2、可选配置;3、引入orm元数据:指定要操作的关系映射。

一般主配置文件都以hibernate.xfg.xml来命名(这样我们在使用时可以直接使用无参方法调用,比较方便)。且需要将文件放到src目录下。

hebernate.cfg.xml简写版:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>

        <property name="hibernate.hbm2ddl.auto">update</property>

        <mapping resource="domain/User.hbm.xml" />

    </session-factory>
</hibernate-configuration>

hebernate.cfg.xml注释版:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <!--
 8         #hibernate.dialect org.hibernate.dialect.MySQLDialect
 9         #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
10         #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
11         #hibernate.connection.driver_class com.mysql.jdbc.Driver
12         #hibernate.connection.url jdbc:mysql:///test
13         #hibernate.connection.username gavin
14         #hibernate.connection.password
15         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
16         <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
17         <property name="hibernate.connection.username">root</property>
18         <property name="hibernate.connection.password">password</property>
19         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
20
21         <property name="hibernate.show_sql">true</property>
22         <property name="hibernate.format_sql">true</property>
23
24         <property name="hibernate.hbm2ddl.auto">update</property>
25
26         <mapping resource="domain/User.hbm.xml" />
27
28     </session-factory>
29 </hibernate-configuration>

到这里我们的hibernate环境就搭建完成了,刚开始感觉很多,用多了其实就很可以很快copy这些文件然后改改就o了。

三、hibernate简单测试

1)Demo测试类:

 1 package test;
 2
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 import org.junit.Test;
 8
 9 import domain.User;
10
11 public class Demo {
12
13     @Test
14     //使用hibernate框架,通过操作User对象往user表中插入一条数据。
15     public void addUser(){
16         //操作涉及的核心类
17         Configuration config = new Configuration().configure();
18         SessionFactory factory = config.buildSessionFactory();
19         Session session = factory.openSession();
20         Transaction tx = session.beginTransaction();
21
22         //操作User
23         //-----------------------
24         User user = new User();
25         user.setUid(1l);
26         user.setUname("张三");
27
28         session.save(user);//执行
29         //-----------------------
30
31         //关闭资源
32         tx.commit();
33         session.close();
34         factory.close();
35     }

2)执行结果:

四、测试涉及的api详解

 1 //1 创建,调用空参构造
 2 Configuration conf = new Configuration().configure();
 3 //2 根据配置信息,创建 SessionFactory对象
 4 SessionFactory sf = conf.buildSessionFactory();
 5 //3 获得session
 6 Session session = sf.openSession();
 7 //4 session获得操作事务的Transaction对象
 8 //获得操作事务的tx对象
 9 Transaction tx = session.getTransaction();
10 tx.begin();
11 //开启事务并获得操作事务的tx对象(建议使用)
12 Transaction tx2 = session.beginTransaction();
13 //----------------------------------------------
14 //1 获得要修改的对象
15User u = session.get(User.class, 1l);
16 //2 调用delete删除对象
17 session.delete(u);
18 //----------------------------------------------
19 tx2.commit();//提交事务
20 session.close();//释放资源
21 sf.close();//释放资源

除了虚线//-----------------之间的操作部分,上下两部分一般都是固定不变的。所以我们可以使用工具类进行抽取,以提高代码复用率:

HibernateUtils:

 1 package utils;
 2
 3 import org.hibernate.HibernateException;
 4 import org.hibernate.Session;
 5 import org.hibernate.SessionFactory;
 6 import org.hibernate.cfg.Configuration;
 7
 8 public class HibernateUtils {
 9
10     // 会话工厂,以单例方式管理
11     private static SessionFactory sessionFactory;
12
13     // ThreadLocal存储session
14     private static ThreadLocal<Session> session = new ThreadLocal<Session>();
15
16     // 以单例方式管理sessionFactory
17     static {
18         try {
19             sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
20         } catch (HibernateException e) {
21             e.printStackTrace();
22             throw new HibernateException("初始化会话工厂失败!");
23         }
24
25     }
26     //得到一个单例的会话工厂
27     public static SessionFactory getSessionFactory(){
28         return sessionFactory;
29     }
30     //获取一个新session
31     public static Session openSession(){
32         return sessionFactory.openSession();
33     }
34
35     public static Session getCurrentSession() throws HibernateException {
36         return sessionFactory.getCurrentSession();
37     }
38
39     public static void closeSession() throws HibernateException {
40         sessionFactory.getCurrentSession().close();
41     }
42
43 }
时间: 2024-08-29 01:46:59

Hibernate框架入门的相关文章

Hibernate框架之入门

1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作.除配置文件,映射文件和持久化类外,Hibernate的核心组件包

Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=63 https://www.zhihu.com/question/29444491/answer/146457757 1. Java - Struts框架教程Struts 是Apache软件基金会(ASF)赞助的一个开源项目.通过采用JavaServlet/JSP技术,实现了基于Java EEWeb

框架之 hibernate简单入门

hibernate框架的搭建 Hibernate框架的概述 1. Hibernate框架的概述 * Hibernate称为 * Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. * Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用. * Hibernate是轻量级JavaEE应用的持久层解决方案

Hibernate框架之入门案例

今天终于开始学习了三大框架的其中一个框架,Hibernate框架,在这里不去讲Hibernate框架的一些基础概念了,直接切入代码,带大家了解一下Hibernate能干什么, Hibernate的人们案例: 一.首先建立一个Java Project项目: Hibernate他是一个负责将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作,所有我们在这里就要设计到一个实体类 在上面这个图中我们可以看到有一个lib文件夹,这个是对项目点右键建的一个文件夹. 1.lib中该放什么文件: 首

java三大框架之一hibernate使用入门

综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包, 关于如何下载网上也有详细的教程.下载后解压出来,其中required里面的jar包全部是必须的,可以都放在一个library中,然后再加上mysql(或其他数据库)的驱动包,就是我们需要的所有类库了. 2. 类库全部添加进来之后就是框架的配置问题了.这里主要配置两部分:hibernate.cfg

Hibernate框架学习(一)——入门

一.框架是什么 1.框架是用来提高开发效率的 2.封装好了一些功能,我们需要使用这些功能时,调用即可,不需要手动实现 3.框架可以理解成一个半成品的项目,只要懂得如何驾驭这些功能即可 二.hibernate框架是什么 三.hibernate 1.操作数据库的时候,可以以面向对象的方式来完成,不需要书写SQL语句 2.hibernate是一款orm框架 1)orm:object relating mapping.对象关系映射 2) 3)orm分4级 hibernate属于4级:完全面向对象操作数据

hibernate框架的简单入门

1.什么是框架 框架是一个半成品,框架帮我们实现了一部分的功能. 2.使用框架的最大好处 使用框架的最大好处就是,少写一部分代码但仍能实现我们所需要实现的功能. 3.什么是hiberbnate框架 (1)hibernate框架应用在javaEE三层结构中的dao层框架 (2)hibernate底层的代码就是jdbc,hibernate就是对jdbc的封装,使用hibernate就不需要写jdbc复杂的代码了,而且可以不写sql语句,就能实现对数据库的基本的,增,删,改,查. (3)hiberna

JAVA框架之Hibernate框架的学习步骤

首先介绍一下Java三大框架的关系 以CRM项目即客户关系管理项目示例 hibernate框架的学习路线: 1.学习框架入门,自己搭建框架,完成增删改查的操作 2.学习一级缓存,事物管理和基本查询 3.学习一对多和多对多的操作等 4.学习基本查询和查询的优化 本人正在学习hibernate框架,今天是第一天,愿意把自己的学习过程分享给大家,希望大家提出宝贵意见,留言给我,共同进步需要什么软件.资源.例程jar包等的,可以留下邮箱,我晚上会给大家发过去的,谢谢

Hibernate框架基本使用

时间:2017-1-16 00:36 --什么是Hibernate Hibernate是一个开放源代码的关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以使用对象编程思维来操作数据库. Hibernate可以应用在任何使用JDBC的场景,既可以在Java的客户端程序使用,也可以在Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE框架中取代CMP,完成数据持久化的重任. Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数