1.?? 數據庫 schema
teachers
表
:
create table teachers
(
? id????????? number(10) not null,
? teachername varchar2(15)
)
alter table teachers
? add constraint dere primary key (id)
students
表:
create table students
(
? id????????? number(10) not null,
? studentname varchar2(15),
? teacher_id? number(10)
)
alter table students
? add constraint rere primary key (id)
alter table students
? add constraint fff foreign key (teacher_id)
? references teachers (id);
2.?? teacher.java 和 student.java
package mypack;
public class teacher {
? // 教師 id
? private long id;
?
? // 教師名稱
? private string teachername;
?
? /**
?? * 缺省構造函數
?? */
? public teacher() {
? }
?
? /**
?? * 得到教師 id
?? * @return long??? 教師 id
?? */
? public long getid() {
??? return id;
? }
?
? /**
?? * 設置教師 id
?? * @param id long??? 教師 id
?? */
? public void setid(long id) {
??? this.id = id;
? }
?
? /**
?? * 得到教師名稱
?? * @return string??? 教師名稱
?? */
? public string getteachername() {
??? return teachername;
? }
? ?
? /**
?? * 設置教師名稱
?? * @param teachername string??? 教師名稱
?? */
? public void setteachername(string teachername) {
??? this.teachername = teachername;
? }
? /**
?? * 構造函數
?? * @param teachername string
?? */
? public teacher(string teachername) {
??? this.teachername = teachername;
? }
}
package mypack;
public class student {
? // 學生 id
? private long id;
?
? // 學生名稱
? private string studentname;
?
? // 教師類
? private teacher teacher;
?
? /**
?? * 缺省構造函數
?? */
? public student() {
? }
?
? /**
?? * 得到學生 id
?? * @return long??? 學生 id
?? */
? public long getid() {
??? return id;
? }
?
? /**
?? * 設置學生 id
?? * @param id long??? 學生 id
?? */
? public void setid(long id) {
??? this.id = id;
? }
?
? /**
?? * 得到學生名稱
?? * @return string??? 學生名稱
?? */
? public string getstudentname() {
??? return studentname;
? }
?
? /**
?? * 設置學生名稱
?? * @param studentname string??? 學生名稱
?? */
? public void setstudentname(string studentname) {
??? this.studentname = studentname;
? }
?
? /**
?? * 得到教師對象
?? * @return teacher??? 教師對象
?? */
? public teacher getteacher() {
??? return teacher;
? }
?
? /**
?? * 設置教師對象
?? * @param teacher teacher??? 教師對象
?? */
? public void setteacher(teacher teacher) {
??? this.teacher = teacher;
? }
? /**
?? * 構造函數
?? * @param string string
? ? * @param teacher teacher
?? */
? public student(string studentname, teacher teacher) {
??? this.studentname = studentname;
??? this.teacher = teacher;
? }
}
3.?? hibernate.properties
## oracle
hibernate.dialect net.sf.hibernate.dialect.oracle9dialect
hibernate.dialect net.sf.hibernate.dialect.oracledialect
hibernate.connection.driver_class oracle.jdbc.driver.oracledriver
hibernate.connection.username jbcm
hibernate.connection.password jbcm
hibernate.connection.url jdbc:oracle:thin:@localhost:1521:wsy
4.?? teacher.hbm.xml 和 student.hbm.xml
<?xml version="1.0"?>
<!doctype hibernate-mapping
public "-//hibernate/hibernate mapping dtd 2.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping >
? <class name="mypack.teacher" table="teachers" >
??? <id name="id" type="long" column="id">
????? <generator class="increment"/>
??? </id>
??? <property name="teachername" type="string" >
??????? <column name="teachername" length="15" />
??? </property>
? </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!doctype hibernate-mapping
public "-//hibernate/hibernate mapping dtd 2.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping >
? <class name="mypack.student" table="students" >
??? <id name="id" type="long" column="id">
????? <generator class="increment"/>
??? </id>
??? <property name="studentname" type="string" >
??????? <column name="studentname" length="15" />
??? </property>
?? <many-to-one
??????? name="teacher"
?????? ?column="teacher_id"
??????? class="mypack.teacher"
??????? cascade="save-update"
?????? />
? </class>
</hibernate-mapping>
5.?? 數據庫操作類
package mypack;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.configuration;
import java.util.*;
public class businessservice{
? //session 工廠類
? public static sessionfactory sessionfactory;
?
? // 實始化 session 工廠
? static{
???? try{
?????? // 建立配置類,添加 student 類和 teacher 類
?????? configuration config = new configuration();
?????? config.addclass(student.class)
???????????? .addclass(teacher.class);
????? // 得到 sessionfactory 對象
????? sessionfactory = config.buildsessionfactory();
? ?? }catch(exception e){e.printstacktrace();}
? }
? /**
?? * 通過學生類,查找教師類
?? * @param student student
?? * @throws exception
?? * @return list
?? */
? public list findteacherbystudent(student student) throws exception{
??? session session = sessionfactory.opensession();
??? transaction tx = null;
??? try {
????? tx = session.begintransaction();
????? list orders=(list)session.find("from student as o where o.teacher.id="+student.getid());
????? tx.commit();
????? return orders;
??? }catch (exception e) {
?? ???if (tx != null) {
??????? tx.rollback();
????? }
????? throw e;
??? } finally {
????? session.close();
??? }
? }
? /**
?? * 查找指定 id 的學生類
?? * @param student_id long
?? * @throws exception
?? * @return student
?? */
? public student findstudent(long student_id) throws exception{
??? session session = sessionfactory.opensession();
??? transaction tx = null;
??? try {
????? tx = session.begintransaction();
????? student student=(student)session.load(student.class,new long(student_id));
????? tx.commit();
?? ???return student;
??? }catch (exception e) {
????? if (tx != null) {
??????? // 發生錯誤,回滾
??????? tx.rollback();
????? }
????? throw e;
??? } finally {
????? // 沒有錯誤,關閉 session
????? session.close();
??? }
? }
?
? /**
?? * 級連保存 teacher 對象和 student 對象
?? * @throws exception
?? */
? public void saveteacherandstudentwithcascade() throws exception{
??? session session = sessionfactory.opensession();
??? transaction tx = null;
??? try {
????? tx = session.begintransaction();
????? teacher teacher=new teacher("myteacher");
????? student student1=new student("student1",teacher);
????? student student2=new student("student2",teacher);
????? session.save(student1);
????? session.save(student2);
????? tx.commit();
??? }catch (exception e) {
????? if (tx != null) {
????? ??// 發生錯誤,回滾
??????? tx.rollback();
????? }
????? e.printstacktrace();
??? } finally {
????? // 沒有錯誤,關閉 session
????? session.close();
??? }
? }
? /**
?? * 保存教師和學生對象
?? * @throws exception
?? */
? public void saveteacherandstudent() throws exception{
??? session session = sessionfactory.opensession();
??? transaction tx = null;
??? try {
????? tx = session.begintransaction();
????? teacher teacher=new teacher("teacher1");
????? session.save(teacher);
????? student student1=new student("student001",teacher);
????? student student2=new student("student002",teacher);
????? session.save(student1);
????? session.save(student2);
????? // 提交事務
????? tx.commit();
??? }catch (exception e) {
????? if (tx != null) {
??????? // 發生錯誤,回滾
??????? tx.rollback();
????? }
?? ???throw e;
??? } finally {
????? // 沒有錯誤,關閉 session
????? session.close();
??? }
? }
? /**
?? * 輸出學生對象集合
?? * @param students list
?? */
? public void printstudents(list students){
????? for (iterator it = students.iterator(); it.hasnext();) {
???????? student student=(student)it.next();
???????? system.out.println("ordernumber of "+student.getteacher().getteachername()+ " :"+student.getstudentname());
????? }
? }
? /**
?? * 測試方法
?? * @throws exception
?? */
? public void test() throws exception{
????? saveteacherandstudent();
//????? saveteacherandstudentwithcascade();
//????? student student=findstudent(1);
//????? list students=findteacherbystudent(student);
//????? printstudents(students);
? }
? public static void main(string args[]) throws exception {
??? new businessservice().test();
??? sessionfactory.close();
? }
}