【SSH 基础】浅谈Hibernate--入门篇


Hibernate是什么


      Hibernate是一个轻量级的ORMapping框架

      ORMapping原理(Object Relational Mapping)就是把对象里面的数据和数据库里面的数据,依照一定的规则进行映射的过程。

          

                        


ORMapping基本相应规则:

 

1:类跟表相相应

2:类的属性跟表的字段相相应

3:类的实例与表中详细的一条记录相相应

 

Hibernate的实现方式


                         


Hibernate解决的问题:


    通过上图我们也能发现。Hibernate主要用来实现Java对象和表之间的映射。除此之外还提供数据查询和获取数据的方法,能够大幅度降低开发时人工使用SQL和JDBC处理数据的时间。

Hibernate的目标是对于开发人员通常的数据持久化相关的编程任务中解放出来。

   

 

Hibernate能够帮助你消除或者包装那些针对特定厂商的SQL代码,而且帮你把结果集从表格式的表示形式转换到一系列的对象去。


                        


hibernate长处:

1、封装了jdbc。简化了非常多反复性代码。

2、简化了DAO层编码工作。使开发更对象化了。

3、移植性好,支持各种数据库。假设换个数据库仅仅要在配置文件里变换配置就能够了。不用改变hibernate代码。

4、支持透明持久化,由于hibernate操作的是纯粹的(pojo)java类。没有实现不论什么接口,没有侵入性。所以说它是一个轻量级框架。


以下结合应用实例帮助大家理解:

 

实体类:

import java.util.Date;
public class User {

	private String id;
	private String username;
	private String userpassword;
	private String createTime;
	private String expireTime;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String name) {
		this.username = name;
	}
	public String getUserpassword() {
		return userpassword;
	}
	public void setUserpassword(String password) {
		this.userpassword = password;
	}
	public String getCreateTime() {
		return createTime;
	}
	public void setCreateTime(String createTime) {
		this.createTime = createTime;
	}
	public String getExpireTime() {
		return expireTime;
	}
	public void setExpireTime(String expireTime) {
		this.expireTime = expireTime;
	}
}

创建hibernate映射文件User.hbm.xml

映射文件告诉Hibernate它应该訪问数据库里面的哪个表(table)和应该使用表里面的哪些字段(column)。

由于这里仅仅有一个Class ---User和一个Table --- t_user,你仅仅须要建立一个映射文件---User.hbm.xml,来相应User类和t_user表之间的关系。


<hibernate-mapping package="com.bjpowernode.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="uuid"></generator>
		</id>
		<property name="username"></property>
		<property name="userpassword"></property>
		<property name="createTime"></property>
		<property name="expireTime"></property>
	</class>
	
</hibernate-mapping>

配置Hibernate描写叙述文件hibernate.cfg.xml

 

Hibernate描写叙述文件能够是一个properties或xml文件,当中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描写叙述文件。


<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_first</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">hejingyuan</property>
		<!-- 方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show.sql">true</property>
		<property name="hibernate.show.format_sql">true</property>
		<!-- 指定User的映射文件 -->
		<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

生成表方法

/**
 * 将hbm生成ddl
 * @author Administrator
 *
 */
public class ExportDB {

	public static void main(String[] args) {
		//默认读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		SchemaExport export = new SchemaExport(cfg);
		export.create(true, true);
	}
}

加入用户

public static void main(String[] args) {
		//读取hibernate.cfg.xml文件--缺省默认文件,假设仅仅new的话。会读取porperties
		Configuration cfg=new Configuration().configure();
		
		//建立SessionFactory,线程安全的。最好一个数据库创建一次
		SessionFactory factory=cfg.buildSessionFactory();
		
		//取得Session,真正要用的时候才去关联connection,这个connection与我们之前学的不同,称为持久化管理器
		Session session=null;
		try{
			session=factory.openSession();
			//开启事务
			session.beginTransaction();
			User user=new User();
			user.setUsername("张三");
			user.setUserpassword("123");
			user.setCreateTime(new Date().toString());
			user.setExpireTime(new Date().toString());
			
			//保存User对象
			session.save(user);
			//提交事务
			session.getTransaction().commit();
			
		}catch(Exception e){
			e.printStackTrace();
			//回滚事务
			session.getTransaction().rollback();
		}finally{
			if(session != null){
				if(session.isOpen()){
					//关闭session
					session.close();
				}
			}
		}
		
	}

总结:


      千里之行始于足下,这篇文章仅是迈向Hibernate大道的一个起点。以上仅仅是简介了Hibernate解决的问题。事实上Hibernate就是一个转换器。完毕对象实例与数据库表的转换,对JDBC訪问数据库的代码进行封装。简化了数据訪问层繁琐的反复性代码。


下篇继续!



posted @ 2017-07-09 21:09  gccbuaa  阅读(177)  评论(0编辑  收藏  举报