Hibernate框架学习之初识Hibernate
Hibernate的简单介绍
Hibernate是一个开源的优秀的ORM(Object Relational Mapping、对象关系映射)框架,对JDBC进行了轻量级的对象封装,架起了面向对象开发以及SQL之间的桥梁。Hibernate可以通过配置,自动生成对应的SQL语句,自动执行,并且对结果进行封装,将得到的对象返回给用户。有了Hibernate框架,开发人员可以以面向对象的角度来操作数据库。
Hibernate的优点
对JDBC进行封装,简化了数据访问的代码(这一点相信使用原生JDBC操作数据库的朋友应该会有比较深的感触)
支持多种关系型数据库
性能好、配置灵活
Hibernate_HelloWorld
上面是关于Hibernate的一点简单介绍以及其优点,接下来让我们开始使用Hibernate的进行数据库的访问,感受Hibernate带来的方便性。
准备
首先需要下载Hibernate对应的jar包,Hibernate 5.2.9 Final 版本下载地址 ,如果是使用Maven来进行构建的朋友则更加简单了,只需要配置对应的依赖,Maven就会自动帮我们将对应的jar下载并且导入,笔者这里使用第二种方式。
建立项目
-
建一个Maven项目(笔者这里使用IDEA)勾选如下所示
-
填写对应的GroupId、Artifact以及Version,如下所示
-
选择好对应的Maven版本以及对应的设置、仓库所在位置,如下所示
-
填写项目的名称、位置以及对应的Module信息(这里保持默认),如下所示
-
建立项目完成之后,项目的结构图如下所示
-
为了项目资源管理的方便,这里我们在src目录下建立一个resources目录,并且将其设置为资源文件,这样,Maven在编译时会自动将其导入类路径中,具体操作如下
至此,我们的项目的基本骨架的搭建完成了。
导入Hibernate的核心包以及依赖包
由于是使用Maven来进行项目管理,所以导入对应的jar文件只需要在根目录的pom.xml文件中添加如下内容即可
<project>
...
<dependencies>
<!--添加Junit支持-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--添加Hibernate支持-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.9.Final</version>
</dependency>
<!--添加JDBC支持-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
</dependencies>
<build>
<!--为了IDEA能够在编译时将对应的配置文件加入,需要添加下面的配置-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
...
</project>
这样Maven就会自动下载Hibernate所需要的依赖及其核心包了。
编写配置文件
Hibernate的配置主要有两个文件,一个是用于配置元数据的,一个是用于配置数据源等信息的,下面我们开始编写配置文件
元数据
首先闲来编写元数据配置文件,所谓的元数据配置文件,可以理解为就是一个对应关系,也就是配置一个从JavaBean对象到SQL之间的对应关系,显然,为了Hibernate能够自动地完成从Java对象到SQL之间的映射,我们就必须告诉它哪个对象对应哪一张表,其中对象中的哪个属性对应表中的哪个列,哪个属性是对应的ID。
也就是说,在这个环节中,需要建立两个内容,一个是所要操作的类,另外一个其对应的关系,也就是我们的元数据
-
在包中建立以个Students对象,如下所示
package cn.xuhuanfeng.learnignhibernate; /** * Created by xuhuanfeng on 2017-04-06. */ public class Students{ private int id; private String name; private int age; . . . // 篇幅原因省略setter以及getter }
-
在Students对象的同级目录建立一个名为Student.hbm.xml的配置文件,配置内容如下所示
<?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> <!--name为对应的Java类,table为对应的表的名字--> <class name="cn.xuhuanfeng.learnignhibernate.Students" table="students"> <!--id为对应的主键,name为类属性,column为表的字段--> <id name="id" column="id"> <!--主键的增长策略,以后将介绍--> <generator class="increment"></generator> </id> <!--property为其他的属性--> <property name="name" column="name"></property> <property name="age" column="age"></property> </class> </hibernate-mapping>
至此,我们的元数据则建立完成。
数据源配置文件
接下来吗,我们来编写Hibernate的数据源配置文件,该配置文件是Hibernate的核心配置文件,主要用于加载上面的元数据以及配置相关的属性等等,在刚刚建立的resources目录中建立名为hibernate.cfg.xml的文件,注意,该文件不建议更改名字,内容如下所示:
<!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://localhost:3306/hibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">huanfeng</property> <!--打印操作过程中的SQL语句--> <property name="show_sql">true</property> <!--格式化SQL语句--> <property name="format_sql">true</property> <!--配置数据库操作策略,以后将介绍--> <property name="hbm2ddl.auto">update</property> <!--配置对应的映射文件 即 元数据--> <mapping resource="cn/xuhuanfeng/learnignhibernate/Student.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
由于这里需要操作对应的数据库,所以还需要建立一个对应的库,这里命名为hibernate,如果按照上面的配置,则不需要建立对应的表,只需要建立对应的库即可。
至此,Hibernate所需要的配置全部完成,接下来我们就来开始编写对应的测试代码了。
编写测试文件
不知道初学Hibernate的你,看到这里会不会有点懵,笔者刚刚学习的时候也觉得有点懵,这样就可以编写测试代码了?我连具体内容都还没见到了,就只是写了配置文件以及一个JavaBean而已。这就是Hibernate的强大之处了,我们基本上可以不需要写任何的JDBC代码就能操作数据库了,而且更神奇的事情还在继续,让我们接下来继续前进,编写对应的测试类 StudentsTest如下所示
/**
* Created by xuhuanfeng on 2017-04-06.
* 测试Hibernate
*/
public class StudentsTest {
@Test
public void testCreate(){
// 获取Hibernate的配置对象
Configuration configuration = new Configuration().configure();
// 建立SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 打开session
Session session = sessionFactory.openSession();
// 所要添加到数据库的学生对象
Students students = new Students();
students.setAge(22);
students.setName("xuhuanfeng");
// 开启事务
Transaction ts = session.beginTransaction();
// 将数据添加到数据库
session.save(students);
// 提交事务
ts.commit();
// 关闭对应的连接
session.close();
sessionFactory.close();
}
}
保存之后直接运行即可,然后就可以查看对应的数据库数据了,相信你会惊奇的发现,对应的数据已经保存到数据库中了: )
控制台输出
细心的你可能会发现,在IDEA控制台中,输出了很多内容,接下来我们来粗略地看一下这些内容,在输出的内容中,主要内容如下
Hibernate:
create table students (
id integer not null,
name varchar(255),
age integer,
primary key (id)
) engine=MyISAM
Hibernate:
select
max(id)
from
students
Hibernate:
insert
into
students
(name, age, id)
values
(?, ?, ?)
相信看到上面这些内容的你会觉得非常熟悉,这些SQL语句就是Hibernate为我们生成的,也就是说,使用了Hibernate框架,我们基本上再也不需要编写这些SQL操作的语句了,因为Hibernate已经为我们做好了大部分重复性的操作了。
总结
这小节主要介绍了Hibernate以及Hibernate的优点,并且一步步动手搭建一个基于Maven的Hibernate的项目,编写对应的配置文件以及测试类,看到了Hibernate的神奇之处,不过Hibernate的神奇之处可不止这些,Hibernate的学习之路还在继续。