Hibernate学习笔记

本文通过一个简单的Hibernate示例介绍如何在Oracle数据库中创建表并实现基本的CRUD操作。包括配置文件、实体类定义、映射文件及测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一个Hibernate例子

现在假设我们在Oracle数据库中创建了一个表Student,它的字段如下表所示:

字段 说明
Student_ID 学员编号,整型,PK,自动增长
Student_Name 学员姓名,字符串类型
Student_Age 学员年龄,整型
如果我们在Oracle中定义这个数据库表,我们可以定义一个创建数据库表的SQL脚本如下:
create table Student(
 Student_ID  number(6) NOT NULL PRIMARY KEY,
 Student_Name varchar2(10) NOT NULL,
 Student_Age number(2) NOT NULL
);

    另外,因为在Oracle中没有“自动增长”类型的字段,所以通常情况下我们需要定义一个sequence来作为自动增长类型字段的数据。在这里,我们也可以定义一个sequence来给Student_ID字段提供数据。创建sequence的SQL脚本如下:

CREATE SEQUENCE student_sequence
INCREMENT BY 1
START WITH 1000
NOMAXVALUE
NOCYCLE
CACHE 10;

    我们在这里创建了一个student_sequence,准备用来作为Student_ID字段的值。

    接着,我们需要一个hibernate.cfg.xml或者属性文件hibernate.properties来指定Hibernate所使用的数据库以及用户名、密码等其他相关的配置,我们在此使用xml文件,它的内容如下:

源文件:hibernate.cfg.xml
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

   true
  
org.hibernate.dialect.Oracle9Dialect

  

oracle.jdbc.driver.OracleDriver

  

jdbc:oracle:thin:@localhost:1521:nitpro

  
system

   manager
 

    做完前面的这些准备工作后,下面就让我们进入激动人心的Hibernate编程吧!

    首先,我们需要定义一个用于表示“学生”对象的Student类:

源文件:Student.java

java 代码
  1. public class Student   
  2. {   
  3.     private int student_id;   
  4.     private String student_name;   
  5.     private int student_age;   
  6.        
  7.     public int getStudent_id()   
  8.     {   
  9.         return student_id;   
  10.     }   
  11.     public String getStudent_name()   
  12.     {   
  13.         return student_name;   
  14.     }   
  15.     public int getStudent_age()   
  16.     {   
  17.         return student_age;;   
  18.     }   
  19.     public void setStudent_id(int id)   
  20.     {   
  21.         this.student_id = id;   
  22.     }   
  23.     public void setStudent_name(String name)   
  24.     {   
  25.         this.student_name = name;   
  26.     }   
  27.     public void setStudent_age(int age)   
  28.     {   
  29.         this.student_age = age;   
  30.     }    
  31. }   

    这个类很简单,就是一个典型的JavaBean的定义:有三个属性:student_id、student_name和student_age,分别对应数据库表Student中的三个字段,并且在这个类中定义了对应各个属性的setter/getter方法。

    接下来,我们需要给这个类定义一个XML映射文件“Student.hbm.xml”,文件内容如下:

源文件:Student.hbm.xml

     PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
            
                    
                    
                student_sequence
           
       
        
         type="java.lang.String"/>
        type="java.lang.Integer"/>
   

    注意,在这个xml文件中,我们首先使用class元素定义了我们定义的Java类和数据库表之间的关系,在这里,我们定义的Java类和数据库表名称都是Student,然后,我们使用id元素定义了主键名称、类型等,它有一个子元素generator来说明主键的产生方式,此处指定的是“native”,表示根据数据库来选择,比如,对于Oracle数据库,它会去寻找一个sequence(默认情况下,它会去寻找一个名为“hibernate_sequence”的sequence),我们可以用参数param来指定一个sequence。而property用来指定Student.java类中的属性和Student数据库表之间的对应关系,以及各个字段的数据类型。在这个例子中,我们指定的数据类型是Java语言中的数据类型(此时需要指定引用类型数据),我们也可以使用Hibernate中自定义的数据类型,限于篇幅,在本文中不一一讲解。

    然后,我们需要在hibernate.cfg.xml中加入这个文件的映射,可以在之前加入下面的语句:


最后,我们需要编写一个测试类来测试一下,能否通过Hibernate和前面我们定义的相关程序,完成对数据库的操作。我们编写一个测试类如下:
源文件:Test.java

java 代码
  1. import org.hibernate.*;   
  2. import org.hibernate.cfg.*;   
  3.   
  4. public class Test   
  5. {   
  6.     public static void main(String[] args)   
  7.     {   
  8.         try  
  9.         {   
  10.             //通过Configuration获得一个SessionFactory对象   
  11. SessionFactory sf    
  12. new Configuration().configure().buildSessionFactory();   
  13.             //打开一个Session   
  14.             Session session = sf.openSession();   
  15.             //开始一个事务   
  16.             Transaction tx = session.beginTransaction();   
  17.             //创建一个Student对象   
  18.             Student stu = new Student();   
  19.             //通过Student的setter方法改变它的属性   
  20.             //注意student_id不用我们设置   
  21.             stu.setStudent_name("zhangsan");   
  22.             stu.setStudent_age(18);   
  23.             //通过session的save()方法将Student对象保存到数据库中   
  24.             session.save(stu);   
  25.             //提交事务   
  26.             tx.commit();   
  27.             //关闭会话   
  28.             session.close();   
  29.         }   
  30.         catch(Exception e)   
  31.         {   
  32.             e.printStackTrace();   
  33.         }   
  34.     }       
  35. }   
  36.   

    编译并运行这个程序,如果前面的配置和程序都没有问题,应该可以正确的往数据库表Student中插入一条数据,并且在控制台上能够得到如下输出(只列出部分输出内容):

Hibernate: select student_sequence.nextval from dual
Hibernate: insert into Student (Student_Name, Student_Age, student_id) values (?,?,?)

    可以看到,虽然我们自己没有编写SQL语句进行插入数据的操作,但是其实Hibernate还是要使用SQL语句来进行数据库的操作,只是这个过程对程序员来说是透明的。

    通过这个简单的例子,相信读者对Hibernate编程已经有了初步的了解。读者可以在此基础上进行更深入的学习。

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法和原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除和抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路和显示电路等几部分组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值