Hibernate的基础---导包,配置XML文件,运行第一个程序

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

  虽然现在项目开发偏向于SSM开发,但是Hibernate相比Mybatis还是有非常多的优势所在。Mybatis的优势在于上手容易,属于轻量级的框架。而Hibernate相比而言是一个重量级框架,有着非常强大的缓存机制。

1.基础 导包

  Hibernate jar包下载地址:http://hibernate.org/orm/releases/

下载完毕后,在required文件中是我们必须要导入一些包。

当然我们还需要导入数据库驱动的包以及日志包。


解释:



配置XML文件:

Hibernate实现了类到数据库的映射。下面首先先创建班级类和在数据库中创建班级表。

建立数据表:


创建班级类:

package domain;

public class ClassRoom {
private int cid;
private String classname;//要为属性创建set和get方法
//必须建立空参构造,因为Hibernate涉及到java反射机制要用到空参构造来实例化
public ClassRoom() {
	super();
	// TODO Auto-generated constructor stub
}
public ClassRoom(int cid, String classname) {
	super();
	this.cid = cid;
	this.classname = classname;
}
public int getCid() {
	return cid;
}
public void setCid(int cid) {
	this.cid = cid;
}
public String getClassname() {
	return classname;
}
public void setClassname(String classname) {
	this.classname = classname;
}

}

在domain包下继续配置关于类ClassRoom的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 package="domain"> <!-- 填写包名,使得下面的classname可以直接写类名即可 -->
 	<!-- 开始配置类与数据表的关系 -->
 	<!-- 类名 数据表名 -->
 	<class name="ClassRoom" table="ClassRoom">
 		<!-- 配置主键id -->
	 	<id>
	 		<generator class="native"></generator>
	 		<!-- 主键生成方式 有hilo,icrement,native等几种 -->
	 	</id>
	 	<!-- 配置对应属性 -->
	 	<!-- 属性名称 对应数据表的栏的名称 如果两者相同可以省去column -->
	 	<property name="classname" column="classname" ></property>
 	
 	</class>
 
 </hibernate-mapping>

然后我们需要配置主配置文件,这个主配置文件是重中之重,必须命名为hiber.cfg.xml,而且要放在src路径下。

<?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:///WEB15</property>
	<!-- 数据库用户名 -->
		<property name="hibernate.connection.username">root</property>
	<!-- 数据库密码 -->
		<property name="hibernate.connection.password">347859</property>
	<!-- 数据库方言 不同数据库方言不同 这里使用mysql数据库 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<!-- 可选配置 -->
		<!-- 是否在控制台打印sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- sql语句是否格式化 -->
		<property name="hibernate.format_sql"></property>
		<!-- 建表模式 一般天update -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.current_session_context_class">thread</property>
		<!-- 关联的子XML文件路径 -->
		<mapping resource="domain/ClassRoom.hbm.xml"/>
	  	
  	</session-factory>
  	</hibernate-configuration>

开始测试第一个demo:

package Test;


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


import domain.ClassRoom;


public class Hibernatetest {
	@Test
public void First() {
//加载映射配置文件
Configuration configure = new Configuration().configure();
//得到session工厂对象,这是一个重量级的对象,极耗内存,所以一个项目一般只有一个
SessionFactory SessionFactory = configure.buildSessionFactory();
//session会话对象实现数据库的增删改查
Session session = SessionFactory.openSession();
//事务对象具有提交,回滚功能
Transaction Transaction = session.beginTransaction();
	//增加一个班级
	ClassRoom room=new ClassRoom();
	room.setClassname("1班");
	//这里没有设置cid是因为我们在主键生成方式选择了native交由Hiberbnate框架处理
    session.save(room);
Transaction.commit();
session.close();
}
}

程序的结果:


值得一提的是,往往我们session对象是线程不安全的,我们通常使用Session session = SessionFactory.getCurrentSession();方法来获取session,这种方法的前提是需要在主配置文件中加入

<property name="hibernate.current_session_context_class">thread</property>

意思是将session绑定在线程之中。


XML配置文件是非常的繁琐,而且属性名,列名经常会打错,导致各种各样的错误。但是基于XML文件的程序能很好的实现类的分装和数据库操作,相对于原始的JDBC程序有了很大的改善。

程序的主要运行流程可以简单的说:

首先通过configure对象加载主配置文件,绑定了数据表和实体类之间的关系,然后得到与之关联的session对象,session对象的增删改查方法肯定不会适用与任何实体对象的,在执行save方法前程序会room.class与主配置文件的关联路径的类文件比较,在类文件有room.class类的情况下才会运行成功。

猜你喜欢

转载自blog.csdn.net/springtostring/article/details/79437671
今日推荐