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. 10th week task -1

    1:For each ... inFor...in ExamplesFor...of 对以上的内容进行 Examples和Explanation (1)For...in 以任意顺序遍历一个对象的可枚举 ...

  2. Win10系统安装iis的方法【图文教程】

    1.在win10系统中的开始按钮点击右键,选择控制面板: 2.从控制面板选择“程序”: 然后选择“启用或关闭windows功能” 3.从列表中选择Internet Infomation Service ...

  3. Enumeration 接口的使用

          Enumeration是一个接口,定义了两个规则,可以获取连续的数据,对数据结构非常重要.       接口源码: publicinterfaceEnumeration<E>{ ...

  4. Flask入门文件上传flask-uploads(八)

    1 视图传递多个参数 (1) 普通传参 : 关键字参数传递 return render_template('模板名称.html',arg1=val1,arg2=val2...) (2) 字典传参 : ...

  5. 腾讯云微信小程序域名变更指南

    1 . 将域名添加到云解析里面, 将解析的地址指向已有的小程序负载均衡地址: https://console.qcloud.com/cns 将域名添加到解析列表 添加成功之后,点击解析按钮,添加二级域 ...

  6. June 10th 2017 Week 23rd Saturday

    A lot of things, we can be touched, but we can not shed tears. 很多事情,我们可以感动,却不能流泪. Sometimes I was to ...

  7. CSS基础语法(一) CSS的3种引入

    CSS样式表 CSS可算是网页设计的一个突破,它解决了网页界面排版的难题.可以这么说,HTML的Tag主要是定义网页的内容(Content),而CSS决定这些网页内容如何显示(Layout). Web ...

  8. WCF思考随笔一: WCF是干什么的?

    对于WCF,之前知道是微软新一代开发框架的重要组成部分,是从之前Socket,COM,COM+,.NET Remoting,WebService等等系统内或系统间通讯解决方案发展而来,同时对各种解决方 ...

  9. Objective-C(装箱和拆箱)

    概述 从前面的博文我们也可以看到,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消息的也就是说有些NSObject的方法是无法调用的,这个时候 ...

  10. 2018.11.18 Sturts2配置详解&常量配置进阶

    1.基于struts.xml 的节点参数配置 package节点 action节点 result节点 include节点 2.struts常量配置以及如何修改为自己的想要的配置 2.1struts默认 ...