`

Hibernate的入门知识

 
阅读更多
Hibernate的入门知识
一,hibernate概述
Hibernate 是由JBoss公司著名构架师Gavin King设计,开发的一个开源ORM框架,可以从不同的角度解析Hibernate。
1. 它是连接java应用程序和关系数据库的中间件
2. 它对JDBC  API进行了封装,负责Java对象的持久化
3. 在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务逻辑层专注于实现业务逻辑。
4. 它是一种ORM工具,能够建立面向对象的域模型和关系模型的映射。
二.搭建Hibernate应用开发环境
1)下载和安装配置
第一步:下载。登录到Hibernate官方网站http://www.hibernate.org/6.html,下载
第二步:解压获取必需类库文件。解压缩丛Hibernate网站下载的hibernate发布包,在根目录下有Hibernate3.jar文件,该文件就是Hibernate Core的核心类库文件,把它添加到Hibernate应程序中,在根目录lib/required目录下的所有jar文件都是Hibernate3核心类库文件编译和运行所必须的第三方类库文件,也添加到Hibernate应用程序中。如图所示所需的包





三.第一个Hibernate应用程序
我们所做的第一件事就是创建我们的开发目录,并把所需要的java库文件放进去。解压缩丛Hibernate网站下载的Hibernate发布包,并把/lib目录下所有需要的库文件拷到我们新建的开发目录下的/lib目录下。
1) 第一个class
我们的第一个持久化类是一个带有一些属性(property)的简单
1.JavaBean类:
public class User {
private int id;
private Name name;
private Date brithday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}

}


你可以看到这个类对属性的存取方法(getter and setter method)使用了标准JavaBean命名约定。同时把类属性的访问级别设为私有的(private),这是推荐的设计,但并不是必须的。Hibernate也可以直接访问这些属性,而使用访问方法的好处是提供了重构时的健壮,为了通过反射机制来实例化这个类的对象,我们需要提供一个无参的构造器。
   所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java反射机制来为你创建对象。构造器的访问级别可以是Private,然而当生成运行时代理时这则要求使用至少package级别的访问控制,这样在没有字节码的指令的情况下,从持久化类里获取数据会更有效率
2.映射文件:
Hibernate需要知道怎样去加载和存储持久化的对象。这正是hibernate映射文件发挥作用的地方,映射文件告诉Hibernate,应该访问数据库里面的哪一个表及应该使用表里面的那些字段。
一起看一下映射文件的基本结构:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
[....]
</hibernate-mapping>

在hibernate-mapping标签之间,含有一个class元素,所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要实体)都需要一个这样的映射,来把类对象映射到sql数据库里的表
User类对应的映射文件
<hibernate-mapping
package="com.hbsi.domain">--指定java实体类的包名

<class name="User" table="user">---说明实体类怎样映射成表
<id name="id" column="id">--column可省略
<generator class="native"/>--声明主键
</id>
<property name="name"/>
<property name="brithday"/>
</class>

id元素标识符属性的声明,name=”id”声明了java属性的名字(hibernate会使用getId()和SetId()来访为它),column属性则告诉Hibernate,我们使用User表的哪一个字段作为主键,嵌套的generator元素指定了标识符生成策略,在这里我们指定为native。它根据已配置的数据库自动选择最佳的标识符生成策略。
和id元素一样,property元素的name属性告诉hibernate使用哪个getter和setter方法,在此类之中会寻找getName(),getBrithday()
3.Hibernate配置
现在我们已经有了一个持久化类和它的映射文件,该是配置Hibernate的时候了。为了保存Hibernate的配置,我们可以使用一个简单的Hibernate.properties文件,或者一个稍微复杂的Hibernate.cfg.xml。

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///demo</property>

<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>


<mapping resource="com/hbsi/domain/User.hbm.xml"/>

</session-factory>
</hibernate-configuration>

    最开始的四个Property元素包含JDBC链接信息。方言(dialect)的property元素指明Hibernate生成的特定SQL变量。
把这个文件拷贝到源代码目录下面,这样他就位于classpath的根目录的最后。Hibernate在启动时会在classpath的根目录查找名为hibernate.cfg.xml的配置文件。
Hibernate.show-sql:指定是否把hibernate运行时的sql语句输出到控制台。
Hibernate.format_sql:指定是否把hibernate运行时的sql语进行格式化以便于阅读。
Hibernate.Hbm2ddl.auto:指定应用程序在运行时,当产生SessionFactory实例时对是否自动检查数据库结构,可选值有:vaildate(检查数据库结构),update(数据库结构发生变化是修改),create(将数据库的DDL导出到数据库)和crete-drop(SessionFactory实例创建时将数据库schema的DDL导入到数据库,在sessionFactory被显示关闭时将数据库自动删除)
启动和辅助类
是时候加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置。此过程包括创建一个全局sessionFactory,并把它储存在应用程序代码容易访问的地方。SessionFactory可以创建打开新的session,一个session代表一个单线程的单元操作,sessionFactory则是一个线程安全的全局对象,只需要被实例化一次。
我们将创建一个HibernateUtil辅助类来负责启动Hibernate和更方便的操作SessionFactory,让我们来看一下他的实现吧!
package com.hbsi.hibernate.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {
private static SessionFactory sessionFactory;

private HibernateUtil(){

}
static{

//第一步:读取配置文件并启动hibernate
Configuration cfg=new Configuration();
cfg.configure();
//第二步:获取会话工厂
sessionFactory=cfg.buildSessionFactory();}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();

}
}
把HibernateUtil.java 放在开发目录的源代码路径下,与方User的包并列。
4.加载并存储对象
我们终于可以使用Hibernate来加载和存储对象了,编写一个带有main()方法的TestHibernate类
public class TestHibernate {
public static void main(String[] args) {
User user=new User();
user.setName("Tom");
user.setBrithday(new Date());
addUser(user);
}
public static void addUser1(User user){
Session session=null;
Transaction tx=null;
try{
session=HibernateUtil.getSession();
tx=session.beginTransaction();
session.save(user);

tx.commit();

}finally{

if(session!=null)
session.close();
}
}

}


我们创建了个新的User对象并把它传递给Hibernate。现在Hibernate负责与SQL打交道并把INSERT命令传给数据库。在运行之前,让那个我们来看一下处理session和Transaction的代码。
首先,只要你持有SessionFactory(幸亏我们有HIbernateUtil,可以随时获取得到),大可在任何时候,任何地点调用这个方法
   其次,session在第一次被使用的时候,其生命周期就开始。然后它被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭它。





  • 大小: 90.1 KB
分享到:
评论

相关推荐

    java源码资源手机游戏J2ME毕业设计

    java源码资源手机游戏J2ME毕业设计提取方式是百度网盘分享地址

    第5章 存储器管理(笔记整理)

    内容概要:本章节深入探讨了存储器管理和相关概念。首先介绍了存储器的多层次结构,涵盖了寄存器、主存和辅助存储的区别及其功能。接下来讨论了主存储器、寄存器的功能和角色,包括二者如何支持程序运行及数据处理。之后分析了高速缓存和磁盘缓存的运作机制及其优化计算机性能的方式。接着概述了程序的装入、链接、地址绑定、内存保护的技术细节。此外,文章还讲述了存储器管理的高级技巧如对换技术、覆盖技术和不同的分配方式,以及各种存储管理模式的具体实施方式,比如连续分配、分页、分段及段页组合。 适用人群:对操作系统内部工作原理有一定兴趣的计算机专业学生、技术人员及爱好者。 使用场景及目标:适用于课程学习和项目实践中,帮助理解和设计复杂的存储管理系统。通过本文的学习可以达到对操作系统底层存储管理的理解,掌握不同存储分配策略的选择标准和技术应用。 阅读建议:建议逐步阅读每个小节,重点关注各部分内容的实际应用场景及其背后的设计理念。同时,尝试绘制存储层次模型和不同管理策略的工作流程图,加深理解。

    gradle611all.zip.png

    gradle611all.zip.png

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    C#ASP.NET大型商城系统源码带数据库文档数据库 SQL2008源码类型 WebForm

    ASP.NET大型商城系统源码带数据库文档 1.开发环境:vs2010 + slq2005/2008 2.首先在SQL2005建立一个空白数据库。 3.有VS2010 打开项目,直接调试,根据出现提示建立数据库。 4.第3点出现的页面的管理员用户和密码就是后期软件的登陆帐户和密码。 5.本系统有两套模版,在店铺管理 - 页面设置 这里做修改 6.如果觉得自己的系统是空数据库,想弄成和演示的一样,那就将doc/database下面的数据库直接还原就可以了。 7.还原后的数据库登陆帐户和密码分别是:admin888 admin888

    C#ASP.NET酒店管理系统源码(WPF)数据库 Access源码类型 WinForm

    ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现

    资源quazip.dll

    资源quazip.dll

    C#汽车货运管理系统源码 货运公司车辆管理系统源码数据库 SQL2008源码类型 WinForm

    汽车货运管理系统源码 货运公司车辆管理系统源码 货运公司管理系统采用winform C# 技术开发,数据库Sqlserver2008R2,同时兼容Mysql。 更新日志: 1.修改新增数据异常。 2.增加安装部署工程。 包括如下功能模块: 一、输入功能: 该系统提供了对基本信息录入、车辆登记录入、车辆各项费用录入、驾驶员登记录入、车辆出回车录入、主卡分卡充值录入、加油登记录入,配件信息录入等的模式录入和表格界面录入。在出现从表信息录入时会出现表格界面的录入方式其录入方式同模式录入方式一样。录入信息时可能会出现相同的信息,为避免重复录入部分字段设置了辅助录入功能,您只需输入几项即可完成录入功能。操作方便快捷,可大大提高您的工作效率。 二、查询功能: 您只需用鼠标点击一下相应节点,就可迅速查询统计销售的情况,根据不同的查询统计条件显示出需要的结果。 三、报表功能: 根据查询或者统计出来的结果生成报表。 四:打印功能: 系统支持打印功能,如想打印信息单击预览报表上的打印按钮即可。 五、安全功能: 进入系统后,单击菜单“系统→工具→用户及权限”可以设置系统的各用

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)提取方式是百度网盘分享地址

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    【node毕业设计】nodejs学院会议纪要管理系统源码(完整前后端+mysql+说明文档).zip

    环境说明: 开发语言:nodejs 框架:Express 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:VS code/HBuilder X

    【小程序毕业设计】自助购药小程序源码(完整前后端+mysql+说明文档+LW).zip

    功能说明: 系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。 环境说明: 开发语言:Java 服务器:tomcat7及以上 JDK版本:JDK1.8 数据库:mysql 5.7数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者

    基于Servlet和JSP实现的登录Demo

    《基于Servlet和JSP实现的登录Demo》项目是一个简单的 Java Web 应用示例,展示了如何使用 Servlet 和 JSP 搭建基础的用户登录功能。项目通过 Java Servlet 处理用户请求,使用 JSP 构建前端页面,并结合 MySQL 数据库验证用户身份。用户可以通过登录页面提交账号和密码,后端接口会对用户输入进行校验,并返回登录结果。本项目适合 Java Web 初学者,旨在帮助学习 Servlet 和 JSP 的基础用法,掌握表单提交、请求转发、数据库连接等关键技术点。项目环境包括 IntelliJ IDEA、Apache Tomcat 和 MySQL,支持 JDK 8 及以上版本。

    (全新整理)中国高校各专业录取分数线、招生计划、分段表数据(2008-2023年)

    1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/143733939 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

Global site tag (gtag.js) - Google Analytics