`
neeleon
  • 浏览: 188008 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate入门(一)第一个应用实例

阅读更多

一 、第一个应用实例

1 .搭建环境:新建一个名为HibernateDemojava 工程,并导入Hibernatejar 包,特别要注意除了导入lib 下的jar 包还需导入hibernate3.jar 核心jar 包。 由于涉及数据库操作,还应导入mysql 驱动包。

说明,如果使用最新的hibernate hibernate 开发的基本jar(7) 来源 hibernate-distribution-3.3.2.GA.zip  

hibernate3.jar

lib\required 下的所有jar

2 .简述Hibernate 的作用:ORMObject Relational Mapping ,对象关系映射。将java 程序中的对象自动持久化到关系数据库中。而Hibernate 的作用好比就是在java 对象与关系数据库之间的一座桥梁,它主要负责两者之间的映射。在Hibernate 内部封装了JDBC 技术(但只是一个轻量级的封装,因而可以让程序设计人员更方便的以面向对象的思想操纵数据库),并向外提供API 接口。

3 .建新一个名为User.java 的类,即是上面所说的java 对象。我们以后称这种类为实体类(或是持久化类) ,它的对象为实体对象(或是持久化对象)User.java 内容如下:

package com.asm.hibernate.domain;

import java.util.Date;

public class User {

    private int id ;

    private String name ;

    private Date date ;

 

    public int getId() {

       return id ;

    }

    public void setId( int id) {

       this . id = id;

    }

    public String getName() {

       return name ;

    }

    public void setName(String name) {

       this . name = name;

    }

    public Date getDate() {

       return date ;

    }

    public void setDate(Date date) {

       this . date = date;

    }

}

4 .编写配置文件:User.hbm.xml 。它和User.java 放在同一个包下。内容如下:

<? xml version = "1.0" ?>

<! DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

< hibernate-mapping

    package = "com.asm.hibernate.domain" >

 

    < class name = "User" >

       < id name = "id" >

           < generator class = "native" />

       </ id >

       < property name = "name" ></ property >

       < property name = "date" ></ property >  

    </ class >

</ hibernate-mapping >
此配置文件,是用来为User.java 进行配置的,我们以后称这种文件为实体配置文件 (或是持久化类映射文件)   < class> 用来关联一个java 类,注意在前面的根元素下有一个package 属性,这样结合这个packageclass 标签下所指定的类名,就共同关联映射了一个java 类。 其实可以这样理解,每一个包下都有实体配置 文件,而这个配置文件开始的根元素package 指定了此文件所处的位置(或是说它所关联的包),根元素下可以有多个<class> 标签(查阅dtd 文件),它们可以分别来关联包下的java 类文件。

<class> 标签 ,一般建议至少有两个属性:name 属性用来关联一个java 类,比如这里关联了User 类;table 属性用来指定这个类所对应的表文件,如果不指定,系统会自动name 指定的类文件进行关联(比如上面实际是: < class name = "User" table = "user" >  

<class> 标签下的子标签

<!-- [if !supportLists]-->l        <!-- [endif]--><id> 子标签实际就是用来映射主键,<id> 下的name 就是用来指java 类中的id 属性,而它可以有一个 column 属性用来指定表中的主键。同时注意在此标签下有一个 < generator class = "native" /> 标签,它是用来指定主键的生成方式。

<!-- [if !supportLists]-->l        <!-- [endif]--><property> 子标签,就是用来指定java 类的属性映射到表中的一个字段,默认下此标签没有指定column 属性,即是说它会把name 所关联的属性名作为字段名。 如果不想java 类中的某些属性映射到表中,只要不用这个标签来关联这些属性即可。

<!-- [if !supportLists]-->l        <!-- [endif]-->总结:上面的<class><id><property>name 属性都分别指定了java 类,java 类的属性。而tablecolumn 是用来指定表,字段名

配置文件 hibernate.cfg.xml 。它放在当前的项目的根目录下。内容如下:

<! DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >

 

< hibernate-configuration >

    < session-factory name = "foo" >

       < property name = "hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >

       < property name = "hibernate.connection.url" > jdbc:mysql://localhost:3306/test </ property >

       < property name = "hibernate.connection.username" > root </ property >

       < property name = "hibernate.connection.password" > 123456 </ property >

      

       < property name = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ property >

       < property name = "hibernate.hbm2ddl.auto" > create </ property >

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

    </ session-factory >

</ hibernate-configuration >
主配置文件 ,完成了驱动注册,数据库连接,并关联了相应的java 对象配置文件

说明:< mapping > 具体指定了关联的所有实体配置文件,关于它的作用可以注释掉此属性看效果。另通过< property name = "hibernate.hbm2ddl.auto" > create </ property > 指定了根据实体配置文件来自动生成表,其中包括:create/create-drop/update/validate 四种可选方式。

5 .编写测试类: UserTest.java 内容如下:

package com.asm.hibernate.test;

 

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import com.asm.hibernate.domain.User;

 

public class UserTest {

    public static void main(String []args){

       Configuration cf= new Configuration();

       cf.configure();     

       SessionFactory sf=cf.buildSessionFactory();

      

       Session s=sf.openSession();

       Transaction ts=s.beginTransaction(); // 事务

      

       User user= new User();

       user.setName( "jack" );

       user.setDate( new Date());

       s.save(user);

       ts.commit(); // 提交事务

       s.close();

       System. out .println( "done" );

    }

}

6 .分析流程:首先抛开 Transaction tx=s.beginTransaction() tx.commit() ,因为它们是提交事务得。支持提交事务意味着支持数据回滚。说明,通常情况下,很多数据库都默认支持提交事务,所以加这两句代码非常必要。 下面具体谈流程:

第一步 :获取SessionFactory 对象,它会首先构建一个 Configuration 对象,此对象调用可以调用configure ()configure (String resource) 这两种方法:这两种方法在Configuration 中的源代码如下:

public Configuration configure () throws HibernateException {

       configure( "/hibernate.cfg.xml" );

       return this ;

    }

public Configuration configure (String resource) throws HibernateException {

       log .info( "configuring from resource: " + resource );

       InputStream stream = getConfigurationInputStream( resource );

       return doConfigure( stream, resource );

    }
分析这两个源代码可以知道:无参调用最终也是调用这个有参数的方法,所以我们也可以直接传参数调用。 现在的重点是读配置文件,这个配置文件我们一般放在eclipsescr 根目录下,而当eclipse 编译时会自动把这个目录下的文件编译到bin 目录下,而这个bin 目录下是被配置成classpath 环境变量,而 configure 方法就是在classpath 环境变量下查找配置文件。 再来分析,无参调用 configure 方法时,默认的是传递的 hibernate.cfg.xml 配置文件,所以只有取名为这个的配置文件,才可以调用无参的 configure 方法,如果是其它名字的配置文件,则调用含参的配置文件,并且这个参数名应为这个配置文件的名字。 当读取配置文件后的 Configuration 对象,才是一个真正意义上可操控的实例对象。 然后,再用这个对象来构建一个 SessionFactory 对象。 强调说明,这一步整个操作最好是放在类的静态代码块中,因为它只在该类被加载时执行一次。

第二步 得到一个Session 实例,以进行数据库CRUD 操作
第三步 实例化一个java
第四步 持久化操作

第五步 后续操作:主要是关闭连接

7. 实体类定义规则:

Domain object java 对象)必须 要有构造方法,同时建议 有一个id 属性,为了赖加载,这个java 类的声明最好不用 final

8. 开发流程:

官方推荐:先Domain object mapping ,最后是DB 。 常用开发方式:DB 开始,由工具来生成mappingDomain object

9. 总结基本步骤:

环境搭建( 导入相关包等) —> 实体类及配置文件—>

主配置文件( 完成了数据库的配置及通过设置属性创建了相应的表)—> 得到Session 测试应用。

分享到:
评论

相关推荐

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研发; No.945,"三菱PLC与触摸屏在气压传动焊条包装线研发项目No.945中的应用"

    vb图书馆管理系统(源代码+论文).rar

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    [matlab系统程序]MATLAB危险区域预警系统.zip

    本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。

    [matlab系统程序]MATLAB图像去雾.zip

    本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于文献知识与知识图谱补全方法用于COVID-19药物再利用的创新算法

    内容概要:文章介绍了针对COVID-19的药物再利用的创新方法,这种方法融合了基于文献的知识(LitCovid和CORD-19数据集)及先进的知识图谱补全技术。具体采用了基于神经网络的TransE、RotatE等多种算法预测药物再利用的潜力,并通过开放和封闭的发现模式为预测结果提供合理的机制解释,包括发现模式、准确性分类及定性评估等手段,增强了方法的实用性。研究表明,TransE表现最优,并成功预测并验证了一系列药物作为COVID-19的治疗候选人选。此外,方法不仅适用于COVID-19,还具备应用于其他疾病药物再利用及其他临床问题解决的潜力。此研究为快速高效地推进药物再利用提供了一个新的计算框架。 适合人群:生物医学科研人员,从事药品再利用、人工智能药物筛选的专业研究人员,对生物信息数据分析和处理感兴趣的学者或技术人员。 使用场景及目标:① 利用计算模型预测药物能否被重新应用于新的适应症,尤其是在面对突发公共卫生事件时加快新药物的研发进程。② 对现有药物进行再评价,以发现更广泛、安全、有效的治疗用途,为临床治疗提供依据和理论指导。③ 探讨通过自动化手段发掘药物作用机理的技术路径。 其他说明:作者团队来自多个国家和地区,研究获得了多项国家级基金支持,论文详尽描述了实验细节,并附上了全部代码和数据资源供后续拓展和重复研究使用。

    "基于三菱PLC与组态王技术的智能交通灯车辆监测系统:No.808的实践与应用",No.808 基于三菱PLC和组态王的智能交通灯车辆监测 ,关键词: 基于三菱PLC; 组态王; 智能交通

    "基于三菱PLC与组态王技术的智能交通灯车辆监测系统:No.808的实践与应用",No.808 基于三菱PLC和组态王的智能交通灯车辆监测 ,关键词: 基于三菱PLC; 组态王; 智能交通灯; 车辆监测; No.808,"三菱PLC与组态王协同的智能交通灯车辆监测系统No.808"

    minecraft1.16.1生存基地 搭配了1.16.1的BSL着色器 BSL光影:https://cdn.modrinth.com/data/Q1vvjJYV/versions/oGcsNfpD/

    在湖上建造的生存基地,希望大家喜欢

    基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案 ,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1

    基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案。,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1200; Wincc组态; PLC; 路口交通指挥系统; 交通控制系统。,基于PLC与Wincc组态的西门子S7-1200交通指挥系统

    电子设计大赛+C题+FPGA+省级获奖

    本资源为无线传输信号模拟系统的完整设计报告,基于ZYNQ7020开发平台实现,包含硬件设计、FPGA算法逻辑、软件控制及详细测试方案。系统可生成直达信号、多径信号及合路信号,支持参数动态调节,适用于通信系统仿真、教学实验及科研开发。 资源内容 设计报告全文:方案论证、理论分析、电路设计、程序流程图、测试结果。 附录数据:AM调制频谱、载波有效值测量、多径时延/衰减/初相实测数据。 配套资料:系统架构图、DAC模块电路图、FPGA算法逻辑框图(PDF+高清图)。 适用场景 设计参考 FPGA数字信号处理开发 无线信道模拟与通信系统仿真 科研项目中的信号生成与测试

    毕业设计&课程设计&毕设&课设-java-ssm网络视频播放器

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    sqllite查询数据库的语句

    sqllite查询数据库的语句

    (源码)基于物联网的Buddy康复激励系统.zip

    # 基于物联网的Buddy康复激励系统 ## 项目简介 Buddy是一个旨在支持和激励个人在日常生活中的身体活动,从而促进康复和保持健康的系统。它由两部分组成可穿戴设备和名为“Wrfel”的游戏组件。通过可穿戴设备追踪用户的步数和心率等身体数据,并在显示屏上展示。名为“Motivationsbuddy”的角色会在每次活动时陪伴用户,并通过提醒和小提示激励用户保持活动。此外,用户还可以通过设备与其他人员进行网络联系。每周用户可以通过掷骰子的方式选择新的活动。收集到的可穿戴设备数据也会在骰子游戏的界面上进行展示。 ## 项目的主要特性和功能 1. 穿戴设备的步数和心率监测功能实时追踪用户的步数和心率,并在显示屏上展示数据。 2. 激励功能通过提醒和小提示激励用户保持活动。 3. 网络联系功能用户可以与其他人员进行网络联系,分享活动数据和经验。 4. 掷骰子活动选择功能每周用户可以通过掷骰子的方式选择新的活动,增加活动的多样性和趣味性。

    (源码)基于MFC框架的指纹识别系统.zip

    # 基于MFC框架的指纹识别系统 ## 项目简介 本项目是一个基于MFC(Microsoft Foundation Classes)框架的指纹识别系统,主要用于指纹的采集、预处理、特征提取、特征过滤、特征匹配和入库等操作。系统通过本地文件夹存储指纹库信息,并提供分步测试、登记和识别功能。 ## 项目的主要特性和功能 1. 指纹采集与预处理 使用指纹采集器(中控ZK4500)进行指纹图像的采集。 通过中值滤波、高斯锐化、均值化等方法对指纹图像进行预处理。 2. 特征提取与过滤 使用Sobel算法进行方向计算,提取图像梯度信息。 通过掩码计算和Gabor滤波增强指纹图像。 使用基于边界的特征过滤算法,减少特征点数量,提高识别速度。 3. 指纹识别与登记 提供指纹登记功能,用户可以通过采集指纹并输入姓名进行登记。 提供指纹识别功能,通过采集指纹并与指纹库中的信息进行匹配,识别用户身份。

    基于Unet技术的医学图像分割系统-DL00366:以皮肤病数据训练的自动分割模型,DL00366-基于Unet的医学图像分割系统 用Unet来做医学图像分割 我们将会以皮肤病的数据作为示范,训练

    基于Unet技术的医学图像分割系统——DL00366:以皮肤病数据训练的自动分割模型,DL00366-基于Unet的医学图像分割系统 用Unet来做医学图像分割。 我们将会以皮肤病的数据作为示范,训练一个皮肤病分割的模型出来,用户输入图像,模型可以自动分割去皮肤病的区域和正常的区域。 ,DL00366; 基于Unet的医学图像分割系统; 皮肤疾病数据; 模型训练; 图像自动分割。,基于Unet的皮肤病图像分割系统

    毕业设计&课程设计&毕设&课设-java-旅游景点线路网站

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    前端Node:第四章:大事件

    前端Node:第四章:大事件

    (源码)基于区块链的金融管理系统.zip

    # 基于区块链的金融管理系统 ## 项目简介 本项目是一个基于区块链技术的金融管理系统,旨在提供一个去中心化、安全可靠的平台,用于处理公司间的财务交易。通过使用智能合约和Python SDK,用户可以进行银行操作、注册公司、登录系统以及进行各种财务操作。 ## 项目的主要特性和功能 ### 主要特性 1. 去中心化利用区块链技术,实现数据的去中心化管理。 2. 安全性通过智能合约和区块链技术,保障数据的安全性和不可篡改性。 3. 可靠性确保交易的可靠性和持久性。 ### 功能 1. 银行界面展示银行相关的数据,如存款、贷款等。 2. 注册与登录允许用户注册新账户并登录系统。 3. 公司管理允许用户创建公司账户,管理公司的财务信息。 4. 财务操作包括转账、购买、融资、还款等操作。 5. 智能合约交互通过Python SDK与智能合约进行交互,实现各种功能。 ## 安装使用步骤 ### 假设用户已经下载了本项目的源码文件

    西门子S7-200 PLC与组态王联合楼宇消防系统电气控制设计解决方案 No.950,No.950 基于西门子S7-200 PLC和组态王楼宇消防系统电气控制系统设计 ,核心关键词:西门子

    西门子S7-200 PLC与组态王联合楼宇消防系统电气控制设计解决方案 No.950,No.950 基于西门子S7-200 PLC和组态王楼宇消防系统电气控制系统设计 ,核心关键词:西门子S7-200 PLC;组态王楼宇消防系统;电气控制系统设计;No.950,基于西门子S7-200 PLC的楼宇消防电气控制系统设计

    java JDK11版本安装包

    Java Development Kit (JDK) 11 版本简介 Java Development Kit (JDK) 作为Java平台的核心组件之一,是开发人员用来构建、运行和测试Java应用程序的必备工具集。JDK 11 是Oracle公司于2018年9月发布的长期支持(LTS)版本,标志着Java语言发展的一个重要里程碑。它不仅继承了之前版本的优点,还引入了一系列新特性与改进,以更好地适应现代软件开发的需求。 主要特点: 性能提升:通过优化垃圾回收机制等手段,JDK 11在性能方面取得了显著进步。 模块化系统:基于Java 9中引入的模块化系统进一步优化,使得开发者能够更高效地组织代码结构,提高安全性及可维护性。 增强的安全性:新增了多项安全功能,比如TLS 1.3的支持,以及对现有加密算法的加强。 新的APIs:增加了许多实用的新APIs,如用于处理HTTP请求的HttpClient API正式版、本地变量类型推断var关键字等。 移除过时元素:为了保持框架的简洁性和现代化,JDK 11移除了部分不推荐使用的API和选项。

    2008-2020年各省国内发明专利申请授权量数据.xlsx

    2008-2020年各省国内发明专利申请授权量数据 1、时间:2008-2020年 2、来源:国家统计J、统计nj 3、指标:行政区划代码、地区、年份、国内发明专利申请授权量(项) 4、范围:31省

Global site tag (gtag.js) - Google Analytics