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. drupal对数据库操作

    // nodenode_load($nid = NULL, $vid = NULL, $reset = FALSE);node_load_multiple($nids = array(), $cond ...

  2. ArcGIS for Server安全与LDAP配置

    ArcGIS for Server安全与LDAP配置 1.安全性概述 ArcGIS Server使用基于角色的访问控制来管理对受保护资源的访问.访问GIS资源的权限只能分配给角色.单独的用户只能通过从 ...

  3. 嵌入式开发 MCU

    From: http://www.infoq.com/cn/articles/intelligent-embedded-os-Internet-of-things-and-robots 嵌入式开发是一 ...

  4. 关于 C# 中接口的一些小结

    < 关于 C# 中“接口”的一些小结 > 对于 C# 这样的不支持多重继承的语言,很好的体现的层次性,但是有些时候多重继承的确有一些用武之地.   比如,在 Stream 类 . 图形设备 ...

  5. Linux漏洞分析入门笔记-Off-By-One(栈)

    ubuntu-16.04.5(X86) IDA7.0 0x00.漏洞描述 1.什么是off by one?又称1字节溢出. 源字符串长度等于目标缓冲区长度时,将源字符串复制到目标缓冲区可能会导致off ...

  6. Class.forName(),classloader.loadclass用法详解

    为什么要把ClassLoader.loadClass(String name)和Class.forName(String name)进行比较呢,因为他们都能在运行时对任意一个类,都能够知道该类的所有属 ...

  7. sqlserver内存管理之lazy writer

    任何在缓冲区被修改的页都会被标记为“脏”页.将这个脏页写入到数据磁盘就是CheckPoint或者Lazy Writer的工作.前面就大体说了一下checkpoint,这会就简单的理解一下这个lazy ...

  8. mysql_01_游标的使用

    一.表的创建 1.直接创建表 DROP TABLE IF EXISTS shops_info; /*EMP产品版本版本信息表*/ CREATE TABLE shops_info ( ID INT PR ...

  9. vs2015编译纯ASM文件

    x86: 1. 创建一个 C++ 的空项目. 2.解决方案管理器 - 目标项目名 - 右键 - 生成依赖项 - 生成自定义 (VS2015, 如果使用VS2010 你右键就直接能看到生成自定义) 3. ...

  10. Smart template的控件能否当成普通控件来用

    我的同事问过我这个问题: 只要弄清楚Smart control的原理,就能回答这个问题. 答案是: smart control可以像普通的控件一样在xml view中被定义和使用,但是必须结合ODat ...