• idea中创建web项目搭建Hibernate框架连接oracle数据库


    hibernate框架

      hibernate是数据化持久工具,也是一个开源代码的ORM解决方案.hibernate内部封装了通过jdbc访问数据库的操作,向商场应用提供面向对象的数据访问api.

    hibernate基于ORM在对象模型和关系型数据库的表之间建立了一座桥梁,通过hibernate,程序员就不需要再使用SQL语句操作数据库中的表,使用api直接操作

    Javabean对象就可以实现数据的增,删,改,查操作,显著降低了由对象与关系型数据库在数据表现方面的范例不匹配导致的开发成本.

    hibernate框架的优点

    1. 提高了持久化代码的开发速度,降低维护成本
    2. 支持许多面向对象的特性,如组合,继承,多态等,使得开发人员不必再面向业务的对象模型和面向数据库模型之间来回切换,方便开发人员进行领域驱动的面向对象的设计与开发
    3. 可移植性好.系统不会绑定在某个特定的关系型数据库上对于系统更换数据库,通常只需要修改hibernate配置文件即可正常运行
    4. hibernate框架开源免费,可以在需要时研究源代码,改写源代码,进行功能的定制,具有可扩展性

    hibernate框架的缺点

    1. 不适合以数据为中心,大量使用存储过程的应用
    2. 大规模的批量插入,修改和删除不适合用hibernate

    hibernate的环境搭建

    第一步创建项目并导入jar

    链接:https://pan.baidu.com/s/1yLbnLaRRqI2paYGwlZiZQA
    提取码:fomx

    创建web项目

    进入之后选中web application

    下一步之后  选好路径命好名称

    最后finish即可

    导入jar

    在WEB-INF创建一个lib目录

     点击第一选项后 找到lib 点击ok即可

    项目结构如下

    最后ok 即可

    第二步编写hibernate配置文件

    在resource下创建 hibernate.cfg.xml

    进入此界面,选中项目点击 + 

    点击之后会出现一个框框选中hibernate,这个时候再点击右边的 + 添加

    ok之后 resource下面就出现了我们所需的xml文件

    之后再把这个框起来的路径改成  不然可能会加载不到此配置文件

    http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd

    代码如下

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
      <session-factory>
        <!-- 数据库URL -->
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <!-- 用户-->
        <property name="connection.username">scott</property>
        <!-- 密码 -->
        <property name="connection.password">orcl</property>
        <!-- jdbc驱动 -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <!-- 每个数据库都有其对应的方言(Dialect)以匹配其平台特效 -->
        <property name="hibernate.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="entity/EmpDao.xml"/>
      </session-factory>
    </hibernate-configuration>

    实体类:

    package entity;
    
    import java.sql.Date;
    
    public class Emp {
        //编号
        private Integer empno;
        //名称
        private String ename;
        //部门
        private String job;
        //上级编号
        private double MGR;
        //入职时间
        private Date hiretDate;
        //工资
        private double sal;
        //年终奖
        private double comm;
        //岗位id
        private Integer deptNo;
    
        public void setEmpno(Integer empno) {
            this.empno = empno;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
    
        public void setJob(String job) {
            this.job = job;
        }
    
        public void setMGR(Object MGR) {
            if (MGR!=null)
                this.MGR = (double)MGR;
        }
    
        public void setHiretDate(Date hiretDate) {
            this.hiretDate = hiretDate;
        }
    
        public void setSal(double sal) {
            this.sal = sal;
        }
    
        public void setComm(Object comm) {
            if(comm!=null){
                this.comm =(double)comm;
            }
        }
    
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
    
        public Integer getEmpno() {
            return empno;
        }
    
        public String getEname() {
            return ename;
        }
    
        public String getJob() {
            return job;
        }
    
        public double getMGR() {
            return MGR;
        }
    
        public Date getHiretDate() {
            return hiretDate;
        }
    
        public double getSal() {
            return sal;
        }
    
        public double getComm() {
            return comm;
        }
    
        public Integer getDeptNo() {
            return deptNo;
        }
    
    }

     接下来编写实体类映射文件

     右键 找到mapper  新建名为 Emp.hbm 的映射xml文件 

    会自动生成头文件和一些属性

    自动生成参考这里: https://www.cnblogs.com/hfx123/p/9978289.html

    如果不需要自动生要手打的则如下 新建名称为 Emp.hbm

    编写好的映射文件如下

    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <!-- name实体类路径 table数据库表名 schema表的拥有者-->
        <class name="entity.Emp" table="emp" schema="scott">
            <!-- 此id属性表示 持久化的OID和表的主键映射
                name为实体类中的属性名称 type为数据类型 column为数据库中的列名 -->
            <id name="empno" type="java.lang.Integer" column="empno">
                <!-- 此属性用于指定具体注解生成策略 assigned策略,就是不使用主键生成策略,由手工输入ID. -->
                <generator class="assigned"/>
            </id>
            <!-- name为实体类中的属性名称 type为数据类型 column为数据库中的列名 not-null表示不为空与数据库列对应 -->
            <property name="ename" type="string"  not-null="true" column="ename"/>
            <property name="deptNo" type="java.lang.Integer" column="deptNo"/>
            <property name="job" type="string"column="job"/>
            <property name="MGR" type="java.lang.Double" column="MGR"/>
            <property name="hiretDate" type="java.sql.Date" column="hireDate"/>
            <property name="sal" type="java.lang.Double" column="sal"/>
            <property name="comm" type="java.lang.Double" column="comm"/>
        </class>
    </hibernate-mapping>

    主键策略

    • increment

        increment策略是指,不使用数据库本地的自增长策略,而是由程序(Hibernate框架)产生一个自增长的ID值,赋予数据库.每次插入前都会去查询表中id最大的值,然后+1作为新主键

    • hilo(了解)

        高低位算法,主键自增,由hibernate来维护,开发时不使用.因为没有数据库同时不支持主键自增长或者则序列号

    • idenitty

      identity策略,指定使用数据库里面的ID自增长策略. 只能用于支持ID自增长功能的数据库,如:MySQL,SQLServer.. 不支持没有ID自增长策略的数据库,如Oracle,DB2..

    • sequence

      使用序列的实现ID生成策略,主要用于有序列的数据库.如:Oracle,DB2,如果不支持序列的数据库(如:MYSQL),该策略会使用一个表模拟序列。

    • native

      使用数据库本地的策略,就是数据库里面使用怎么样的策略就用什么策略,HIbernate不做任何的判断.如:MySQL数据库使用了increment_auto,自增长策略.使用native.表示直接调用数据库里面的increment_auto策略.

    • uuid

        就是数据库的主键是使用一个唯一的==字符串==的来存储.这个唯一的字符串就是UUID主键必须为String类型

    • assigned

        assigned策略,就是不使用主键生成策略,由手工输入ID.

    原文:https://blog.csdn.net/kato_op/article/details/80296619

    第三步编写dao及service层

    dao层

    package dao;
    
    import entity.Emp;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    
    import java.io.Serializable;
    
    public class EmpDao {
        public Emp get(Serializable id){
            //初始化配置和sessionFactory
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory =configuration.buildSessionFactory();
            //打开事务
            sessionFactory.getCurrentSession().beginTransaction();
            //通过session的get方法根据加载指定对象
            return (Emp)sessionFactory.getCurrentSession().get(Emp.class,id);
        }
    }

    service层

    package service;
    
    import dao.EmpDao;
    import entity.Emp;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    import java.io.Serializable;
    
    public class EmpSerivce {
        EmpDao empDao =new EmpDao();
        public Emp get(Integer id){
            return empDao.get(id);
        }
    }

    测试类

    package test;
    
    import service.EmpSerivce;
    
    public class Test {
        public static void main(String[] args){
            EmpSerivce empSerivce = new EmpSerivce();
            System.out.println(empSerivce.get(7788).getEname());
        }
    }

    结果:

    此项目的下载链接 

    链接:https://pan.baidu.com/s/1jJlXNbfvk79nzseNiiHQmg
    提取码:8sh3   lib目录里没有jar需要自己添加

    如果有什么疑问可以在下面评论,看到了会第一时间回复.希望对大家有所帮助

  • 相关阅读:
    有注释的LED驱动
    给想成为程序员的大学生的建议
    三星s3c6410用户手册初步阅读
    linux下重新安装grub
    对寄存器的操作
    linux 头文件
    VC的环境设置
    VC++工程文件说明
    C/C++文件操作转载自http://www.cnblogs.com/kzloser/archive/2012/07/16/2593133.html#b1_2
    GetWindowDC-BeginPaint-GetDC 区别详解
  • 原文地址:https://www.cnblogs.com/hfx123/p/9965371.html
Copyright © 2020-2023  润新知