Hibernate 学习经验之谈-(一) 初始配置

  • Post author:
  • Post category:其他


运行环境: MySQL5.6  Hibernate 4.3.7 发布版

IDE: MyEclipse for Spring

序言:



小编之前比较仓促的学习了SSH 框架并开始开发了一些小项目,因为那时候时候是看着马士兵比较旧的视频学习的,但是自己使用的4.3.7发行版。新版跟视频中的旧版配置或多或少有点出入。现在有时间重温一下Hibernate 的技术,重新加强一下自己的基础,故开始编写Hibernate 学习经验之谈一系列的文章。如果文章中有什么不妥之处,望各路大神斧正。




学习一个技术,往往最权威的教课书就是官方文档了,接下来的这一系列的博客,都会依据官方文档来进行一个学习。虽然重温,对于初学者可以尝试阅读本系列博客,希望能够给大家一些帮助。

在项目中我主要使用的配置方式是:注解配置,弱xml配置,所以对注解不太了解的博友,要靠自己补一下了,不对注解进行太多说明,毕竟这是针对个人学习过程笔记类博客。

干货;

一.配置hibernate 环境




官方文档的配置方式是采用maven 来进行搭建hibernate 环境的,但是如果现在夹杂太多hibernate 之外的知识恐怕对于不了解maven 的博友会多一点障碍,所以采用原始的手动加包的方式:

1.到官网下载开发包:

http://hibernate.org/orm/documentation/



2.加入lib 目录下required 文件夹下的所有包;





3.当然也不能缺少jdbc 驱动的包了;




通过以上步骤就能搭建起初步我们需要使用的Hibernate 使用环境了。

二.开始一个简单的hello world 程序

1.查看官方文档中关于配置Hibernate 的描述,并且开始配置hibernate.cfg.xml



http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html#tutorial-firstapp-configuration



在里面你可以得到一个怎样写一个hibernate.cfg.xml 的文档应该怎样写,copy it!新建一个hibernate.cfg.xml  放到你的项目src 目录下面中去,然后进行修改,以满足自己的需求。



我的项目结构






(1)修改我们的jdbc 链接信息






这里的话我们使用jdbc 来做链接,所以按 jdbc 的写法填写内容就行了。

里面有关于数据库访问设置的内容:

(2)修改我们的本地数据库的方言





方言是指,当你使用HQL(hibernate的官方查询语言)进行查询的时候,hibernate 会帮你自动转换成你所用的数据库的语言。其中使用的值的话可以参考官方文档




http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch03.html#configuration-optional-dialects





其中可以看到MySQL 就有很多种,在官方文档中似乎没有对其中的信息进行说明,我们可以通过网上一篇博客了解一下其中的区别


(3)方便调试的属性配置 show_sql 和format_sql





show_sql是当执行sql语句的时候,展示出来,fomat_sql 是把输出的语句进行格式化一下。

(4)hibernate 的hbm2ddl 配置




这个配置是有create,update,create-drop ;


http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch03.html#configuration-optional

这里面有官方的简单解释,但是其中的区别是什么最好动手验证看看。


官网解析:Automatically validates or exports schema DDL to the database when the

SessionFactory

is created.

create —每次sessionFactory 建立好的时候,会进行自动先移除原有实体表,重新建立新的表。

update —每次建立成功sessionFactory 的时候,对原有的的表不移除,对没有的表进行新建。

常用的就是以上的内容;

(5)注解方式添加实体配置


在第一步配置环境的时候可以看到,hibernate4已经在必须的包含了注解包,我们可以直接使用这种方式开始进行实体映射。


完整的配置文件


   
   



   
   

	
    
    

		
     
     
		
     
     
      
      com.mysql.jdbc.Driver
     
     
		
     
     
      
      jdbc:mysql://localhost/hibernatetest
     
     
		
     
     
      
      root
     
     
		
     
     
      
      123456
     
     


		
     
     
		
     
     
      
      1
     
     

		
     
     
		
     
     
      
      org.hibernate.dialect.MySQL5Dialect
     
     

		
     
     
		
     
     
      
      thread
     
     

		
     
     
		
     
     
      
      org.hibernate.cache.internal.NoCacheProvider
     
     

		
     
     
		
     
     
      
      true
     
     
		
     
     
      
      true
     
     

		
     
     
		
     
     
      
      create
     
     
		
		
     
     

	
    
    


   
   

2.实体映射

package com.hwj.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import sun.launcher.resources.launcher;


@Table(name="t_teacher")
@Entity
public class Teacher {
  
	private int id;
	private String name;
	private String title;
	
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	
	
	
	
}

3.获取sessionFactory 的工具类


这里官方文档有点坑了,按照这样的方法进行配置,你会发现读取cfg配置文档的时候出错了,我根据网上搜索到的编写方式,重新写了一下工具类的过程,如下,这样才能正常执行
package com.hwj.utils;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
        	Configuration configuration=new Configuration().configure();
        	
    		return configuration.buildSessionFactory( 
    				new StandardServiceRegistryBuilder() 
    				.applySettings(configuration.getProperties())
    				.build() );           			    				           
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

4..测试代码

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.hwj.model.Teacher;
import com.hwj.utils.HibernateUtil;


public class MainTest {
	
	private Session session;
	private SessionFactory sessionFactory;
	

	//当调用Test注解的方法前调用
	@Before
	public void init(){	
		this.sessionFactory=HibernateUtil.getSessionFactory();
				this.session=this.sessionFactory.getCurrentSession();	
				this.session.beginTransaction();
	}
	
	
	@Test
	/** 向数据库中插入一个实体对象*/
	public void add(){		
		Teacher teacher =new Teacher();
		teacher.setName("李四");
		teacher.setTitle("经理");	
		this.session.save(teacher);}
	
	
	
	
	//当结束对Test方法后的时候调用
	@After
	public void destory(){		
		session.getTransaction().commit();
		sessionFactory.close();		
	}

}




版权声明:本文为coder_hwj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。