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


Hibernate是什么


      Hibernate是一个轻量级的ORMapping框架

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

          

                        【SSH 基础】浅谈Hibernate--入门篇_第1张图片


ORMapping基本对应规则:

 

1:类跟表相对应

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

3:类的实例与表中具体的一条记录相对应

 

Hibernate的实现方式


                         【SSH 基础】浅谈Hibernate--入门篇_第2张图片


Hibernate解决的问题:


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

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

 

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


                        【SSH 基础】浅谈Hibernate--入门篇_第3张图片


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访问数据库的代码进行封装,简化了数据访问层繁琐的重复性代码。


下篇继续!



你可能感兴趣的:(【SSH 基础】浅谈Hibernate--入门篇)