hibernate的配置运用案例

1. 导入Hibernate所需要的jar包,这些包在Hibernate的lib目录下的required目录下。

   antlr-2.7.7.jar
   dom4j-1.6.1.jar
   hibernate-commons-annotations-4.0.1.Final.jar
   hibernate-core-4.1.7.Final.jar
   hibernate-jpa-2.0-api-1.0.1.Final.jar
   javassist-3.15.0-GA.jar
   jboss-logging-3.1.0.GA.jar
   jboss-transaction-api_1.1_spec-1.0.0.Final.jar

2. 导入数据库的驱动包:mysql-connector-java-5.1.38-bin.jar。

3. 加入主配置文件,在project\etc目录中可以找到。主配置文件默认的路径在src目录下,默认名称是:hibernate.cfg.xml。

4. 加入映射文件,文件名称为:xxxx.hbm.xml,xxxx通常用实体类名来处理,如:Grade.hbm.xml,放在entity目录下或独立的目录中。

5. 创建JavaSE项目(只是做Hibernate案例SE足够)


6. 主配置文件hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<!-- 把name="foo"属性去掉 -->
	<session-factory>
		<!--这里是Hibernate框架的基本配置:数据库连接,框架参数的配置,映射文件的配置  -->
		<!-- 方言,表示Hibernate框架在与某个数据库进行映射,才能自动生成某个数据库特有的SQL语句 -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/myschool?characterEncoding=utf-8</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		
		<!--Hibernate框架的基本配置  -->
		<!-- 打印sql语句,一般开发时运用 ,跟踪自动生成的Sql语句-->
		<property name="show_sql">true</property>
		<!-- 格式化打印的sql语句,一般开发时运用,便于区分关键字 -->
		<property name="format_sql">true</property>
		<!--此属性表示根据当前线程来操作数据,可以提交或者回滚  -->
		<property name="current_session_context_class">thread</property>
		<!--数据库中的表结构可以随映射文件的配置发生改变 -->
		<property name="hbm2ddl.auto">create</property>
		<!--映射文件加载  -->
		<mapping resource="com/zhq/entity/Grade.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

7. 映射文件Grade.hbm.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">
<!--映射文件的根节点,package:表示实体对象的包名  -->
<hibernate-mapping package="com.zhq.entity">
  <!--class:表示实体类,name:类名 table:表示数据库中的表名  -->
  <class name="Grade" table="grade">
  	<!--表示主键  -->
  	<id name="gradeId" column="gradeId" type="int">
  	<!--主键的生成策略,native:表示交由数据库按自身特定的自动增长策略来自动生成增长值  。-->
  		<generator class="native"/>
  	</id>
  	<!--表示主键和外键之外的普通列name:表示实体对象的属性名,column:数据库表的列名,如果属性名和列名一致可以省略column。  -->
  	<property name="gradeName" column="gradeName" type="string" length="20"></property>
  </class>
  <!-- 可以在一个文件中配置多个实体映射对象,但通常情况下不会这样子做。
  	<class name="XXX" table="XXX">
  	</class>
   -->
</hibernate-mapping>

8. 实体类Grade.java

package com.zhq.entity;

public class Grade {
	private int gradeId;
	private String gradeName;
	public int getGradeId() {
		return gradeId;
	}
	public void setGradeId(int gradeId) {
		this.gradeId = gradeId;
	}
	public String getGradeName() {
		return gradeName;
	}
	public void setGradeName(String gradeName) {
		this.gradeName = gradeName;
	}
	@Override
	public String toString() {
		return "Grade [gradeId=" + gradeId + ", gradeName=" + gradeName + "]";
	}
	
}

9. 辅助类SessionFactoryUtil.java,用于获取连接Session,操作数据库对象

package com.zhq.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class SessionFactoryUtil {
	private static Object object=new Object();
	private static Configuration configuration=null;
	private static ServiceRegistry registr=null;
	private static SessionFactory factory=null;
	static {
		//加载主配置文件,当主配置文件在默认路径下。且文件名也是默认名称,则自动去寻找。
		 configuration=new Configuration().configure();
		//创建Session工厂,4.0版本不建议用,3.0版本和5.0版本建议用
		//SessionFactory factory=configuration.buildSessionFactory();
		//注册服务对象
		registr=new ServiceRegistryBuilder().
				applySettings(configuration.getProperties()).
				buildServiceRegistry();
	}
	private SessionFactoryUtil () {};
	private static SessionFactory getSessionFactory() {
		if(factory==null) {
			synchronized (object) {
				if(factory==null) {
					 factory=configuration.buildSessionFactory(registr);
				}
			}
		}
		return factory;
	}
	public static Session getSession() {
		//获取连接Session,此对象用于操作数据库对象
		//Session session=getSessionFactory().openSession();此方法无法回滚
		return getSessionFactory().getCurrentSession();
	}

}

10. 增删改测试类Main.java

package com.zhq.controller;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.zhq.entity.Grade;
import com.zhq.util.SessionFactoryUtil;

public class Main {

	public static void main(String[] args) {
		/*增
		 * Grade g=new Grade();
		   g.setGradeName("大三");
		   add(g);
		 */
		
		/*查全部
           read();
        */
		
		/*通过主键查询某个
		   readOne(1);
		 */
		
		/*通过主键删除
		  delete(29);
		 */
		
		/*通过主键修改
		 * Grade g=new Grade();
		   g.setGradeId(27);
		   g.setGradeName("大三");
		   update(g);
		 */
		
	}
	//查全部
	public static void read() {
		//获取连接Session,此对象用于操作数据库对象
		Session session=SessionFactoryUtil.getSession();
		//开启事务,如果是增删改的操作,必须要提交事务
		session.beginTransaction();
		//根据Session连接对象操作数据库,"from Grade"是HQL语言,注意:Grade是表示实体对象
		Query query=session.createQuery("from Grade");
		@SuppressWarnings("unchecked")
		List<Grade> grades=query.list();
		for(Grade grade:grades){
			System.out.println(grade);
		}
		session.close();
	}
	//查单个对象
	public static void readOne(int gradeId) {
		//获取连接Session,此对象用于操作数据库对象
		Session session=SessionFactoryUtil.getSession();
		//开启事务,如果是增删改的操作,必须要提交事务
		session.beginTransaction();
		Grade g=(Grade) session.get(Grade.class, gradeId);
		if(g!=null) {
			System.out.println(g);	
		}else {
			System.out.println("没有找到相关数据");
		}
	}
	//增
	public static void add(Grade g) {
		Session session=SessionFactoryUtil.getSession();
		Transaction tx=null;
		try {
			tx=session.beginTransaction();
			session.save(g);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		}
	}
	//删
	public static void delete(int gradeId) {
		Session session=SessionFactoryUtil.getSession();
		Transaction tx=null;
		try {
			tx=session.beginTransaction();
			Grade g=(Grade) session.get(Grade.class, gradeId);
			if(g!=null) {
				session.delete(g);	
			}else {
				System.out.println("没有找到相关数据");
			}
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		}
	}
	//改
	public static void update(Grade g) {
		Session session=SessionFactoryUtil.getSession();
		Transaction tx=null;
		try {
			tx=session.beginTransaction();
			session.update(g);	
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值