Hibernate(基于Oracle)

本文详细介绍了如何使用Hibernate连接Oracle数据库,包括配置JAR文件、创建实体类和映射文件,以及执行增删改查操作。此外,还深入探讨了Hibernate的HQL查询,涵盖单表查询、多表联合查询、子查询和集合操作等,为读者提供了一个全面的Hibernate与Oracle结合的实践指南。

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

Hibernate 连接Oracle

  1. 创建 WEB 项目 hdemo

  2. 将以下 JAR 文件拷贝到 hdemo/WebRoot/WEB-INF/lib 目录下
    1.1 antlr-2.7.6.jar
    1.2 commons-collections-3.1.jar
    1.3 dom4j-1.6.1.jar
    1.4 hibernate-jpa-2.0-api-1.0.1.Final.jar
    1.5 hibernate3.jar
    1.6 javassist-3.12.0.GA.jar
    1.7 jta-1.1.jar
    1.8 log4j-1.2.17.jar
    1.9 ojdbc6.jar
    1.10 slf4j-api-1.6.1.jar
    1.11 slf4j-log4j12-1.6.1.jar

  3. 创建源码目录 hdemo/resources ,并将 log4j.properties 文件导入其中

  4. 创建 Hibernate 配置文件:hdemo/resources/hibernate.cfg.xml ,并键入如下代码:

        <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!--数据库URL -->
            <property name="connection.url">jdbc:oracle:thin:@192.168.199.156:1521:orcl</property>
            <!--数据库用户 -->
            <property name="connection.username">system</property>
            <!--数据库用户密码 -->
            <property name="connection.password">ok</property>
            <!--数据库JDBC驱动 -->
            <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <!--每个数据库都有其对应的Dialect以匹配其平台特性 -->
            <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
            <!--指定当前session范围和上下文 -->
            <property name="current_session_context_class">thread</property>
            <!--是否将运行期生成的SQL输出到日志以供调试 -->
            <property name="show_sql">true</property>
            <!--是否格式化SQL -->
            <property name="format_sql">true</property>
            <mapping resource="cn/hibernatedemo/entity/Employee.hbm.xml" />
        </session-factory>
    </hibernate-configuration>
    

    假设oracle服务器地址为:192.168.199.156,监听端口为:1521,连接的数据库为:orcl

  5. src 中创建 entity 包,并创建实体类 Employee类:

    package entity;
    
    import java.io.Serializable;
    import java.util.Date;
    public class Employee implements Serializable  {
         
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private Date hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
        public Integer getEmpno() {
         
            return empno;
        }
        public void setEmpno(Integer empno) {
         
            this.empno = empno;
        }
        public String getEname() {
         
            return ename;
        }
        public void setEname(String ename) {
         
            this.ename = ename;
        }
        public String getJob() {
         
            return job;
        }
        public void setJob(String job) {
         
            this.job = job;
        }
        public Integer getMgr() {
         
            return mgr;
        }
        public void setMgr(Integer mgr) {
         
            this.mgr = mgr;
        }
        public Date getHiredate() {
         
            return hiredate;
        }
        public void setHiredate(Date hiredate) {
         
            this.hiredate = hiredate;
        }
        public Double getSal() {
         
            return sal;
        }
        public void setSal(Double sal) {
         
            this.sal = sal;
        }
        public Double getComm() {
         
            return comm;
        }
        public void setComm(Double comm) {
         
            this.comm = comm;
        }
        public Integer getDeptno() {
         
            return deptno;
        }
        public void setDeptno(Integer deptno) {
         
            this.deptno = deptno;
        }
    }
    
  6. 在包 entity 中创建映射文件 Employee.hbm.xml:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="entity.Employee" table="EMPLOYEE" dynamic-update="true">
            <id name="empno" column="empno" type="java.lang.Integer">
                <generator class="assigned"/>
            </id>
            <property name="ename" type="java.lang.String" column="ename"/>
            <property name="job" type="java.lang.String" column="job"/>
            <property name="mgr" type="java.lang.Integer" column="mgr"/>
            <property name="hiredate" type="java.util.Date" column="hiredate"/>
            <property name="sal" type="java.lang.Double" column="sal"/>
            <property name="comm" type="java.lang.Double" column="comm"/>
            <property name="deptno" type="java.lang.Integer" column="deptno"/>
        </class>
    </hibernate-mapping>
    
  7. src 中创建包 dao

  8. dao 包中创建类 HibernateUtil

    package dao;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
         
        // 连接对象
        private static Configuration configuration;
        // 会话工厂
        private final static SessionFactory sessionFactory;
        
        static {
         
            try {
         
                // 读取配置文件
                configuration = new Configuration().configure();
                // 创建会话工厂
                sessionFactory = configuration.buildSessionFactory();
            } catch (HibernateException ex) {
         
                throw new ExceptionInInitializerError(ex);
            }
        }
    
        private HibernateUtil() {
         }
    
        /**
        * 创建会话
        * @return
        */
        public static Session currentSession() {
         
            return sessionFactory.getCurrentSession();
        }
    }
    
  9. dao 包中创建类 EmployeeDao

    package dao;
    
    import entity.Employee;
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值