hibernate(1):Hibernate概念、入门案例
1. Hibernate的概述
1.1 什么是Hibernate
Hibernate框架是当今主流的Java持久层框架之一,由于它具有简单易学、灵活性强、扩展性强等特点,能够大大地简化程序的代码量,提高工作效率,因此受到广大开发人员的喜爱。
Hibernate是一一个开放源代码的ORM (Object Relational Mapping, 对象关系映射)框架,它对JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。
Hibernate就是一个持久层的ORM的框架。
ORM:Object Relational Mapping对象关系映射。
1.2 为什么要学习Hibernate
使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心。例如对几十、几百张包含几十个字段的表进行插入操作时,编写的SQL语句不但很长,而且繁琐,容易出错;在读取数据时,需要写多条getXx语句从结果集中取出各个字段的信息,不但枯燥重复,并且工作量非常大。为了提高数据访问层的编程效率,Gavin King开发出了一个当今最流行的的ORM框架,它就是Hibernate框架。
所谓的ORM就是利用描述对象和数据库表之间映射的元数据,自动把Java应用程序中的对象,持久化到关系型数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。可以把ORM理解为关系型数据和对象的一一个纽带,开发人员只需要关注纽带–端映射的对象即可。ORM原理如下图所示。
与其它操作数据库的技术相比,Hibernate具有以下几点优势:
- Hibernate对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率。
- Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO (Data Access Object,数据访问对象)层编码工作。
- Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。
- 可扩展性强,由于源代码的开源以及API的开放,当本身功能不够用时,可以自行编码进行扩展。
1.3 下载Hibernate
https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/
Hibernate5.0.7版本下载后,解压完的目录结构如图所示。
从图可以看出,hibernate5.0.7 的解压目录中包含一系列的子目录,这些子目录分别用于存放不同功能的文件,接下来针对这些子目录进行简单介绍,具体如下:
- documentation文件夹:存放Hibernate的相关文档,包括参考文档的API文档。
- lib文件夹:存放Hibermnate编译和运行所依赖的JAR包。其中required子目录下包含了运行Hibernate5项目必须的JAR包。
- project文件夹:存放Hibermate各种相关的源代码。
在lib/required子目录中,包含的JAR包
2. 入门案例
2.1 创建项目
创建Dynamic Web Project,命名为hibernate_1。
2.2 引入Hibernate的开发包
将以下开发包导入项目的hibernate_1\WebContent\WEB-INF\lib目录下
- 数据库驱动包
- Hibernate/lib/required/*.jar
- 日志记录的包
2.3 创建数据库和表
create database hibernate_1; use hibernate_1;
CREATE TABLE cst_customer(
cust_id BIGINT(32) NOT NULL auto_increment COMMENT ‘客户编号(主键)’,
cust_name VARCHAR(32) NOT NULL COMMENT ‘客户名称(公司名称)’,
cust_source VARCHAR(32) DEFAULT NULL COMMENT ‘客户信息来源’,
cust_industry VARCHAR(32) DEFAULT NULL COMMENT ‘客户所属行业’,
cust_level VARCHAR(32) DEFAULT NULL COMMENT ‘客户级别’,
cust_phone VARCHAR(64) DEFAULT NULL COMMENT ‘固定电话’,
cust_mobile VARCHAR(16) DEFAULT NULL COMMENT ‘移动电话’,
PRIMARY KEY(cust_id)
) ENGINE=INNODB auto_increment=94 DEFAULT CHARSET=utf8;
持久化类是应用程序中的业务实体类,这里的持久化是指类的对象能够被持久化保存到数据库中。Hibernate使用普通Java对象(Plain Old Java Object),即POJO的编程模式来进行持久化。POJO类中包含的是与数据库表相对应的各个属性,这些属性通过getter和setter方法来访问,对外部隐藏了内部的实现细节。下面就来编写Customer持久化类。
在项目src 目录下,创建cn.xhh.domain包,并在包中创建实体类Customer (对应数据库表cst_ customer),Customer 类包含与cst_customer数据表字段对应的属性,以及相应的getXxx()和setXxx()方法。.
package cn.itheima.domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private String cust_mobile; public Long getCust_id() { return cust_id; } public void setCust_id(Long cust_id) { this.cust_id = cust_id; } public String getCust_name() { return cust_name; } public void setCust_name(String cust_name) { this.cust_name = cust_name; } public String getCust_source() { return cust_source; } public void setCust_source(String cust_source) { this.cust_source = cust_source; } public String getCust_industry() { return cust_industry; } public void setCust_industry(String cust_industry) { this.cust_industry = cust_industry; } public String getCust_level() { return cust_level; } public void setCust_level(String cust_level) { this.cust_level = cust_level; } public String getCust_linkman() { return cust_linkman; } public void setCust_linkman(String cust_linkman) { this.cust_linkman = cust_linkman; } public String getCust_phone() { return cust_phone; } public void setCust_phone(String cust_phone) { this.cust_phone = cust_phone; } public String getCust_mobile() { return cust_mobile; } public void setCust_mobile(String cust_mobile) { this.cust_mobile = cust_mobile; } @Override public String toString() { return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]"; } }
2.4 创建映射文件
实体类Customer目前还不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库Hibernate中的哪个表,以及类中的哪个属性对应数据库表中的哪个字段,这些都需要在映射文件中配置。
在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件中定义了实体类Customer的属性是如何映射到cst_customer表的列上的。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.xhh.domain" >
<class name="cn.xhh.domain.Customer" table="cst_customer" >
<id name="cust_id" column="cust_id">
<generator class="native"></generator> </id>
<property name="cust_name" column="cust_name" ></property> <property name="cust_source" column="cust_source" ></property> <property name="cust_industry" column="cust_industry" ></property> <property name="cust_level" column="cust_level" ></property> <property name="cust_linkman" column="cust_linkman" ></property> <property name="cust_phone" column="cust_phone" ></property> <property name="cust_mobile" column="cust_mobile" ></property> </class> </hibernate-mapping>
2.5 创建hibernate的核心配置文件
Hibernate的映射文件反映了持久化类和数据库表的映射信息,而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。在项目的src下创建一个名称为hibernate.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> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">1234</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="cn/xhh/domain/Customer.hbm.xml" /> </session-factory> </hibernate-configuration>
该配置文件设置了数据库连接的相关属性以及其它的一些常用属性,并且通过mapping的resource属性将对象的映射信息加入到了Hibernate的配置文件中。
2.6 编写测试代码
在项目中创建一个名称为cn.xhh.Demo的包,然后在包中建立一个名为Demo1.java的文件,该文件是用来测试的类文件。
package cn.xhh.Demo; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import cn.xhh.domain.Customer; //测试Hibernate框架 public class Demo { @Test //保存客户 public void fun1(){ Configuration conf = new Configuration().configure(); SessionFactory sessionFactory = conf.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); //---------------------------------------------- Customer c = new Customer(); c.setCust_name("google公司"); session.save(c);//执行保存 //---------------------------------------------- tx.commit(); session.close(); sessionFactory.close(); } }
原文地址: https://www.cnblogs.com/liuhui0308/p/11768690.html
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章