Hibernate环境搭建

问题?如何Hibernate环境搭建

首先我们来谈谈,为什么要用hibernate框架,为什么不用jdbc来连接数据库直接操作数据库?各自有缺点在哪儿?如何搭建环境?

hibernate框架又称ormapping框架优缺点:

      Hibernate环境搭建_第1张图片


Jdbc的优缺点

              Hibernate环境搭建_第2张图片

由上面的优缺点比较,我们选择用hibernate框架的理由,在于我们能更加操作数据库,更加的灵活,也不用去写冗长的sql语句,移植性也好。

实际上我们用ormapping框架也是基于jdbc连接数据库,只是在上面更加进步了。它对数据的操作是讲数据以缓存二进制数据的形式存储到内存中,然后进行数据库的操作。


ormapping框架的作用:对象关系映射
        让关系型数据库和对象发生关联  如下结构图:



hibernate的配置文件:
   作用是用来连接数据库的

         


二、搭建环境

1.加入必须要用的jar包。这里所使用的jar都是一些开发中常用的jar,所需依情况而定。jar下载:jar下载

加载如下:Hibernate环境搭建_第3张图片


                   Hibernate环境搭建_第4张图片

2.建立实体类:

package cn.itcast.hibernate.web.domain;

import java.io.Serializable;

/**
 * 对象的序列化的作用:让对象在网络上传输,以二进制的形式传输
 * @author Administrator
 * Serializable标示接口
 *
 */
public class Person implements Serializable {
	private Long pid;
	private String pname;
	private String psex;
	public Long getPid() {
		return pid;
	}
	public void setPid(Long pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public String getPsex() {
		return psex;
	}
	public void setPsex(String psex) {
		this.psex = psex;
	}
}
实体类(持久化类)中的属性名和数据库表中的列字段名相同,而实体类的名字一般与数据库的表面相同,若是不同在映射文件中用table属性来特别指定


3.建立 实体类名.hbm.xml映射文件:这个是用来将实体类(持久化类)和数据库配置文件进行一个映射关系

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
<hibernate-mapping>
	<!--@class 描述持续化类 
		name  类的全名
	 	table 数据库表名,可以不写  默认值和类名一样 
	 	catalog  数据库的名称  一般不写
	-->
	<class name="cn.itcast.hibernate.web.domain.Person">
		<!-- @id
			*id标示属性  和数据库中的主键对应
			name  属性的名称(跟映射的实体类相同)
			column 列的名称(布尔歇默认跟name的相同)
			type 类型(可以填写两种类型,一种是Java类型如:long,该类型效率更高)
<span style="white-space:pre">				</span>另外一种是hibernate类型如:java.lang.Long
<span style="white-space:pre">				</span>注:大小写
		 -->
		<id name="pid" column="pid" length="5" type="java.lang.Long">
			<!-- @generator
				主键的产生器
				  就该告诉hibernate容器用什么样的方式产生主键
			 -->
			<generator class="increment"></generator>
		</id>
		
		<!-- @property
			描述一般属性
		 -->
		<property name="pname" column="pname" length="20" type="java.lang.String">
		</property>
		
		<property name="psex" column="psex" length="10" type="java.lang.String">
		</property>
		
		
	</class>
</hibernate-mapping>
               Hibernate环境搭建_第5张图片
3.建立hibernate.cfg.xml数据库配置文件:首先在mysql中建一个数据库:itcast_sh_hibernate  注:数据库是布恩那个自动生成的,而表我们可以通过配置文件、隐身文件、持久化类之间进行自动生成表(在开发中就不用生成表了。数据库都是提前搭建好的。)

          

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<!-- 
		一个session-factory只能连接一个数据库
	-->
<session-factory>
	<!-- 
		数据库的用户名
	-->
	<property name="connection.username">root</property>
	<!-- 
		密码
	-->
	<property name="connection.password">root</property>
	<!-- 
		url
	-->
	<property name="connection.url">
		jdbc:mysql://localhost:3306/itcast_sh_hibernate
	</property>
	<!-- @property name="hbm2ddl.auto"
		作用:根据持久化类和映射文件生成表
		validate:验证持久化类在映射文件中描述正不正确,只验证
		create-drop:hibernate容器开启的时候生成表,关闭的时候删除表(不用)
		create:hibernate容器开启的时候生成表(不用)
		update:表示hibernate开启的时候,先检查持久化类和映射问件和表到底对应不对应,
		不对应的话,我新建一个表。对应的话,验证描述正不正确(validate)
	-->
	<property name="hbm2ddl.auto">update</property>
	<!-- 
		显示hibernate内部生成的sql语句
	-->
	<property name="show_sql">true</property>

	<!--@mapping resource
		表示和映射文件相对应
	-->
	<mapping resource="cn/itcast/hibernate/web/domain/Person.hbm.xml" />

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

4.写一个test测试类

package cn.itcast.hibernate.web.test;

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

import cn.itcast.hibernate.web.domain.Person;

public class TableTest {
	@Test
	public void testadd(){
		Configuration configuration=new Configuration();
		configuration.configure();
		SessionFactory sessionfactory=configuration.buildSessionFactory();
		
		//打开数据库连接池
		Session session=sessionfactory.openSession();
		//开始事物
		Transaction transaction=session.beginTransaction();
		//cud操作
		Person person=new Person();
		person.setPname("Mr_Li13");
		person.setPsex("MAN");
		//save中的参数必须是持久化对象类
		session.save(person);
		//提交事务
		transaction.commit();
		//关闭数据库连接池
		session.close();//因为整个过程是缓存中的io流,需要关闭事物的
	}
}


常见的数据库没连接错误:

/**

* Configuration  读取hibernate配置文件的对象
*/
Configuration configuration=new Configuration();
configuration.configure();//调用方法加载配置文件
//configure():调用这种方式的话,有两个条件,
//1:hibernate.cfg.xml文件必须放在根目录下
//2:名字必须为:hibernate.cfg.xml因为它的父类方法就是这样写的
configuration.buildSessionFactory();


错误:经过测试两个持久化类对象不同,但是标识符相同,这种情况是不允许产生的。

@Test
	public void testIndenty(){
		
		//两个持久化对象不同,但是标识符相同,这种情况是不允许产生的。
		Session session=sessionfactory.openSession();
		Transaction transaction=session.beginTransaction();
		Person person=(Person)session.get(Person.class, 2L);
		Person person1=new Person();
		person1.setPid(2L);
		session.update(person1);
		transaction.commit();
		session.close();
	}

错误提示:

用这个就可以检测是否搭建成功了。



案例:案例下载

hibernate两种读取配置文件方式:

      1.Hibernate环境搭建_第6张图片


  2.

Hibernate环境搭建_第7张图片


整个ormapping的流程:

Hibernate环境搭建_第8张图片



注意事项:

   1、一个类是否是持久化类

        1、加载配置文件

        2、在配置文件中加载映射文件

        3、解析映射文件中class元素的name属性,找到对应的类

   2、在客户端的参数的类必须是持久化类



你可能感兴趣的:(Hibernate,hibernate的框架,hibernate的配置文件)