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);//调用方法;
		
	}

}

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值