`

五 hibernate3的增删查改操作实现

 
阅读更多
基本功能练习
实验步骤:
1.设计domain对象User。
2.设计UserDao接口。
3.加入hibernate.jar和其依赖的包。
4.编写User.hbm.xml映射文件,可以基于hibernate/eg目录下的org/hibernate/auction/User.hbm.xml修改。
5.编写hibernate.cfg.xml配置文件,可以基于hibernate/etc/hibernate.cfg.xml修改;必须提供的几个参数:
	connection.driver_class、connection.url、connection.username、connection.password、dialect、hbm2ddl.auto。
6.编写HibernateUtils类,主要用来完成Hibnerate初始化和提供一个获得Session的方法;这步可选。
7.实现UserDao接口。

1 设计对象
package cn.domain;

import java.util.Date;

/**
 * Domain是一个领域模型 
 * 什么是领域模型呢 比如说一个人员 就有姓名 性别  年龄 职位等信息 
 * 这些信息组合在一起就是领域模型 
 * 当前这是一个人员实体类的领域模型 
 * @author Administrator
 */
public class Person {
	//id 
   private int pid; 
   //姓名
   private String pname; 
   //性别
   private String psex;
   //年龄
   private int page;
   //职业
   private String pduty;
   //出生日
   private Date birthday;
public int getPid() {
	return pid;
}
public void setPid(int pid) {
	this.pid = pid;
}
public String getPname() {
	return pname;
}
public void setPname(String pname) {
	this.pname = pname;
}
public String getPsex() {
	return psex;
}
public void setPsex(String psex) {
	this.psex = psex;
}
public int getPage() {
	return page;
}
public void setPage(int page) {
	this.page = page;
}
public String getPduty() {
	return pduty;
}
public void setPduty(String pduty) {
	this.pduty = pduty;
}
public Date getBirthday() {
	return birthday;
}
public void setBirthday(Date birthday) {
	this.birthday = birthday;
}
}

2.设计接口。
package cn.domain.dao;

import java.util.List;

import cn.domain.Person;

public interface PersonDao {
    public void savePerson(Person person)throws Exception;
    public void deleteByidPerson(int id);
    public void deletePerson(Person person)throws Exception;
    public List findPerson();
    public List findPersonName(String name);
    public List findPersonPsex(String psex);
    public Person findbyidPerson(int id);
    public boolean updatePerson(Person person)throws Exception;
}



3.加入hibernate.jar和其依赖的包。
4.编写Person.hbm.xml映射文件,可以基于hibernate/eg目录下的org/hibernate/auction/User.hbm.xml修改。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="cn.domain">

	<class name="Person">
		<id name="pid">
			<generator class="native"/>
		</id>
		<property name="pname"/>
		<property name="psex"/>
		<property name="page"/>
		<property name="pduty"/>
		<property name="birthday"/>
	</class>
	
</hibernate-mapping>


5.编写hibernate.cfg.xml配置文件,可以基于hibernate/etc/hibernate.cfg.xml修改;必须提供的几个参数:
	connection.driver_class、connection.url、connection.username、connection.password、dialect、hbm2ddl.auto。

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

<hibernate-configuration>
<session-factory>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="connection.url">jdbc:mysql:///test</property>
	<property name="connection.username">root</property>
	<property name="connection.password">root</property>
	<!-- 指定其方言 方言的作用就是告诉hibernate是哪种数据库 -->
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<!-- 指定其hibernate是否根据映射文件自动创建表 -->
	<property name="hbm2ddl.auto">update</property>
	<property name="show_sql">true</property>
	<mapping resource="cn/domain/Person.hbm.xml" />

</session-factory>
</hibernate-configuration>

6.编写HibernateUtils类,主要用来完成Hibnerate初始化和提供一个获得Session的方法;这步可选。
package cn.domain.uitl;

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

public class HibernateUtil {
     private static SessionFactory sessionFactory;
     /**
      * 不可继承
      */
     private HibernateUtil(){
    	 
     }
     /**
      * 单例
      */
     static{
    	 Configuration cfg=new Configuration().configure();
    	 /**
    	  * 获取SessionFactory对象 这个对象保存的就是配置文件中的 session-factory配置的信息
    	  */
    	 sessionFactory=cfg.buildSessionFactory();
    	 System.out.print("打开连接成功!");
     }
     
     public static SessionFactory getSessionFactory(){
    	 return sessionFactory;
     }
     
     public static Session getSession(){
    	  return sessionFactory.openSession();
     }
} 

7.实现UserDao接口。
package cn.domain.dao.imp;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import cn.domain.Person;
import cn.domain.dao.PersonDao;
import cn.domain.uitl.HibernateUtil;

public class PersonDaoimp implements PersonDao {

	@Override
	public void deleteByidPerson(int id) {
		Session session = null;
		Transaction tx = null;
			try {
				session = HibernateUtil.getSession();
				tx=session.beginTransaction();
				String hql = "delete from Person as p where p.pid=:id";
				Query q = session.createQuery(hql);
				q.setInteger("id", id);
				q.executeUpdate();
				tx.commit();
			} catch (Exception e) {
				tx.rollback();
				e.printStackTrace();
			} finally {
                 if(session!=null) {
                	 session.close();
                 }
			}
	}

	@Override
	public void deletePerson(Person person) throws Exception {
		Session session = null;
		Transaction tx = null;
			try {
				session = HibernateUtil.getSession();
				 tx=session.beginTransaction();
				session.delete(person);
			} catch (Exception e) {
				tx.rollback();
				e.printStackTrace();
			} finally {
                 if(session!=null) {
                	 session.close();
                 }
			} 
	}

	@Override
	public List findPerson() {
		List list=null;
		Session session = null;
		try {
			session = HibernateUtil.getSession();
			String hql = "from Person as p";
			Query q = session.createQuery(hql);
			list=q.list();
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
           if(session!=null)session.close();
		}
		return list;
	}

	@Override
	public List findPersonName(String name) {
		List list=null;
		Session session = null;
		try {
			session = HibernateUtil.getSession();
		    Criteria ct=session.createCriteria(Person.class);
		    ct.add(Restrictions.eq("pname", name));
		    list=ct.list();
		    return list;
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
           if(session!=null)session.close();
		}
		return list;
	}

	@Override
	public List findPersonPsex(String psex) {
		List list=null;
		Session session = null;
		try {
			session = HibernateUtil.getSession();
			String hql = "from Person as p where p.psex=?";
			Query q = session.createQuery(hql);
			q.setString(0,psex);
			list=q.list();
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
           if(session!=null)session.close();
		}
		return list;
	}

	@Override
	public Person findbyidPerson(int id) {
		List list=null;
		Session session = null;
		Person person=new Person();
		try {
			session = HibernateUtil.getSession();
			person =(Person)session.get(Person.class, id);
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
           if(session!=null)session.close();
		}
		return person;
	}

	@Override
	public void savePerson(Person person) throws Exception {
		Session session = null;
		Transaction tx = null;
			try {
				session = HibernateUtil.getSession();
				tx=session.beginTransaction();
				session.save(person);
	            tx.commit();
			} catch (Exception e) {
				tx.rollback();
				e.printStackTrace();
			} finally {
                 if(session!=null) {
                	 session.close();
                 }
			}
         
	}

	@Override
	public boolean updatePerson(Person person) throws Exception {
		boolean flg=false;
		Session session = null;
		Transaction tx = null;
			try {
				session = HibernateUtil.getSession();
				tx=session.beginTransaction();
				session.update(person);
	            tx.commit();
	            flg=true;
			} catch (Exception e) {
				tx.rollback();
				e.printStackTrace();
			} finally {
                 if(session!=null) {
                	 session.close();
                 }
			}
		 return flg;
	}

}



测试 

package cn.domain.test;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import cn.domain.Person;
import cn.domain.dao.PersonDao;
import cn.domain.dao.imp.PersonDaoimp;

public class PersonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws Exception {
		PersonDao pd=new PersonDaoimp();
//		Person person=new Person();
//		person.setPname("力大力");
//		person.setPsex("女");
//		person.setPage(26);
//		person.setBirthday(new Date());
//		person.setPduty("高级开发人员");
	    //pd.savePerson(person);
	    
	    //pd.deleteByidPerson(1);
	    List list=null;
//	    list=pd.findPerson();
//	    Iterator iter = list.iterator() ; 
//	    while(iter.hasNext()){
//	    	Person p=(Person)iter.next();
//	    	System.out.println(p.getPname());
//	    }
	    
//	      list=pd.findPersonName("许春荣");
//	      Iterator iter=list.iterator();
//	      while(iter.hasNext()){
//	    	  Person p=(Person)iter.next();
//	    	  System.out.println(p.getPname()+"--------->"+p.getPduty());
//	      }
	     // pd.deleteByidPerson(9);
	    
	    Person person=new Person();
	    person.setPid(10);
		person.setPname("蔡国庆");
		person.setPsex("女");
		person.setPage(23);
		person.setBirthday(new Date());
		person.setPduty("高级开发人员");
		pd.updatePerson(person);
	}

}


总结:在接口的实现类中 不要去使用定义一个无参的构造方法,在这个构造方法中实现连接工厂的获取 SessionFactory 
Session, Transaction的事务开启 因为这样在实现的方法中的Session的对象的关闭就不好控制,它是基于一个对象,比如说
在实现的方法中执行了关闭Session对象 这样做的目的是为了减少内存不必要的开销,优化性能,但是这样一来,如果连续进行跟
数据库的访问,那么就会出现会话关闭,而无法访问的情况 所以必须在实现的方法中去获取连接Session对象和Transaction的事务
操作对象 


end  
分享到:
评论

相关推荐

    hibernate4增删查改以及配置

    通过以上步骤,我们可以有效地使用 Hibernate 进行数据的增删查改操作,并确保数据的一致性和事务的安全性。在 J2EE 环境下,Hibernate 提供了强大的持久化层支持,使得开发者能够专注于业务逻辑的实现,而无需过多...

    struts hibernate spring增删查改

    综上所述,"struts hibernate spring 增删查改"的例子展示了如何利用这三个框架协同工作,实现一个完整的数据操作功能。通过Struts处理用户请求,Spring管理组件和事务,Hibernate处理数据库交互,我们可以构建出...

    中间件xml实现增删查改

    接下来,我们来看XML的增删查改操作。XML文件结构清晰,易于解析,适合存储结构化数据。在Java环境中,我们可以使用DOM(Document Object Model)、SAX(Simple API for XML)或者StAX(Streaming API for XML)来...

    jsf+hibernate+javabean完成对表的增删查改

    综上所述,"jsf+hibernate+javabean完成对表的增删查改"项目涵盖了前端与后端的集成,涉及了JavaWeb开发的核心技术和最佳实践。通过这样的组合,开发者能够高效地构建出功能完善的数据库驱动的应用程序。在实际项目...

    Myeclipse自动生成Hibernate配置并对数据库进行增删查改测试

    通过SessionFactory和Session对象,可以方便地执行HQL(Hibernate Query Language)或SQL查询,实现对数据库的增删查改。 例如,在`HibernateUnit.java`中,可以编写以下方法来实现这些操作: ```java public ...

    SSH实现增删查改

    在SSH中,Spring作为整个系统的粘合剂,可以整合Struts2和Hibernate,负责管理Action和DAO(数据访问对象)的实例化,以及事务控制,确保增删查改操作的正确性和原子性。 在实现增删查改功能时,首先需要设计好...

    Spring MVC+Spring+Hibernate实现简单的增删查改

    总之,通过整合Spring MVC、Spring和Hibernate,我们可以快速构建一个功能完善的Web应用,实现对数据库的增删查改。这个过程不仅有助于理解三大框架的工作原理,还能提升实际开发能力。对于初学者,这是一个很好的...

    用Hibernian实现基本的增删查改

    **标题:** 使用Hibernate实现基本的增删查改 **正文:** 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate提供了一种方便的方式来处理数据库操作,避免了大量繁琐的SQL代码。本教程将详细介绍如何使用...

    java编写数据库实现简单增删查改以及分页

    本示例通过Java实现了对数据库的简单增删查改(CRUD)以及分页功能,这在实际项目中非常常见。以下是对这些概念的详细解释: **1. 数据库连接** 首先,Java程序与数据库交互通常依赖于JDBC(Java Database ...

    struts2.1+spring2+hibernate3简单的增删查改,分页查询,还有国际化,数据验证框架等

    在这个项目中,这些框架被用来实现基本的数据操作,如增删查改(CRUD),以及分页查询、国际化和数据验证功能。下面将详细阐述这些知识点: 1. **Struts2.1**:Struts2是一个基于MVC设计模式的Web应用框架,用于...

    jpsJavaWep增删查改.zip

    在Java Web开发中,增删查改操作是构建动态网站或Web应用程序的核心部分。这些操作主要通过后端服务器处理,利用诸如Servlets、JSP(JavaServer Pages)、Spring MVC等技术来实现。以下是这个主题中涉及的一些关键...

    SSH+Oracle增删查改

    DAO层则专注于数据访问,使用Hibernate的API进行增删查改操作。 总的来说,"SSH+Oracle增删查改"涵盖了Java Web开发中的核心技术和数据库操作,是开发者必须掌握的基础技能之一。通过熟练运用这些技术,可以构建出...

    springboot增删查改功能实现

    在Spring Boot框架中,开发Web应用时,我们经常需要实现数据的增删查改(CRUD)功能。Spring Boot以其简化配置、快速开发的特点,深受开发者喜爱。在本教程中,我们将深入探讨如何利用Spring Boot来实现这些基本的...

    Flex + hibernate+sturts +lcd 增删查改1

    用户在Flex界面中执行增删查改操作后,请求会被发送到Struts,然后由Struts转发给Hibernate处理数据库事务,最后结果再反馈回Flex展示。 具体实现可能包括以下步骤: 1. 创建Flex界面,定义数据模型和事件监听器。 ...

    extjs实现增删查改

    总结来说,“extjs实现增删查改”涵盖了前端使用ExtJS组件进行数据操作,以及后端使用servlet、Spring和Hibernate进行数据处理的技术栈。这个过程涉及到了前端交互设计、数据模型管理、HTTP通信和数据库操作等多个...

    Hibernate的级联操作(增,删,该)

    接下来,我们将详细探讨Hibernate的级联操作,包括增、删、改这三种主要操作。 1. 级联添加(Cascade Type.ALL或Cascade Type.PERSIST) 当设置为`CascadeType.ALL`或`CascadeType.PERSIST`时,如果在父实体中创建...

    完整的Struts2+Spring2+Hibernate3增删查案例

    这个完整的案例旨在展示如何将这三个框架集成,实现数据的增删查操作。下面我们将深入探讨每个框架的核心功能以及它们之间的协同工作方式。 首先,Struts2是一个基于MVC设计模式的开源Web应用框架,它继承了Struts1...

    S2SH实现对数据库的增删查改项目

    6. **增删查改操作**:在数据库应用中,增删查改是最基本的功能。在S2SH项目中,这四个操作可以通过定义对应的Action类(Struts2),配置Action和Result(Struts2配置文件),以及编写DAO(数据访问对象)和Service...

    基于ssh的增删查改

    为了实现对`Employee`实体的增删查改操作,需要设计相应的DAO(Data Access Object)层。DAO层负责处理与数据库的交互,封装了所有对数据访问的细节。例如,`EmployeeDao`接口提供了`add()`、`update()`、`delete()`...

    Hibernate入门-搭建框架实现基本的增删改查(源码)

    在本教程中,我们将深入理解Hibernate的基本概念,并通过实例演示如何搭建框架来实现数据的增删改查操作。 **一、Hibernate简介** Hibernate 提供了一种在Java应用中持久化对象的机制,它将对象模型与关系数据库...

Global site tag (gtag.js) - Google Analytics