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需要自己添加

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

idea中创建web项目搭建Hibernate框架连接oracle数据库的更多相关文章

  1. 使用hibernate框架连接oracle数据库进行简单的增删改

    初始化配置和session 关于配置文件这里就不在赘述了,假设配置文件配好后我们需要加载配置和sessionFactory,并获取session,因为每次进行增删改查时都需要session,所以封装成 ...

  2. 在IntelliJ IDEA中创建Web项目

    在IntelliJ IDEA中创建Web项目 在IntelliJ IDEA中创建Web项目1,创建Maven WebProject选择File>New>Project 出现New Proj ...

  3. 3.在eclipse中创建Web项目,并部署到Tomcat上

    1.找到创建web项目的菜单 2.创建web项目并选择web环境 3.查看创建好的web项目结构 4.在web项目的webContent文件夹下创建jsp页面 5.查看是否创建jsp页面成功,并编辑j ...

  4. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  5. Eclipse使用Maven创建Web项目+整合SSM框架

    一.准备环境: maven:apache-maven-3.2.3 jdk:jdk1.8.0_25 tomcat:tomcat-9.0 二.配置Maven.jdk 1.Window——>Prefe ...

  6. 在eclipse中创建web项目

    如何创建dynamic web project项目 本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用 ...

  7. 使用Maven在Eclipse中创建Web项目[转]

    一.新建 Maven Web项目 1.新建Maven Project new project-->选择 Maven Project --> 下一步 选择工作空间 -->下一步 在Fi ...

  8. 如何在Eclipse中创建web项目并使用tomcat8 运行servlet开发简单的动态网页?

    今天花了一天时间.因为用eclipse没多久,不是很熟悉使用,看的教程又是使用myeclipse的,但是eclipse相对没有myeclipse灵活,所以在网上找了很多资料,最后算是可以实现了.新手可 ...

  9. 在eclipse中创建web项目(非myeclipse)

    如何创建dynamic web project项目 本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用 ...

随机推荐

  1. 【代码笔记】Java——远程监控、反射、代理、内省机制

    远程控制的基本原理 远程控制(RemoteControl)拥有控制端和被控端双方. 控制方通过请求,取得对远端的操作,实现远端的事件回放功能,同时,应该看得到远端桌面的画面.而被控方必须在建立Serv ...

  2. arcgis 10.2 安装教程(含下载地址)

    http://jingyan.baidu.com/article/fc07f98911b66912ffe5199b.html 2013年7月,Esri即将推出全新的版本——ArcGIS 10.2,那些 ...

  3. 3D开源推荐:3DWebExplorer

    开源网址:https://github.com/irconde/3DWebExplorer 介绍:演示如何内嵌Google Earth 插件,开发面向公众的3D旅游展示平台

  4. sqlServer拼结列字符串

    with table1(sessionID,message,createTime)as(select 1 ,'hello' ,'2014/5/6' union allselect 1 ,'word' ...

  5. SqlServer数据库全角和半角互转的方法

    ---摘要: SqlServer数据库全角和半角互转的方法 CREATE FUNCTION f_Convert( @str NVARCHAR(4000), --要转换的字符串 @flag bit -- ...

  6. Polly一种.NET弹性和瞬态故障处理库(重试策略、断路器、超时、隔板隔离、缓存、回退、策略包装)

    下载地址:https://github.com/App-vNext/Polly 该库实现了七种恢复策略. 重试策略(Retry) 重试策略针对的前置条件是短暂的故障延迟且在短暂的延迟之后能够自我纠正. ...

  7. 虚拟机配置静态 IP 以后无法连接的解决办法

    问题描述 将虚拟机内部 IP 地址从动态获取改成静态 IP 以后,远程连接失败. 问题分析 Azure 虚拟机的内部 IP 默认为动态分配, 由 DHCP 服务自动分配, 在虚拟机的生命周期内, 该 ...

  8. #学习笔记#e2e学习使用(一)

    本文仅限于记录本人学习的过程,以及怎么踩的坑,是如何解决的.逻辑肯定是混乱的,有用之处会抽出共通另行发帖. 最终目标:要运用于Vue项目中,进行功能测试甚至自动化测试. 一.e2e概念 理解:end ...

  9. apache-实战(二)

    Apache 虚拟主机 --用apache或nginx就可以做 一台服务器跑多台web服务 VPS virtual private server 虚拟专用服务器 --使用虚拟化技术来做 云服务器 虚拟 ...

  10. 《3D打印:从想象到现实》:基本没发现独到之处

    本书汇总了3D打印的相关咨询:原理.可能的或已经实现的应用.商业模式等等.由于3D打印是最近媒体上比较热的信息,对我来说书中的大部分内容都没有独到之处,都是已知的.