在Java SE中使用Hibernate框架

JAVA程序员能力模型之——‘八股文’ JAVA SE | EE 知识地图 Spring | Hibernate | Struts | Spring Boot | Spring Security | Spring Data | Hibernate Validator | Spring MVC | Spring Cloud | Dubbo | MyBatis|编程基础 | 面向对象 | 输入输出流 | 异常处理 | 多线程 | 网络编程 | Swing | JDBC | Servlet |JSP 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 目前人们很容易发现Hibernate正迅速的成为流行的J2EE的O/R映射工具和数据集成框架(如果不是最流行的)。Hibernate为企业应用开发者操作关系数据库的提供了清晰明了而又强大的工具。然而如果你需要在外部访问那些包装在J2EE web应用里的实体,情况又怎样呢?你的开发跟应用独立分开,却又相同的实体以访问你的数据吗?又或者你得编写附加的web组件来管理对数据的内部访问吗?   在很多情况下,这些问题都会出现。我的情况是我的公司需要将来自多个供应商,有着多种文件格式的记录导入到数据库里。我想起我以前经常使用的方法,那就是编写Shell和SQL教本(甚至是存储过程)来导入数据。但是由于我们的数据模型太过复杂,我决定在web应用之外尽可能的利用现有的实体,Spring DAO以及服务并且开发一个自定义的J2SE命令行数据加载工具。   大问题:你该怎样呢?   现在很多Hibernate的文档和范例都是绑定在容器上。不管是web应用还是内部的大型应用,总会使用到容器的。人们有很好的理由去使用它。容器是设计来提供对各种特性的支持,例如事务处理,线程以及安全。现今,这些特性都是开发中等规模和企业应用所必需的工具。然而当你需要在容器之外访问实体时,你该怎样呢?你是使用现有的架构和代码呢,还是会从一个不同的角度来解决问题,比如说完全采用另一种开发语言?当然,我们没有正确答案。在本文的余下部分,我将说明我的方法:就是在Spring容器之外重用现有的实体/POJO。   起初,脚本语言,例如Perl,Python,Ruby甚至Tcl(是的,我以前也做过这个)看起来有很多优势。它们能省下很多时间,可以轻易得到初始结果,还能规避许多Hibernate潜在的复杂度。人们完全可能只用几行代码就可以连接数据库,查询结果,已经打印输出到终端屏幕或者日志文件。然而,取决于你的数据模型,事情也(总是)会变得相当复杂。譬如说你有一个表 person, 其中有一个外键属于表 address。当我们添加数据的时候,表address没有正确的插入数据,就会导致表person 也不能插入了。这是个很典型的事务处理方面的问题。也许有人会说在脚本语言中这个问题不难解决,就像在你的主程序里一样。可是问题仍然存在,为什么要这样做呢?业务逻辑不是已经在你的应用里面了吗?为什么要在写一遍代码呢?而且这并不是唯一的情况,你必须重复你的工作和业务逻辑,这样就会带来出错的可能。   然而,有些人会觉得这样也行,他们使用自己觉得最适合的工具。也许你已经因为程序之外的原因而有了某种独立的架构;也许你会在独立的数据库里加载和测试数据,然后在通过各种测试后再迁移到产品的数据库里;又也许你把数据库维护外包出去,你只需要把相关文件发给合作伙伴让他们去处理那些问题。总之,总会有很多理由不使用现有的Hibernate数据层。没有谁对谁错,只是如果你可以也愿意在你的应用之外使用现有的代码,请往下看。我会告诉你一些方法,这能解决你不少的烦恼噢。   配置   如果你觉得可以在容器之外使用现有的Hibernate对象的话,那你首先要做的事就是得自己手工管理所有的配置项,在本文余下部分我所采用的方法是使用一个基于命令行的JAVA程序。既然你已经配置了Hibernate XML配置文件,你应该知道需要提供的参数,例如JNDI DataSource名,实体映射文件,还有其他一些处理SQL日志的属性。如果你想使用命令行程序的话,你就得解决如何解析XML文件和把它添加到配置项中的这些问题。虽然解析XML文件也不难,但这本身并不是我们的重点。因此,我建议使用propetries文件,properties文件比较直观而且容易加载并从中读取数据。下面是配置Hibernate所需要的最小属性集(不包括任何实体映射)。   清单1: hibernate.dialect=net.sf.hibernate.dialect.PostgreSQLDialect hibernate.connection.driver_class=org.postgresql.Driver hibernate.connection.url=jdbc:postgresql://devserver/devdb hibernate.connection.username=dbuserhibernate.connection.password=dbpassword hibernate.query.substitutions yes Y   正如你所看到的,上面的属性值指定了数据库方言,JDBC驱动,数据库url,用户名,用户密码,以及是否使用查找替换。只要定义以上几项数值并保存在文件hibernate.properties里(要放置在你的类路径里面哦),就能很轻松的加载,填充到Hibernate Configuation类里面。   清单2: Properties props = new Properties(); try {  props.load(props.getClass().getResourceAsStream("hibernate.properties")); }catch(Exception e){  System.out.println("Error loading hibernate properties.");  e.printStackTrace();  System.exit(0); } String driver = props.getProperty("hibernate.connection.driver_class"); String connUrl = props.getProperty("hibernate.connection.url"); String username = props.getProperty("hibernate.connection.username"); String password = props.getProperty("hibernate.connection.password"); // In my examples, I use Postgres, but Hibernate // supports virtually every popular dbms out there.Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection(connUrl, username, password); Configuration cfg = new Configuration(); cfg.setProperties( props ); SessionFactory sessions = cfg.buildSessionFactory(); Session session = sessions.openSession(conn);   这样我们就得到了Hibernate Session类了。但我们也有必要解决如何利用现有的实体映射这个问题。在《Hibernate in Action》一书中,提到怎样从实体映射XML文件中加载,如下所示:   清单3: Configuration cfg = new Configuration(); cfg.addResource("hello/Message.hbm.xml"); cfg.setProperties( System.getProperties() ); SessionFactory sessions = cfg.buildSessionFactory();   这段代码清晰的说明了从hello包里加载Message实体定义的过程。对于这个例子来说还好,但对那些有多个实体的应用来说,就很单一而且容易出错。不仅映射关系是硬编码,还得手工管理每次添加一个新的实体就要更新实体加载的代码。其实有跟简单的方法去查找和加载映射关系以使其与最新的jar文件保持一致。   首先,在你的web服务器或者企业服务器里,映射文件需要放置在类路径里,这样Hibernate才能正常的运行。这样做是很有好处的,因为你所需要做的就是使用同样的jar包和查找相应的映射文件的名字。因为你可能会有多个jar文件在你的类路径里,你需要指定哪个jar包包含了映射文件。以下就是一种查找映射关系的方法   清单4: String cp = System.getProperty("java.class.path"); String jarFile = null; List hbmList = null;String[] cparr = cp.split("//:"); for(int j=0;j
双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变 DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底 阅读详情

相关推荐

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic

树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。...

weixin_44415639的博客 2万+

javaSe中使用Hibernate

hibernate可用在javaSe中也可以用在javaSe中,在javaSe中使用的常规流程是: hibernate配置文件 [code="java"] org.hibernate.dialect.Oracle10gDialect jdbc:oracle:thin:@localhost:1521:OR...

专注=成功 277

Microsoft Speech SDK 使用过程中女声改为男声遇到的问题

问题将女生改为系统自带男声(Kangkang)根据上面的步骤我的播放声音是改变了,但是还是女生,是yaoyao的女生。是因为下面注册表路径中VoicePath这个配置的路径指向了yaoyao的文件。 如何使用Microsoft Speech SDK,请参考https://blog.youkuaiyun.com/daoming1112/article/details/77542562 使用系统自带男声语音,不需...

u012161365的博客 7538

java hibernate构架_在Java SE中使用Hibernate框架

Properties props = new Properties();try {props.load(props.getClass().getResourceAsStream("hibernate.properties"));}catch(Exception e){System.out.println("Error loading hibernate properties.");e.printS...

weixin_42502957的博客 80

3D Gaussian Splatting:用于实时的辐射场渲染

3D Gaussian Splatting:用于实时的辐射场渲染 3d gaussian splatting for real-time radiance field rendering

m0_51976564的博客 1万+

FLUKA软件在Ubuntu的安装指南(亲测有效)

FLUKA其强大的蒙特卡洛模拟能力使得用户能够模拟复杂的辐射相互作用过程

chencheng1127的博客 2887

java框架学习顺序

学习java的顺序修软件工程,那学习java系列的顺序是什么? 看下疯狂系列图书的前面,都附带java的学习步骤。看你的基础来决定。一般都是Java SE ---Severlet----JSP---struts---Hibernate---Spring。中间还要穿插学习XML,Javascript等乱七八糟的东西.......

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 827

SerDes硬件设计原理介绍

接收端:外部差分串行数据------线性均衡器----(CDR从数据中恢复出采样时钟)-----解串器(串行信号转并行信号)-------8B/10B的解码器或解扰器-----FIFO-----FPGA接受差分并行数据。发送端: FPGA发送差分并行数据----FIFO------8B/10B编码器或者扰码器-----串行器(并行信号转串行信号)-----均衡器(滤波)--------TX串行信号差分外发。串行器:8bit的并行数据----2bit的并行数据----1bits的串行数据。

weixin_42304393的博客 1110

“Java大侠秀绝技,工具框架信手拈来!“

Maven是基于项目的构建系统,Gradle是一个基于Groovy的构建工具,Ant则是一个基于XML的构建工具。马小帅:Hibernate是一个开源的对象关系映射(ORM)框架,它可以将Java对象映射到数据库中的表和记录上。马小帅:Spring Boot是一个开源的框架,用于简化Spring应用的初始搭建以及开发过程。马小帅:嗨,面试官。面试官:马小帅,你好,很高兴你能来参加我们公司的Java开发面试。马小帅:我个人更倾向于使用Gradle,因为它提供了更多的灵活性和更好的性能。面试官:好的,马小帅。

zhaomh2017的博客 167

深信服全产品线新版图标库 Visio版+PPT版【2023年最新整理】

深信服全产品线新版图标库Visio版(含网络位置符号以及其他网络设备和外设图标)有朋友想要我整理一下深信服的相关图标,那么今天,瑞哥给老铁们整理了。运维漫谈是瑞哥针对运维领域的一个公众号,欢迎大家的关注哦!篇幅原因,就只展示那么多,有需要的朋友自行下载。SANGFOR 各产品图标-Visio版。你好,这里是网络技术联盟站。SANGFOR全产品线图标。深信服设备前置面板-AC。

网络技术联盟站 3698

Floyd (弗洛伊德)算法简述

Floyd在1962年由Robert Floyd以其当前公认的形式出版。算法作为三个嵌套for循环的现代公式首先由Peter Ingerman在1962年描述。Floyd 算法是解决图论问题的比较经典的算法,是解决给定的加权图中顶点间的最短路径的一种算法,可以正确处理有向图的最短路径问题。

慕羽★的博客 2万+

Java小白如何一步一步变成Java大神的你知道吗?

对于刚刚接触编程的小白来说,对于如何学习可谓是脑子里一团浆糊,很多人都不知道该怎么去学习。今天小编就给大家分享一下Java学习的路线图吧。 java学习路线图 今天把java的学习路线图以及需要学习的知识点做一个简单的介绍 首先我们得明白程序的组成部分,假设以google这个应用程序为例: 打开google可以看到主界面 当点击搜索的时候,请求到后台去处理 然后后台去到数据库找相应...

编程知识分享 1171

结构力学仿真软件:STAAD.Pro:结构抗震设计与STAAD.Pro应用_2024-08-10_11-49-29.Tex

STAAD.Pro是一款广泛应用于结构工程领域的仿真软件,由Bentley Systems开发。它能够进行结构分析和设计,支持多种结构类型,包括桥梁、建筑物、塔架等。STAAD.Pro提供了强大的建模工具,用户可以轻松创建复杂的结构模型,并进行静态和动态分析。软件还支持多种载荷组合,包括地震载荷,以及提供详细的报告和图纸输出,便于工程师进行设计和审查。STAAD.Pro是一款广泛应用于结构工程设计的软件,其界面直观,功能强大,能够进行结构分析与设计。菜单栏。

977

Hibernate 2

How to use Hibernate in NetBean IDE? See this : http://netbeans.org/kb/docs/java/hibernate-java-se_zh_CN.html,这里使用的是mysql数据库,如何使用sql server数据库参见: http://blog.youkuaiyun.com/xuqianghit/archive/2010/06...

weixin_30498921的博客 77

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

java API chm html 1.5 1.6 中文版英文版 帮助文档

J2SE DK & API下载 ————————- http://java.sun.com/j2se/1.3/download.html http://java.sun.com/j2se/1.4.2/download.html http://java.sun.com/ja

alfredtofu的专栏 877

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java常用注解详解:从基础到高级的全面解析与实战应用

Lombok是一个流行的Java库,它通过注解的方式简化了Java代码的编写,尤其是减少了样板代码的生成。Hibernate是一个流行的Java ORM框架,它通过注解的方式简化了数据库操作。注解可以用于静态代码分析工具中,确保类的实例在创建后不会被修改。例如,我们可以标记一个类为不可变类。用于标记类为不可变类。

1014

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

**Java面试:小帅的“趣”答之路**

(自信地)嗯,Java SE 17引入了几个新特性,比如基于模式的文本块、记录、密封类等。

zhaomh2017的博客 522

Java高级程序员需要学习哪些技术?

  Java高级程序员具备的特点,首先Java高级程序员必须具有一定的业务分析和流程意识、性能优化经验,大数据设计处理和功能开发、会语言设计和技能开发、很强的学习能力。具备Java内存模型、GC工作原理、Java classload机制、深入研究过开源项目、设计模式Java内存检测工具等知识。Java高级程序员需要学习哪些技术?   1、掌握核心Java SE   从核心Java开始学习,掌握核心技术开发。了解和掌握循环,数组,运算符等基本概念,Java SE有一系列通用API,比如Java.lang

IT_studied的博客 1010

面试现场:互联网大厂Java程序员面试记(涵盖Java SE、Spring Boot、Hibernate、gRPC等技术点)

面试官:拥有多年技术经验,对技术细节了如指掌。谢飞机:一位自称“全栈”的程序员,但实际水平有待考察。

qq_42536591的博客 474

Java互联网大厂面试:从Java SE到微服务的全面探索

面试官:好的,谢飞机,今天的面试到此结束,请回去等通知。

m0_74295492的博客 282

**“Java全栈达人秀:从SE到微服务,一网打尽!“**

马小帅,你好!欢迎来到我们公司进行Java开发工程师的面试。首先,我想了解一下你对Java SE、Jakarta EE和JVM的了解。:嗯,Java SE是Java的核心语言平台,我熟悉Java 8、11和17版本。Jakarta EE是Java EE的继任者,我了解它的核心组件和技术。至于JVM,那是Java虚拟机,负责执行Java字节码。:很好!那你能谈谈你使用Maven、Gradle和Ant构建项目的经验吗?:当然可以。

zhaomh2017的博客 422

“Java奇兵闯关记:技术栈大揭秘!“

马小帅(回答得比较具体):可以通过健康数据监测、个性化建议等方式帮助用户养成良好的生活习惯。马小帅(回答得比较详细):可以通过用户画像、历史购买记录等数据进行分析,实现精准推荐。马小帅(回答得比较清晰):可以通过推荐算法、排行榜、积分系统等方式来提升用户活跃度。马小帅(回答得有些勉强):可以通过大数据分析、智能匹配算法等方式实现资源的高效配置。马小帅(回答得比较具体):可以通过地图导航、在线预约、优惠活动等方式提高用户体验。马小帅(回答得比较清晰):可以通过在线办公工具、沟通平台等方式提高团队协作效率。

zhaomh2017的博客 363

Java发展史

Java 作为一种广泛使用的计算机编程语言,拥有着丰富的发展历程。

hqxstudying的博客 1064

互联网大厂Java面试:从Java SE到微服务的技术深度剖析

在互联网大厂的一次Java面试中,程序员谢飞机面对严肃的面试官,开始了一场技术上的较量。面试官精心准备了一系列从Java SE到微服务的技术问题,涵盖了广泛的技术栈,包括Java语言、构建工具、web框架以及微服务架构等。通过以上问题和解答,我们可以看到谢飞机在基本问题上还是能够给出正确的回答,但在遇到复杂问题时显得有些捉襟见肘。嗯,Hibernate是ORM框架,负责对象与数据库的映射。Maven和Gradle都是构建工具,Maven使用XML配置,Gradle用DSL写配置,看个人喜好吧。

weixin_50060611的博客 405

Java面试场景:互联网大厂求职者的技术挑战

Spring Cloud 提供微服务架构的治理,如服务发现、负载均衡等,而 Kubernetes 提供容器化应用的编排和管理,两者可以结合使用,提供完整的微服务解决方案。: Java SE 是标准版,适用于桌面应用,而 Jakarta EE 是企业版,适用于开发和部署企业应用,提供了丰富的 API 和服务,如事务管理、持久化等。Spring Cloud 用于微服务,Kubernetes 是用来管理容器的。这个嘛,Java SE 是标准版,Jakarta EE 是企业版,主要用来开发企业级应用,嗯……

weixin_48893653的博客 455
上一篇: Java函数编程工具FunctionalJ 发布
下一篇: Java新手必看之Hello World 攻略
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值