`
liucl_tiger
  • 浏览: 3260 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate两表的增、删、查、改的操作

阅读更多
Student.java
package com.egt.vo;


public class Student  implements java.io.Serializable {


 
     private Long id;
     private Stuinfo stuinfo = new Stuinfo();
     private String name;
     private String pass;


 
    /** default constructor */
    public Student() {
    }

	/** minimal constructor */
    public Student(Long id) {
        this.id = id;
    }
    
    /** full constructor */
    public Student(Long id, Stuinfo stuinfo, String name, String pass) {
        this.id = id;
        this.stuinfo = stuinfo;
        this.name = name;
        this.pass = pass;
    }

   
    // Property accessors

    public Long getId() {
        return this.id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }

    public Stuinfo getStuinfo() {
        return this.stuinfo;
    }
    
    public void setStuinfo(Stuinfo stuinfo) {
        this.stuinfo = stuinfo;
    }

    public String getName() {
        return this.name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return this.pass;
    }
    
    public void setPass(String pass) {
        this.pass = pass;
    }
   








}

 

Student.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.egt.vo.Student" table="STUDENT" schema="CHEN">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="increment" />
        </id>
        <many-to-one name="stuinfo" class="com.egt.vo.Stuinfo" fetch="select" cascade="all">
            <column name="STUID" precision="22" scale="0" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="pass" type="java.lang.String">
            <column name="PASS" />
        </property>
    </class>
</hibernate-mapping>

 

Stuinfo.java 
package com.egt.vo;

import java.util.HashSet;
import java.util.Set;


/**
 * Stuinfo generated by MyEclipse - Hibernate Tools
 */

public class Stuinfo  implements java.io.Serializable {


    // Fields    

     private Long stuid;
     private String sex;
     private Long age;
     private Set students = new HashSet(0);


    // Constructors

    /** default constructor */
    public Stuinfo() {
    }

	/** minimal constructor */
    public Stuinfo(Long stuid) {
        this.stuid = stuid;
    }
    
    /** full constructor */
    public Stuinfo(Long stuid, String sex, Long age, Set students) {
        this.stuid = stuid;
        this.sex = sex;
        this.age = age;
        this.students = students;
    }

   
    // Property accessors

    public Long getStuid() {
        return this.stuid;
    }
    
    public void setStuid(Long stuid) {
        this.stuid = stuid;
    }

    public String getSex() {
        return this.sex;
    }
    
    public void setSex(String sex) {
        this.sex = sex;
    }

    public Long getAge() {
        return this.age;
    }
    
    public void setAge(Long age) {
        this.age = age;
    }

    public Set getStudents() {
        return this.students;
    }
    
    public void setStudents(Set students) {
        this.students = students;
    }
}

 

Stuinfo.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.egt.vo.Stuinfo" table="STUINFO" schema="CHEN">
        <id name="stuid" type="java.lang.Long">
            <column name="STUID" precision="22" scale="0" />
            <generator class="increment" />
        </id>
        <property name="sex" type="java.lang.String">
            <column name="SEX" />
        </property>
        <property name="age" type="java.lang.Long">
            <column name="AGE" precision="22" scale="0" />
        </property>
        <set name="students" inverse="true" cascade="all">
            <key>
                <column name="STUID" precision="22" scale="0" />
            </key>
            <one-to-many class="com.egt.vo.Student" />
        </set>
    </class>
</hibernate-mapping>
 

 

Hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

	<session-factory>
		<property name="dialect">
			org.hibernate.dialect.Oracle9Dialect
		</property>
		<property name="connection.url">
			jdbc:oracle:thin:@127.0.0.1:1521:DB
		</property>
		<property name="connection.username">chen</property>
		<property name="connection.password">123</property>
		<property name="connection.driver_class">
			oracle.jdbc.driver.OracleDriver
		</property>
		<property name="myeclipse.connection.profile">DB</property>
		<property name="show_sql">true</property>
		<mapping resource="com/egt/vo/Student.hbm.xml" />
		<mapping resource="com/egt/vo/Stuinfo.hbm.xml" />

	</session-factory>

</hibernate-configuration>

 

以下是对两表中的相应的增、删、查、改的操作的方法;
package com.egt.dao;

import java.util.List;

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

import com.egt.vo.Student;
import com.egt.vo.Stuinfo;

public class Dao {
	Session session;
	public Dao(){
		Configuration con = new Configuration().configure();
		SessionFactory sessionFactory = con.buildSessionFactory();
		 session = sessionFactory.openSession();
	}
	public void sel(){
		String hql = "from Student student left join fetch student.stuinfo info where student.stuinfo = info.stuid ";
		Query query = this.session.createQuery(hql);//编译查询语句;
		List list = query.list();//将结果放入一个容器中;
		System.out.println("姓名"+"  "+"密码" );
		//以循环的方式把所有的记录都输出来;
		for(int i=0;i<list.size();i++){
			Student stu = (Student)list.get(i);
			System.out.println(stu.getName()+"|| "+stu.getPass()+" ||"+stu.getId()+" ||"+stu.getStuinfo().getSex()+" ||"+stu.getStuinfo().getAge());;
		}
		session.close();//关闭事务;
	}
	public void add(Student vo){
		Transaction tra = session.beginTransaction();//创建一个事务;
		Stuinfo stuinfo = vo.getStuinfo();//得到stuinfo表中的信息;
		session.save(stuinfo);//保存子表的信息;
		session.save(vo);//保存主表的信息;
		tra.commit();//提交事务;
		session.close();//关闭session对象;
	}
	public void del(Student vo){
		Transaction tra = session.beginTransaction();//创建一个事务;
		String hql = "from Student where id="+vo.getId();//查询要删除的记录的ID号;
		Query query = session.createQuery(hql);//编译查询语句;
		Student student = (Student) query.list().get(0);//将查询出来的记录放入一个对象中;
		session.delete(student);//将查询出来的记录给删除;
		tra.commit();//提交事务;
		session.close();//关闭session对象;
	}
	public void upd(Student vo){
		Transaction tra = session.beginTransaction();//创建一个事务;
		session.saveOrUpdate(vo);//调用修改方法;
		tra.commit();//提交事务;
		session.close();//关闭事务;
		
	}
	public Student getStudent(Student stu){
		String hql = "from Student where id="+stu.getId();//查询要修改的记录的ID号;
		Query q = session.createQuery(hql);//编译查询语句;
		Student stu1 = (Student) q.list().get(0);//把查询到的记录放入到一个对象中;
		System.out.println(stu1.getName()+"  "+stu1.getPass()+"  "+stu1.getId()+"  "+stu1.getStuinfo().getSex()+"  "+stu1.getStuinfo().getAge());
//		Transaction tra = session.beginTransaction();
//		tra.commit();
//		session.close();
		return stu1;//把值返回;
//		return (Student) session.load(Student.class,stu.getId());
		
		
	}
}

 

对以上的方法的调用;
package com.egt.daoImp;

import com.egt.dao.Dao;
import com.egt.vo.Student;
import com.egt.vo.Stuinfo;

public class DaoImp {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 查询两表中所有的记录;
		Dao dao = new Dao();
//		dao.sel();
		
		//向两表添加一条数据;
//		Student student = new Student();//创建一个对象;
//		Stuinfo info = new Stuinfo();
//		info.setAge(333L);//设置stuinfo表中的年龄、性别的值;
//		info.setSex("1");
//		student.setName("ses you");//设置主表student表中的姓名、密码的值;
//		student.setPass("123456");
//		student.setStuinfo(info);//将了表stuinfo中的值保存到表中;
//		dao.add(student);//将主表student中的值保存到表中;
		
		//以ID号来删除两表中的记录;
//		Student student = new Student();//创建一个对象;
//		Stuinfo info = new Stuinfo();
//		student.setId(15L);//设置主表中要删除的ID字段的值;
//		dao.del(student);//删除主表中对ID号的字段,子表中的记录也随着删除;
		
		//以ID号得到的记录来修改记录;
		Student student = new Student();//创建一个对象;
		student.setId(14L);//设置主表中ID号的值;
		Student stu = dao.getStudent(student);//调用DAO中以ID号来查询单条记录的方法;
		stu.setName("来吧");//设置主表中要修改的字段的值;
		stu.setPass("liucljik");
		Stuinfo info = stu.getStuinfo();//以学生来找到对应的学生信息;
		info.setAge(99L);//设置子表中要修改的字段的值;
		info.setSex("0");
		stu.setStuinfo(info);//修改子表中的对应字段的值;
		dao.upd(stu);//修改主表中的对应字段的值;
		
		//以ID号来查询单一的记录;
//		Student stu = new Student();//创建一个对象;
//		stu.setId(3L);//设置要查询的记录的ID号;
//		System.out.println(stu.getName()+"  "+stu.getPass()+"  "+stu.getId()+"  "+stu.getStuinfo().getSex()+"  "+stu.getStuinfo().getAge());
//		dao.getStudent(stu);//调用方法;
		
	}

}

 这是自己写的一个两表的增、删、查、改的操作;

如有错误,请指出,我是一个刚接触编程的菜鸟;

以下是我所操作的数据库表;

  • two.rar (1.4 KB)
  • 下载次数: 108
分享到:
评论
8 楼 2001430 2009-07-13  
ok,你把timestamp和date类型的数据显示一下,谢谢~!
7 楼 liucl_tiger 2008-11-20  
pyzheng 写道

楼主很不错&nbsp; 但是我还很疑问Transaction tra = session.beginTransaction();//创建一个事务;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stuinfo stuinfo = vo.getStuinfo();//得到stuinfo表中的信息;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(stuinfo);//保存子表的信息;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(vo);//保存主表的信息;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tra.commit();//提交事务;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();//关闭session对象;------------------------------------看你这里&nbsp; 我都分不清哪个是子表哪个是主表了&lt;set name="students" inverse="true" cascade="all"&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="STUID" precision="22" scale="0" /&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/key&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="com.egt.vo.Student" /&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;&nbsp; -----------------主表应该是Stuinfo吧?

我这里的主表是student,子表是stuinfo!
6 楼 pyzheng 2008-11-12  
楼主很不错  但是我还很疑问

Transaction tra = session.beginTransaction();//创建一个事务; 
        Stuinfo stuinfo = vo.getStuinfo();//得到stuinfo表中的信息; 
        session.save(stuinfo);//保存子表的信息; 
        session.save(vo);//保存主表的信息; 
        tra.commit();//提交事务; 
        session.close();//关闭session对象;
------------------------------------
看你这里  我都分不清哪个是子表哪个是主表了



<set name="students" inverse="true" cascade="all"> 
            <key> 
                <column name="STUID" precision="22" scale="0" /> 
            </key> 
            <one-to-many class="com.egt.vo.Student" /> 
        </set> 
-----------------
主表应该是Stuinfo吧?
5 楼 zhu410289616 2008-11-07  
学习了。。。
4 楼 Ethip 2008-11-07  
学习&支持!
3 楼 liucl_tiger 2008-11-07  
有什么不对的地方还请多多指出!
2 楼 winner720 2008-11-07  
有反馈的的学习,学会分享了了。好样的
1 楼 lkjust08 2008-11-07  
LZ写的不错,加油呼

相关推荐

    spring4+hibernate4实现增删改查

    本文将深入探讨如何使用Spring4和Hibernate4实现数据库的增删改查操作,以及在这个过程中可能涉及的关键知识点。 首先,Spring4是一个全面的Java应用程序框架,它提供了一种方式来管理组件(或称为bean)之间的依赖...

    Struts2+Hibernate的增删改查

    综上所述,"Struts2+Hibernate的增删改查"项目是一个典型的Java Web开发示例,涵盖了前端请求处理、后端数据库操作、业务逻辑封装等多个层面,对于初学者来说,这是一个很好的学习和实践平台。通过这个项目,开发者...

    Hibernate+struts 增删改查

    在IT行业中,开发Web应用程序时,常常需要对数据库进行数据操作,这通常涉及到"增删改查"(CRUD)的基本功能。"Hibernate+Struts"是一个常见的Java Web开发框架组合,它们一起提供了强大的后端数据处理能力。下面将...

    spring+struts2+hibernate框架双表增删改查

    总之,"spring+struts2+hibernate框架双表增删改查"项目为初学者提供了一个完整的实战平台,通过这个项目,学习者可以深入理解这三个框架如何协同工作,实现复杂的数据操作,同时掌握Java Web开发的基本流程和技巧。...

    myeclipse+mysql+hibernate+struts2增删改查

    在IT行业中,构建一个完整的Web应用常常涉及到多个技术的整合,本项目就是一个很好的例子,它采用了"Myeclipse+MySQL+Hibernate+Struts2"的技术栈来实现数据的增删改查功能。这是一个典型的企业级应用架构,适用于...

    hibernate增删改查

    《Hibernate的增删改查操作详解》 在Java Web开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate如何进行增删改查(CRUD)操作,旨在帮助开发者更好地理解...

    struts+hibernate+mysql做的增删改查小例子

    在这个"struts+hibernate+mysql做的增删改查小例子"中,我们将深入探讨这三个技术如何协同工作来实现数据的CRUD(Create、Read、Update、Delete)操作。 首先,Struts是一个基于MVC设计模式的Java框架,它主要用于...

    struts2和hibernate结合增删改查

    将这两者结合起来,可以有效地实现对数据库的增删改查操作,提高开发效率。 首先,理解Struts2的核心概念。Struts2框架基于拦截器模型,通过Action类和配置文件来管理请求与响应。它提供了一种灵活的方式来处理用户...

    struts2与hibernate整合单表增删改查(超完整)

    本教程将详细介绍如何将这两个框架整合起来,实现一个完整的用户注册和单表数据的增删改查功能,使用MySQL作为后台数据库。 **1. Struts2框架** Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java ...

    hibernate框架下的增删改查

    在这个主题下,我们将深入探讨Hibernate如何实现数据库的增删改查(CRUD)操作。 ### 增加(Create) 在Hibernate中,增加数据通常是通过`Session`对象的`save()`或`saveOrUpdate()`方法完成的。首先,你需要创建...

    Struts+hibernate实现增删改查功能

    在"Struts+hibernate实现增删改查功能"的项目中,开发者可能已经完成了以下步骤: 1. **配置环境**:安装JDK、Tomcat服务器、Struts和Hibernate的相关库,配置好环境变量。 2. **数据库设计**:创建MySQL数据库,...

    jsf1.2+spring3.0+hibernate3.3例子-单表增删改查

    使用jsf1.2+spring3.0+hibernate3.3实现集成,利用annotation实现自动对象管理注入,用户表的登录增删改查操作,包括验证码ajax集成,消息机制,国际化处理,自定义转换器,自定义验证器等 qq:38732796 欢迎讨论

    struts hibernate增删改查

    基于Struts 2+Hibernate实现员工管理系统。一个单位有多个部门,每个部门有多名员工,每个员工只属于一个部门。基于该要求,实现员工和部门的管理(包括添加、查询、删除和修改等操作),并且要实现部门与员工之间的...

    hibernate+struts实现jsp增删改查分页

    hibernate+struts实现jsp增删改查分页! hibernate实现对数据库的操作,struts实现对表单的操作! 实现了分页功能! (注:本本项目中文会出现乱码,我还没有解决!附有数据库文件!)

    (hibernate_10增删改查DAO

    标题中的“hibernate_10增删改查DAO”暗示了本次讨论的主题是关于Hibernate框架在数据库操作中的应用,特别是涉及到数据的插入(Insert)、删除(Delete)、更新(Update)以及查询(Query)功能,并且是通过DAO...

    struts+hibernate+单表的增删改查

    本文将详细介绍如何利用Struts2和Hibernate实现对单表的增删改查操作。 #### 二、环境搭建 1. **Web.xml配置**: ```xml xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=...

    使用springmvc+hibernate完成增删改查

    在本项目中,"使用springmvc+hibernate完成增删改查"意味着开发者已经配置好了SpringMVC和Hibernate的环境,能够通过这两个框架进行数据操作。数据无需创建自动生成,可能指的是使用了Hibernate的自动建表功能,或者...

    Hibernate_单表CRUD 对于单独一个表的增删改查

    对于某个数据库的单独一个表的增删改查操作,简单易懂可移植性强。需要配合mysql数据库,由于只有一个表,只需要按照java文件里面的建一个database叫chinasoft,再添一个表就可以看到实例的操作效果了,非常简单,...

    spring3 + hibernate3 实现用户的增删改查

    本教程将详细介绍如何利用Spring3和Hibernate3实现用户管理系统的增删改查功能,非常适合初学者入门。 Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,帮助...

Global site tag (gtag.js) - Google Analytics