`
1140566087
  • 浏览: 558864 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18519
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:313973
Group-logo
J2ME 基础学习课程集
浏览量:18726
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17574
社区版块
存档分类
最新评论

Hibernate 连接数据库的方法

阅读更多
初级,最笨重的方法:

package com.svse.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.svse.entity.TDept;

//部门数据处理
public class DeptDao_1 {
	
	//全查询 , 
	public List getAll(){
		List ar = new ArrayList();
		//1、加载配置文件,连接数据库
		Configuration config = new Configuration().configure();
		//2、得到数据映射的工具:SessionFactory;
		SessionFactory sessionFactory = config.buildSessionFactory();
		//3、得到动作处理工具Session,执行相应的动作;
		Session session = sessionFactory.openSession();
		
		//4、使用Session工具执行动作;
		ar = session.createQuery("FROM TDept").list();
		
		//5、关闭工具
		session.close();
		return ar;
	}
	
	//查询一个
	public TDept getOne(int p_id){
		TDept dept = new TDept();
		
		Configuration config = new Configuration().configure();
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		
		// 通过ID 获取到一个对象;TDept.class 使用到java的反射机制;
		dept = (TDept) session.get(TDept.class, new Integer(p_id));
		
		session.close();
		return dept;
	}
	
	/*************************************************************************/
	/********************************
	 * 	增、删、改 :三种操作设计到数据的变化,则影响数据的安全性,所以需要使用事务以保证数据的
	 * 	安全性;
	 *	 
	 * 
	 * 
	 * 
	 ********************************/
	
	//增加
	public void addDept(TDept dept){
		Configuration config = new Configuration().configure();
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction ctx = session.beginTransaction();
		
		//增加session.save(dept);
		session.save(dept);
		
		ctx.commit();
		session.close();
	}
	
	//修改
	public void update(TDept dept){
		Configuration config = new Configuration().configure();
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		
		//开启事务
		Transaction ctx = session.beginTransaction();
		
		//修改:update();方法
		session.update(dept);
		
		//提交事务
		ctx.commit();
		session.close();
	}
	
	//删除
	public void delete(TDept dept){
		Configuration config = new Configuration().configure();
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		
		// 开启事务以保证数据的安全性;
		Transaction ctx = session.beginTransaction();
		
		//动作:delete(); 操作
		session.delete(dept);
		
		//提交事务
		ctx.commit();
		session.close();
	}
	
	public static void main(String[] args) {
		DeptDao_1 dao = new DeptDao_1();
		System.out.println(dao.getAll().size());
	}
}



中级:较为简化的连接方法:

package com.svse.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.svse.entity.TUser;

//使用封装类简化代码进行操作
public class UserDao1 {

	//定义基本属性字段
	private static Configuration config = null;
	private static SessionFactory sessionFactory = null;
	private static Session session = null;
	private static Transaction ctx = null;

	//该内部类的特点:UserDao1这个实例化一次的时候自动的调用一次;
	static{
		try{
			config = new  Configuration().configure();
			sessionFactory = config.buildSessionFactory();
			session = sessionFactory.openSession();

		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

	//增加
	public void addUser(TUser user){
		ctx = session.beginTransaction();
		session.save(user);
		ctx.commit();
		session.close();
	}

	//修改
	public void updateUser(TUser user){
		ctx = session.beginTransaction();
		session.update(user);
		ctx.commit();
		session.close();
	}

	//删除
	public void delUser(TUser user){
		ctx = session.beginTransaction();
		session.delete(user);
		ctx.commit();
		session.close();
	}

	//全查询
	public List getAll(){
		List ar = new ArrayList();
		ar = session.createQuery("FROM TUser").list();
		session.close();
		return ar;
	}

	//查询一个
	public TUser getOne(int u_id){
		TUser user = new TUser();
		user = (TUser) session.get(TUser.class, new Integer(u_id));
		session.close();
		return user;
	}


}



高级:最简单的方法,使用接口封装:

辅助类:


package com.svse.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory {


    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();    
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

	static {
    	try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err
					.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
    }
    private HibernateSessionFactory() {
    }
	
	/**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the <code>SessionFactory</code> if needed.
     *
     *  @return Session
     *  @throws HibernateException
     */
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

		if (session == null || !session.isOpen()) {
			if (sessionFactory == null) {
				rebuildSessionFactory();
			}
			session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
			threadLocal.set(session);
		}

        return session;
    }

	/**
     *  Rebuild hibernate session factory
     *
     */
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err
					.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}

	/**
     *  Close the single hibernate session instance.
     *
     *  @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }

	/**
     *  return session factory
     *
     */
	public static org.hibernate.SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	/**
     *  return session factory
     *
     *	session factory will be rebuilded in the next call
     */
	public static void setConfigFile(String configFile) {
		HibernateSessionFactory.configFile = configFile;
		sessionFactory = null;
	}

	/**
     *  return hibernate configuration
     *
     */
	public static Configuration getConfiguration() {
		return configuration;
	}

}



定义接口规则:


package com.svse.util;

import org.hibernate.Session;

//结果定义规则
public interface IHibernateSessionFactorySupport {
	
	//得到Session
	public Session getSession();
	
	//开启事务
	public void beginTransaction();
	
	//提交事务
	public void commitTransaction();
	
	//关闭所有
	public void closeAll();
}



接口实现,编写规则:

package com.svse.util;

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

public class HibernateSessionFactorySupportImpl implements
		IHibernateSessionFactorySupport {

	//定义事务的对象:
	private Transaction ctx = null;
	
	//开启事务
	public void beginTransaction() {
		ctx = this.getSession().beginTransaction();
	}

	//提交事务
	public void commitTransaction() {
		try{
			ctx.commit();
		}catch(Exception ex){
			ex.printStackTrace();
			//事务回滚
			if(ctx!=null){
				ctx.rollback();
			}
		}finally{
			HibernateSessionFactory.closeSession();
		}
	}
	
	//关闭所有:调用自动生类中定义方法
	public void closeAll() {
		HibernateSessionFactory.closeSession();
	}

	//得到Session
	public Session getSession() {
		
		//返回一个Session的对象
		return HibernateSessionFactory.getSession();
	}

}


具体数据获取,访问数据库得到数据:

package com.svse.dao;

import java.util.List;

import com.svse.entity.TUser;
import com.svse.util.HibernateSessionFactorySupportImpl;

public class UserDao2 extends HibernateSessionFactorySupportImpl {
	
	//增加--涉及到数据的变化,需要使用事务
	public void addUser(TUser user){
		//第一步:开启事务
		this.beginTransaction();
		//第二步:执行动作
		this.getSession().save(user);
		//第三步:提交事务,并关闭相关的工具
		this.commitTransaction();
	}
	
	//修改
	public void updateUser(TUser user){
		//第一步:涉及到数据的安全性,先开启事务;
		this.beginTransaction();
		//第二步:获得Session对象并执行修改的动作;
		this.getSession().update(user);
		//第三步:提交事务,并关闭相关的工具;
		this.commitTransaction();
	}
	
	//删除
	public void delUser(int u_id){
		//1、开启事务
		this.beginTransaction();
		//2、执行动作
		this.getSession().delete(this.getOne(u_id));
		//3、提交事务:并关闭相关的工具
		this.commitTransaction();
	}
	
	//查询一个
	public TUser getOne(int u_id){
		//第一步:获取Session对象执行动作,得到集合对象获取数据;
		TUser user= (TUser) this.getSession().get(TUser.class, new Integer(u_id));
		//第二步:关闭Session工具;
		this.closeAll();
		return user;
		
	}
	
	//全查询
	public List getAll(){
		List ar = this.getSession().createQuery("FROM TUser").list();
		this.closeAll();
		return ar;
	}
	
	public static void main(String[] args) {
		UserDao2 dao = new UserDao2();
		TUser user = new TUser();
		user.setUId(1);
		user.setUName("小红aa");
		user.setUPwd("123");
		dao.updateUser(user);
	}
}




0
3
分享到:
评论

相关推荐

    hibernate连接金仓数据库所需jar包集合lib.7z

    8. **测试连接**:在代码中编写测试方法,尝试连接数据库,确保配置无误。 在实际开发中,可能会遇到版本兼容性问题、性能优化、事务隔离级别调整等挑战,因此理解这些jar包的功能并熟练掌握其使用是至关重要的。...

    hibernate与各种数据库的连接配置

    为了使用 Hibernate,需要配置连接数据库的设置。下面将介绍 Hibernate 与各种数据库的连接配置,包括 MySql、Sql Server、Oracle 和 DB2 等。 MySql 连接配置 MySql 是一个开源的关系数据库管理系统,广泛应用于 ...

    java利用hibernate连接数据库

    Java通过Hibernate连接数据库是Java开发中的常见操作,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇文章将详细讲解如何利用Hibernate在Java项目中建立数据库连接,以及提供一个...

    Hibernate连接数据库的注册的项目

    首先,Hibernate连接数据库的核心在于`hibernate.cfg.xml`配置文件。这个文件包含了数据库连接的所有必要信息,如数据库URL、用户名、密码、驱动类等。例如: ```xml &lt;hibernate-configuration&gt; ...

    Hibernate 配置各种数据库

    配置 Hibernate 连接数据库 在 Hibernate 的配置文件中,我们可以使用 properties 文件或 XML 文件来配置数据库连接。下面是一个使用 properties 文件配置 Hibernate 连接数据库的示例: hibernate.connection....

    Hibernate连接数据库的类

    此文件主要有Hibernate连接数据库的方法...

    hibernate配置数据库连接池的三种方法

    连接池通过预先创建并维护一定数量的数据库连接,当程序需要连接数据库时,可以从池中获取一个已存在的连接,而不是每次都创建新的。使用完毕后,连接不会被关闭,而是返回到连接池中供其他线程复用。这样,连接的...

    Hibernate连接数据库模拟

    在这个“Hibernate连接数据库模拟”项目中,我们将会深入探讨如何使用Java DOM解析XML配置文件来实现Hibernate的数据访问。 首先,Hibernate的核心在于它的配置文件——`hibernate.cfg.xml`,这个文件包含了数据库...

    Hibernate连接数据库.pdf

    《Hibernate连接数据库详解》 在IT行业中,数据库管理和数据访问技术是至关重要的组成部分,而Hibernate作为Java领域中的一款优秀对象关系映射(ORM)框架,为开发者提供了方便、高效的数据库操作方式。本篇将深入...

    Hibernate配置数据库连接

    ### Hibernate配置数据库连接知识点详解 #### 一、Hibernate简介与作用 Hibernate 是一款开源的对象关系映射(Object Relational Mapping, ORM...掌握这些配置方法对于高效地使用 Hibernate 进行数据库操作至关重要。

    hibernate 连接数据库基础源码

    【hibernate 连接数据库基础源码】的解析与详解 Hibernate 是一款强大的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在本教程中,我们将深入探讨Hibernate如何连接到MySQL、Oracle等...

    hibernate 连接数据库基础源码2

    在深入探讨Hibernate连接数据库的基础源码之前,我们首先要理解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过使用Hibernate,开发者可以将业务...

    hibernate连接各种数据库的方法

    #### 二、配置Hibernate连接数据库 为了成功地使用Hibernate与数据库进行交互,我们需要正确配置`hibernate.cfg.xml`或`persistence.xml`文件中的连接参数。以下是一些关键配置项: - **hibernate.dialect**:指定...

    Hibernate 多数据库支持解决方案

    这样,不同的数据库环境只需配置相应的连接参数,而无需修改核心的配置文件。 4. **大字段处理** - 当处理大量数据或大字段时,如BLOB或CLOB类型,需要注意内存管理和数据库性能。可以使用`lob`类型映射,或者考虑...

    hibernate连接各种数据库的配置

    ### Hibernate连接各种数据库的配置详解 #### 一、概述 在软件开发中,数据库操作是一项基本且重要的功能。Hibernate作为一种流行的Java持久层框架,能够帮助开发者简化与数据库交互的过程。本文将详细介绍如何...

    hibernate 连接数据库基础源码3

    **hibernate 连接数据库基础源码3** 在Java编程中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库事务。本教程将深入探讨Hibernate连接...

    java用hibernate连接数据库提取中文

    在本项目中,“java用hibernate连接数据库提取中文”是利用Hibernate框架在Eclipse集成开发环境中与Oracle数据库进行交互,以读取和处理中文数据的小程序。下面我们将详细讨论相关的知识点。 首先,我们需要了解...

    Hibernate不同数据库的连接及SQL方言

    这些驱动程序可以让Hibernate连接不同的数据库。但是,为了确保数据的正确性和一致性,Hibernate还需要使用不同的SQL方言来适应不同的数据库。 在Hibernate的配置文件中,我们可以使用元素来设置数据库连接的各种...

    Hibernate操作数据库的步骤

    `Configuration`类用于加载这个配置文件,`configure()`方法完成解析工作,设置好与数据库的连接参数。 2. **读取并解析映射信息**:映射文件(如`*.hbm.xml`)定义了Java对象与数据库表之间的映射关系。`...

Global site tag (gtag.js) - Google Analytics