前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSH框架之旅-hibernate(1)

SSH框架之旅-hibernate(1)

作者头像
Wizey
发布2018-08-30 09:48:21
7910
发布2018-08-30 09:48:21
举报
文章被收录于专栏:编程心路编程心路

hibernate

1.什么是框架


什么是框架呢?个人觉得在软件设计中,框架可以看作是架构组件。如果把整个程序看作是一个人的话,那么框架可以看出是一个人的骨架,我们要做的的就是在这个框架的基础上进行开发,完成整个程序,让这个只有骨架的“人”活起来。而一些代码库可以看成是封装了某些功能的组件,而框架就是由很多库组成的。

2.SSH 框架介绍


SSH 是 spring struts hibernate 的缩写。从名字的缩写就可以看出,SSH 是一个集成框架,它是现在比较流行的 Web 应用程序的开源框架。个人的学习路线是 hibernate -> struts -> spring。hibernate 是操作数据库的框架,属于 Web 开发的 DAO 数据库操作层,底层是通过 jdbc 实现的,所以只要有jdbc基础的,都可以先从 hibernate 学起,hibernate也可以用在一般的 java项目的开发的。

3.认识 hibernate


hibernate 使用了 orm 的设计思想,orm 是 object relationship mapping,对象映射关系的缩写。即是实体类和数据库表是一一的映射(对应)关系。具体来说,实体类中的属性和数据表的字段是一一对应的。这样做有什么好处呢?这会大大简化我们对数据库的操作,我们操作数据库的方式,从原来的要写很多 sql 语句,改为通过数据库表对应的实体对象来操作数据库。


下面我们通过一个 java项目来学习 hibernate的基础使用。


项目的目录结构

4.搭建 hibernate框架环境


4.1 准备 hibernate包

heinate 框架是由一些 jar包组成的,我们首先要去官网下载 hibernate 的 zip压缩包。这里需要注意的是 hibernate 的版本,不同版本的 hibernate 所需的 jdk的版本也是不同的,2017年,hibernate 的版本是5.2。所需的 jdk 支持要是 jdk1.8。低于 jdk1.8的 jdk版本无法使用 hibernate 5.2。个人测试过 hibernate 5.0,需要 jdk1.7以上的支持。不知道为什么,Oracle 的官网,现在无法直接下载 jdk1.7的版本了,需要登陆,可能是 Oracle官网想提倡开发者使用最新的 jdk版本来开发吧,毕竟 jdk1.8,也就是 java8,里面还是提供了很多新功能的,也肯定在之前的版本上做了优化。个人看法是,当前的开发,肯定是使用最新的 jdk版本来开发,jdk的老版本是做测试用的。

4.2 导入 hibernate所需文件。

从 hibernate官网下载完压缩包后,找到目录下 lib文件夹下的 required文件夹,这里面的文件,就是 hibernate框架所需的所有文件啦,但由于 hibernate的底层还是 jdbc,所以我们还需要对应数据库的驱动文件。个人建议把这些 jar包单独存放在一个自定义的文件下,也便于使用。

4.3 配置路径

在 java项目下新建一个lib文件夹来存放我们的 hibernate 的 jar包和数据库连接的 jar包,并把这些包全部加到配置路径中。

hibernate 配置

5.使用 hibernate框架


5.1 创建实体类

用 private 访问限制词修饰,用 get,set 方法来设置属性的值,可以省略默认的构造方法。

代码语言:javascript
复制
package cc.wenshixin.entity;

public class Student {
    private int id;// 序号
    private String name;// 姓名
    private String sex;// 性别
    private String grade;// 班级
    
    public Student(String name, String sex, String grade) {
        this.name = name;
        this.sex = sex;
        this.grade = grade;
    }

    //这里省略了get和set方法
}

5.2 创建实体类映射文件

建议映射文件和实体类文件在同一个包下,映射文件命名为:实体类名称.hbm.xml。dtd 为 xml 的文件约束,下面的写法使需要在联网状态下才会有 xml 的代码提示的,关于离线dtd的配置,可自行上网搜索。所谓文件约束就是规定了文件内容的书写格式,具体就是标签的包裹,标签的属性等等。映射文件可以使用 jboss-tool插件生成,可自行根据自己使用的 IDE 工具使用。

下面说一下映射关系文件的配置,具体见下面代码所示。 1.首先是 hibernate-mapping 标签,包裹整个映射关系。 2.然后是 class 标签,里面 name 属性的值为实体类的全路径,table 为自动创建的数据表的名称。 3.id 标签配置数据表的主键,name 属性为实体类中作为唯一值的属性名称,column 属性作为生成的数据表的字段名称。id 标签里面的generator 是用来设置主键增长的策略,native 值为自动增长,assigned 为自定义增长。 4.property 标签设置一般的属性值,name 属性还是实体类的属性,column 是数据表的字段,这个和前面的id 标签是一样的。

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="cc.wenshixin.entity.Student" table="STUDENT">
        <id name="id" column="id">
            <generator class="native" />
        </id>
        <property name="name" column="name"></property>
        <property name="sex" column="sex"></property>
        <property name="grade" column="grade"></property>
    </class>
</hibernate-mapping>

5.3 创建 hibernate 核心配置文件

名称为 hibernate.cfg.xml,必须放在 src目录下面,和上面的实体类映射文件一样,核心配置文件也是有 dtd文件约束的。

下面说一下 hibernate 核心文件的配置,具体见下面代码所示。 1.首先是 hibernate-configuration 标签包裹整个配置信息。 2.接着是 session-factory 标签包裹整个配置内容。 3.配置的标签是 propertyname 为配置项的名字,标签里面是配置的内容。 4.配置的第一步是配置数据库相关的信息,数据库的驱动类,数据库连接的url参数,数据库的用户名,用户的密码。 5.hibernate 的功能选择,show_sql 是开启 hibernate中显示sql语句的功能,方便我们在开发中做调试;format_sql是对显示的sql语句进行格式话,方便我们阅读sql语句;hbm2ddl.auto 是关于表的更新操作,update 的意思是,如果表不存在就创建,如果表存在就更新表的内容。还有 create 的意思是,如果表不存在就创建,但如果表存在,就覆盖原来的表,创建新的表,那么原来表中的内容就没有了;dialect 是数据库方言的配置,在不同的类型的数据,一些 sql 语句的书写是不一样的,例如,分页操作要用的 sql语句,MySQL 数据库是用 limit 关键字来实现的,而Oracle 数据库是通过rownum 关键字来实现的,SQL server 数据库是通过 top 关键字来实现的,为了避免数据库的不同而对sql语句产生的差异,我们最好是加上方言的功能。 6.因为在 hibernate 的加载时,只会加载核心配置文件,所以要把实体类映射文件加入到 hibernate核心配置文件中,这样在加载核心配置文件的时候就会把映射文件也加载进去,注意映射文件的路径要写在 mapping 标签的resource 属性中。

代码语言:javascript
复制
<?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>
      <!-- 配置数据库信息 -->
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8</property>
      <property name="connection.username">root</property>
      <property name="connection.password">123456</property>

      <!-- hibernate功能选择 -->
      <property name="show_sql">true</property>
      <property name="format_sql">true</property>
      <property name="hbm2ddl.auto">update</property>
    <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
      
      <!-- 加载映射文件 -->
      <mapping resource="cc/wenshixin/entity/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

5.4 创建 hibernate测试文件

经过前面的步骤,hibernate 的使用就已经完成了,下面是通过测试文件来测试,执行后到数据库中看是否有相应的数据表和记录。

代码语言:javascript
复制
package cc.wenshixin.hibernateTest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import cc.wenshixin.entity.Student;

public class HibernateTest {
    
    public static void main(String[] args) {
        //1.加载hibernate核心配置文件
        Configuration cfg = new Configuration().configure();
        
        //2.创建一个SessionFactory工厂,在这个过程中读取 hibernate 的核心配置文件,根据映射关系把数据表创建起来
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        
        //3.使用sessionFactory来生产session对象,这里的session类似于Connection的对象,连接到数据库
        Session session = sessionFactory.openSession();
        
        //4.开启事务
        Transaction transaction = session.beginTransaction();
        
        //5.执行具体的 curd 操作
        Student s = new Student("小明","男","计科2班");
        session.save(s);

        //6.提交事务
        transaction.commit();
        
        //7.关闭相关的资源
        session.close();
        sessionFactory.close();
    }
}

6.hibernate框架配置详解


6.1 hibernate映射配置文件

1.映射配置文件的位置和名称都是可以修改的,但我们习惯上,把映射配置文件的名称写成 类名称.hbm.xml,并且和实体类文件放在同一个包下

  1. 映射配置文件中,标签 name 属性的值是写实体类相关的内容,class 标签中的 name 属性值是实体类的全路径,id 标签和 property 标签的 name 属性值是实体类属性的名称。
  2. id 标签和 property 标签 column 属性是可以省略的,不写的话表的字段名称默认和 name 属性的值一样。
  3. property 标签中还有 type 属性,设置生成表的字的字段的类型,不写的话,hibernate自动设置对应的类型。还有 length 属性,设置字段类型的长度,在实际的开发中,这个属性是要写的,用来减少数据库的冗余,提高数据表的查询效率。

6.2 hibernate 核心配置文件

1.核心配置文件中三个部分的要求,数据库配置信息部分是必须的,接着是选择使用 hibernate 的那些功能部分,最后是加载映射文件,这个也是必须的。

2.核心配置文件的文件名称和文件的位置都是固定的,名称:hibernate.cfg.xml,位置是直接在src源文件目录下。

7.hibernate的核心API


7.1 Configuration

Configuration cfg = new Configuration().configure(); 在 src目录下找到 hibernate..cfg.xml 配置文件,把配置文件放到创建的配置对象中,简单的可以理解为加载核心配置文件项。

7.2 SessionFactory

SessionFactory sessionFactory = cfg.buildSessionFactory(); 使用 configuration 对象来创建 sessionFactory 的对象,在创建这个对象的过程中,要加载核心配置文件的映射文件,根据映射关系来把数据表创建起来,可能要有多个数据表的创建,所以创建一个 sessionFactory 的对象挺耗费资源的,一个项目建议只创建一个 sessionFactory 对象,一般我们是把这步代码写到静态代码块中,这样在类加载时就会执行静态代码块的代码,并且只执行一次。

7.3 Session

Session session = sessionFactory.openSession(); session 对象类似于我们在jdbc中的connection对象,session 里面有对数据表操作的各种方法,从而实现对数据表的 curd 操作。 - 1.save方法,插入一条记录 - 2.update方法,更新一条记录 - 3.delete方法,删除一条记录 - 4.根据id查询的get方法 需要说明的时,session 是线程不安全的,也即是 session 对象是不能被多个线程共用的,只能单一线程使用。

7.4 Transaction

Transaction transaction = session.beginTransaction(); 开启数据库的事务,session对象处理完数据库操作时,这里需要手动的提交事务,事务有提交操作 transaction.commit();,还有回滚操作 transaction.rollback();,关于事务的相关概念,事务的四个特性:原子性、一致性、隔离性、持久性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是框架
  • 2.SSH 框架介绍
  • 3.认识 hibernate
  • 4.搭建 hibernate框架环境
    • 4.1 准备 hibernate包
      • 4.2 导入 hibernate所需文件。
        • 4.3 配置路径
        • 5.使用 hibernate框架
          • 5.1 创建实体类
            • 5.2 创建实体类映射文件
              • 5.3 创建 hibernate 核心配置文件
                • 5.4 创建 hibernate测试文件
                • 6.hibernate框架配置详解
                  • 6.1 hibernate映射配置文件
                    • 6.2 hibernate 核心配置文件
                      • 7.1 Configuration
                  • 7.hibernate的核心API
                    • 7.2 SessionFactory
                      • 7.3 Session
                        • 7.4 Transaction
                        相关产品与服务
                        云数据库 MySQL
                        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档