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. css box-shadow知识点及多重边框

    box-shadow() 参数: h-shadow:水平阴影的位置.允许负值. v-shadow:垂直阴影的位置.允许负值. blur:模糊距离. spread:扩张半径(可正可负.投影面积则可大可小 ...

  2. 原生js实现星星闪烁的效果

    星星闪烁的原理其实很简单: html代码: <body style="background:#000"> <div id="stars_box" ...

  3. web.xml中不同版本的servlet头以及版本控制

    参考文章: http://www.cnblogs.com/beijingstruggle/p/5461146.html http://blog.csdn.net/z69183787/article/d ...

  4. mysql修改管理员密码

    mysql修改管理员密码杀掉mysql进程kill `cat /data/mysqldata/3306/mysql.pid`禁止连接禁止验证方式启动mysqlmysqld_safe --default ...

  5. Template Pattern & Strategy Pattern

    详细见<C++设计模式 23种设计模式.pdf 55页> 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算 ...

  6. 数据结构与算法分析java——树1

    1. 基本术语 度(degree):一个节点的子树个数称为该节点的度: 树中结点度的最大值称为该树的度. 层数(level):从根结点开始算,根节点为1 高度(height)/深度(depth):节点 ...

  7. 谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?

    背景 有时我们能在Chrome开发者工具的Network tab里观察到SAP UI5应用会发出某些状态为"取消"的OData请求.如下图第五个请求. 之前有一种似是而非的说法:极 ...

  8. table自适应

    当table大于屏幕时,table可以左右滑动 //给table的父元素设置样式 .edit_table{ width:100%; overflow: auto; }

  9. js通过codeURL画二维码

    一.函数封装 //生成微信二维码 function xyqrcode(options) { var settings = { dom:'', render: 'canvas', //生成二维码的格式还 ...

  10. SignalR集成Autofac

    SignalR SignalR集成需要 Autofac.SignalR NuGet 包. SignalR 集成提供SignalR 集线器的依赖集成.由于 SignalR 是内部构件,所以不支持Sign ...