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位运算之简单了解

    1.十进制转化为二进制 将正整数转化为二进制的方法“除2取余,逆序排列”. 2.二进制转化为十进制 表示整数的二进制,第一位为标志位,0代表为正整数,位数从右开始,第一个位数为0,各位位数记作n,取各 ...

  2. jsp九大内置对象==欣欣

    内置对象特点: 1.            由JSP规范提供,不用编写者实例化. 2.            通过Web容器实现和管理 3.            所有JSP页面均可使用 4.     ...

  3. JSP数据库综合练习

    一.问题概述         实现了数据库的增删改查和分页显示.         分页显示:mysql String cmd = "select * from t_user limit &q ...

  4. 通过bat设置系统环境变量

    在软件运行过程中,可能需要配置计算机的环境变量,在这里分为两种情况: 一:增加或修改环境变量只在当前软件环境中使用 如我们设置Java的环境变量: set CLASSPATH=%CLASSPATH%; ...

  5. FPGA----只读存储器(ROM)

            ROM是一种重要的时序逻辑存储电路,它的逻辑功能是在地址信号的选择下,从指定存储单元中读取相应的数据.R0M只能进行数据的读取,而不能修改或写人新的数据,本节将以16×8的ROM为例, ...

  6. ZHS16GBK编码中汉字缺失

    生产中使用ZHS16GBK编码的Oracle数据库,若出现字,则会出现乱码 原因是此字不存在在ZHS16GBK编码中 解决方法可以:此二字结构相同,但是后面的在ZHS16GBK编码中出现

  7. Oracle分区表分批迁移

    遇到个分区表数据量超大的case,磁盘空间不够,所以考虑使用数据泵分批导数据,测试如下: source : oracle windows 32bit 10.2.0.1target  :  oracle ...

  8. ZT 自定义operator new与operator delete的使用(1)

    http://blog.csdn.net/waken_ma/article/details/4004972 先转两篇文章: 拨开自定义operator new与operator delete的迷雾 C ...

  9. 使用describe命令进行Kubernetes pod错误排查

    我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段. 使用kubectl describe命令检查: 从错误消息 ...

  10. ABAP的语法高亮是如何在浏览器里显示的

    这篇文章的原文我发表在SAP官方社区上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-web ...