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

运行环境: 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();		
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值