第一个hibernate程序

来源:互联网 发布:农产品网络销售数据 编辑:程序博客网 时间:2024/05/19 20:56

一、hibernate介绍

1、什么是Hibernate?

数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等。Hibernate是用面向对象的思想来操作数据库的数据持久层的一个轻量级框架,并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,节省了我们开发处理数据的时间。

2、Hibernate的优点

1)、使用简洁的hql语句(Hibernate query language)。可以不使用传统的insert,update等sql语句。比如insert一个对象,原来的做法是:insert into 表名称 alue(值1,值2,值3,……),而现在的做法是:save(对象)。

2)、使用orm映射。对象到关系数据库之间的映射。是从对象的角度操作数据库,再次体现了面向对象思想。原来的实体抽取方法:首先有了表,然后表映射实体对象。而现在Hibernate做法是:直接由对象映射到表。

3)、没有侵入性,移植性比较好。什么是没有侵入性?就是Hibernate采用了pojo对象。所谓的pojo对象就是没有继承Hibernate类或实现Hibernate接口。这样的话,此类就是一个普通的java类,所以移植性比较好。

4)、支持透明持久化。透明是针对上层而言的。三层架构的理念是上层对下层的依赖,只是依赖接口不依赖具体实现。而Hibernate中的透明是指对业务逻辑层提供了一个接口session,而其他的都封装隐藏。持久化是指把内存中的数据存放到磁盘上的文件中。

3、深度理解一下Hibernate

1)、Hibernate是对JDBC进一步封装

没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理。使用了Hibernate封装了JDBC,不再需要操作数据,直接操作Hibernate就行了。

2)、Hibernate是开源的一个ORM(对象关系映射)框架

ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

3)、代码分层

典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。



二、hibernate环境搭建

1、下载hibernate相关jar包,hibernate基于eclipse的插件

http://hibernate.org/orm/downloads/
http://tools.jboss.org/downloads/jbosstools/neon/4.4.2.Final.html#zips
注意:插件下载时需要与eclipse版本对应。

2、导入hibernate相关jar包,安装hibernate基于eclipse的插件



三、第一个hibernate程序

先配置hibernate的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>  <!-- 设置数据库URL -->  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>  <!-- 数据库用户名 -->  <property name="hibernate.connection.username">root</property>  <!-- 数据库密码 -->  <property name="hibernate.connection.password">123456</property>   <!-- 指定ddl的生成方式 -->  <property name="hibernate.hbm2ddl.auto">create</property>  <mapping resource="com/lhb/HibernateText/model/User.hbm.xml"/> </session-factory></hibernate-configuration>


其中的<mapping resource="com/lhb/HibernateText/model/User.hbm.xml"/>表示映射文件

创建Model类,相应代码如下:

package com.lhb.HibernateText.model;public class User {private int id;private String userNme;private String password;public User() {}public User(int id, String userNme, String password) {this.id = id;this.userNme = userNme;this.password = password;}public User(String userNme, String password) {this.userNme = userNme;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserNme() {return userNme;}public void setUserNme(String userNme) {this.userNme = userNme;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Urse [id=" + id + ", userNme=" + userNme + ", password=" + password + "]";}}
配置映射文件,将hibernate和Model类关联起来,代码如下:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-1-9 9:28:56 by Hibernate Tools 3.5.0.Final --><hibernate-mapping><class name="com.lhb.HibernateText.model.User" table="USER"><id name="id" type="int"><column name="ID" /><generator class="assigned" /></id><property name="userNme" type="java.lang.String"><column name="USERNME" /></property><property name="password" type="java.lang.String"><column name="PASSWORD" /></property></class></hibernate-mapping>
创建一个测试类,检测hibernate是否能运行成功,测试类使用eclipse自带的单元测试JUnit。使用了hibernate的核心接口,另附博文阐述。相关代码如下:

package com.lhb.HibernateText.model;import static org.junit.Assert.*;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.junit.After;import org.junit.Before;import org.junit.Test;public class UserTest {SessionFactory sessionFactory;Transaction transaction;Session session;@Before//该方法运行在Text测试之前public void setUp() throws Exception {// 读取hibernate.cfg.xml文件Configuration config = new Configuration().configure();ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();// 建立SessionFactorysessionFactory = config.buildSessionFactory(serviceRegistry);session = sessionFactory.openSession();transaction = session.beginTransaction();}@After//该方法运行在Text测试之后public void tearDown() throws Exception {transaction.commit();session.close();sessionFactory.close();}@Testpublic void test() {User user = new User(1002, "admin", "123456");session.save(user);}}
数据库运行结果:



测试成功。







1 0
原创粉丝点击