Hibernate JDBC连接详解

Hibernate JDBC连接

通常你希望SessionFactory来为你创建和缓存(pool)JDBC连接. 如果你采用这种方式, 只需要如下例所示那样,打开一个Session:

  1. Session session = sessions.openSession(); // open a new Session 

一旦你需要进行数据访问时, 就会从连接池(connection pool)获得一个JDBC连接.

为了使这种方式工作起来, 我们需要向Hibernate传递一些JDBC连接的属性. 所有Hibernate属性的名字和语义都在org.hibernate.cfg.Environment中定义. 我们现在将描述JDBC连接配置中最重要的设置.

如果你设置如下属性,Hibernate将使用java.sql.DriverManager来获得(和缓存)JDBC连接 :

表 1.  Hibernate JDBC属性

 

属性名

用途

hibernate.connection.driver_class

jdbc驱动类

hibernate.connection.url

jdbc URL

hibernate.connection.username

数据库用户

hibernate.connection.password

数据库用户密码

hibernate.connection.pool_size

连接池容量上限数目

 

但Hibernate自带的连接池算法相当不成熟. 它只是为了让你快些上手,并不适合用于产品系统或性能测试中。 出于最佳性能和稳定性考虑你应该使用第三方的连接池。只需要用特定连接池的设置替换 hibernate.connection.pool_size即可。这将关闭Hibernate自带的连接池. 例如, 你可能会想用C3P0.

C3P0是一个随Hibernate一同分发的开源的JDBC连接池, 它位于lib目录下。 如果你设置了hibernate.c3p0.*相关的属性, Hibernate将使用 C3P0ConnectionProvider来缓存JDBC连接. 如果你更原意使用Proxool, 请参考发 行包中的hibernate.properties并到Hibernate网站获取更多的信息.

这是一个使用C3P0的hibernate.properties样例文件:

  1. hibernate.connection.driver_class = org.postgresql.Driver  
  2. hibernate.connection.url = jdbc:postgresql://localhost/mydatabase  
  3. hibernate.connection.username = myuser 
  4. hibernate.connection.password = secret 
  5. hibernate.c3p0.min_size=5 
  6. hibernate.c3p0.max_size=20 
  7. hibernate.c3p0.timeout=1800 
  8. hibernate.c3p0.max_statements=50 
  9. hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect 

为了能在应用程序服务器(application server)中使用Hibernate, 应当总是将Hibernate 配置成从注册在JNDI中的Datasource处获得连接,你至少需要设置下列属性中的一个:

表 2.  Hibernate数据源属性

 

属性名

用途

hibernate.connection.datasource

数据源JNDI名字

hibernate.jndi.url

JNDI提供者的URL (可选)

hibernate.jndi.class

JNDI InitialContextFactory类 (可选)

hibernate.connection.username

数据库用户 (可选)

hibernate.connection.password

数据库用户密码 (可选)

 

这是一个使用应用程序服务器提供的JNDI数据源的hibernate.properties样例文件:

  1. hibernate.connection.datasource = java:/comp/env/jdbc/test  
  2. hibernate.transaction.factory_class = \  
  3.  org.hibernate.transaction.JTATransactionFactory  
  4. hibernate.transaction.manager_lookup_class = \  
  5.     org.hibernate.transaction.JBossTransactionManagerLookup  
  6. hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect 

从JNDI数据源获得的JDBC连接将自动参与到应用程序服务器中容器管理的事务(container-managed transactions)中去.

任何连接(connection)属性的属性名都要以"hibernate.connnection"开头. 例如, 你可能会使用hibernate.connection.charSet来指定字符集charSet.

通过实现org.hibernate.connection.ConnectionProvider接口,你可以定义属于 你自己的获得Hibernate JDBC连接的插件策略。通过设置hibernate.connection.provider_class, 你可以选择一个自定义的实现.

 

你的OLED屏和MPU6050为啥通信失败?从IIC的7位地址冲突讲起 本文深入解析OLED屏与MPU6050传感器在I2C总线上的通信故障,重点探讨7位地址冲突问题。通过分析I2C协议中的地址分配机制,提供硬件调整和软件调试的完整解决方案,帮助开发者有效排查和解决设备无响应问题。 阅读详情

相关推荐

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8972

在 Hibernate 中直接操作 JDBC 接口

简介: Hibernate 在处理多表关联及分组排序等复杂数据库查询操作时,其固有的 O-R 映射机制会产生大量冗余 SQL 操作,系统性能比传统的 JDBC 低很多。本文分析了 Hibernate 产生此类问题的原因,提出了一个在 Hibernate 框架内直接操作 JDBC 的接口的解决方案,在实际项目中验证了该解决方案可以有效提高此类查询的效率。文中提供的示例代码可以直接运用于使用 Hibe...

iteye_4788的博客 316

【可不卸载重装】VS2019新建项目里没有CUDA选项

问题:VS2019 新建项目里没有CUDA选项,vs也属性没有cuda。这是因为你在Visual Studio 2019安装之前,先安装了CUDA Toolkit。

qq_62844901的博客 1321

在hibernate 中如何转换JDBC的操作?

//方法如下 public void deleteBatch(int userid) throws Exception{ String hql = "DELETE FROM Stock AS stock WHERE stock.userid=?"; Connection conn = (Connection) session.connection(); PreparedStat...

ada_yangkun的博客 317

深入解析反射式DLL注入:从原理到实战优化

本文深入解析反射式DLL注入技术,从原理到实战优化全面剖析。通过PE文件内存重构、反射加载器实现及免杀增强方案,展示如何绕过安全检测并提升性能。适用于红队行动、内网渗透等场景,是高级攻防对抗中的关键技术。

weixin_28339967的博客 405

C#开发者必备:VSPD虚拟串口快速配置指南(附汉化教程)

本文为C#开发者提供了VSPD虚拟串口的快速配置与汉化教程。详细介绍了如何安装、汉化VSPD,并创建稳定的虚拟串口对,重点讲解了如何将其集成到C#开发工作流中,使用SerialPort类进行数据通信测试、协议模拟及故障排查,有效提升硬件通信开发的效率。

weixin_29224529的博客 258

不推荐使用JDBC的原因

1.数据库连接创建、释放频繁会造成资源的浪费,从而影响系统的性能。如果使用数据库连接池技术可能会使其好转。 2.sql语句中存在硬编码问题,造成代码的不易维护,实际应用中sql变化的可能较大,容易造成整体的java代码的改变 3.使用prepreparedStatement向占位符传递参数存在硬编码问题,因为sql中的where条件可能不一定,可能多和少,很容易要造成修改sql代码,系统不易维...

martin-Cao 858

5.1 直流无刷电机(BLDC):基本控制概念

本文系统介绍了直流无刷电机(BLDC)控制系统的核心概念与技术。主要内容包括:控制系统的分层结构设计,开环与闭环控制的原理及特点,PWM调速技术及其调制方式,PID控制算法及其数字化实现方法,以及控制系统的性能评估指标。同时探讨了现代BLDC控制器硬件实现方案,并介绍了磁场定向控制(FOC)、直接转矩控制(DTC)等先进控制策略。文章全面阐述了BLDC电机控制从基本原理到前沿技术的知识体系,为相关应用提供了理论指导和技术参考。

技术工作者 492

配置MyBatis

MyBatis ONE 第一章:框架的概述 JDBC存在的问题 我们要想研究mybatis就必须知道jdbc所存在的问题,那我那么我们首先来复习一下jdbc操作数据库的大致流程 1.加载数据库驱动 2.创建并获取数据库连接对象connection 3.通过连接对象获取会话对象statement 4.编写sql语句 5.如果有参数的话需要通过Statement设置参数 6.执行sql语句并获取结果 7.关闭资源 完成这些对象的创建之后,下一步关ResultSet对象,关闭S.

weixin_64881460的博客 351

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

【肌电处理】肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率【含Matlab源码 3386期】

肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 825

hibernate jdbc连接

JDBC连接 通常你希望SessionFactory来为你创建和缓存(pool)JDBC连接. 如果你采用这种方式, 只需要如下例所示那样,打开一个Session: Session session = sessions.openSession(); // open a ne

真的想做点事情 897

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Hibernate入门04 - 提供JDBC连接

 如果需要的话,您可以自行提供JDBC连接对象给Hibernate使用,而无需透过配置文件设定JDBC来源,一个最简单的例子如下: Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/HibernateTest?user=root&password=";java.sql.C

纯冰蓝色的BLOG 1135

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从Hibernate中获得JDBC连接

 使用Hibernate的过程中,有时候需要直接使用SQL语句来操作数据库(虽然Hibernate不推荐使用,但是有时候还是会使用到的,比如说批处理),这个时候就要求我们首先获得JDBC的连接。获得JDBC连接的方式有: 1、先获得Session,然后从Session中获得连接      session.connection();      但是这个方法Hibernate不推荐使用,T

我爱编程持之以恒 1120

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

从hibernate中获取jdbc连接

使用Hibernate的过程中,有时候需要直接使用SQL语句来操作数据库(虽然Hibernate不推荐使用,但是有时候还是会使用到的,比如说批处理),这个时候就要求我们首先获得JDBC的连接。获得JDBC连接的方式有:1、先获得Session,然后从Session中获得连接      session.connection();      但是这个方法Hibernate不推荐使用,The metho...

彻底拆分,一切可控! 1233

hibernate配置和JDBC连接池

&lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/h...

威尔乔布斯 466

jdbc、hibernate、mybatis连接数据库步骤

JDBC连接数据库的流程及其原理 1:在开发环境中加载指定数据库的驱动程序。 2:在Java程序中加载驱动程序。 Class.forName(“com.mysql.jdbc.Driver”) 3:创建数据连接对象 通过DriverManager类创建数据库连接对象Connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所 加载的驱动

chunrudikai的博客 2185

JDBC与Hibernate连接池

Java应用程序访问数据库基本原理: 在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁 . 一般来说,Java应用程序访问数据库的过程是:   ①装载数据库驱动程序;   ②通过JDBC建立数据库连接;    ③访问数据库,执行SQL语句;    ④断开数据库连接。 JDBC作为一种数据库访问技术,具...

weixin_30247159的博客 207

在Hibernate中创建连接池,JDBC连接

这是最好的SessoinFactory创建和池JDBC连接你。如果你采取这种方法,很简单,只要打开的org.hibernate.Session: Session session = sessions.openSession(); // open a new Session 一旦你开始一个任务,需要对数据库的访问,将获得一个JDBC连接池。 你可以这样做之前,你首先...

weixin_34247299的博客 289

数据库连接方式总结:JDBC、JdbcTemplate、Hibernate、Mybatis、JPA、SpringDataJPA

1.JDBC 介绍 JDBC(Java DataBase Connectivity ,java数据库连接技术) 用来访问各种数据库 。JDBC 规范定义接口 , 具体的实现由各大数据库厂商来实现。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动,数据库驱动由数据库厂商提供。 开发步骤 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动和数据库信息 2,操作Connection,打开Statement对象 ...

杜海的博客 3830

关于Hibernate获取JDBC连接 直接执行SQL

今天要做一个显示数据库列表的功能,不想直接用JDBC,呵呵 于是用hibernate,由于对hibernate 不熟悉,想执行一条语句"show databases" 都找不到办法... 在网上找了下,说是使用 session.connection(),但是在 hibernate3中,这个方法不推荐使用,但是将就先用吧 晚上回来看了下资料,原来jdbc是另外有组件来管理的, 使用方式如下:做...

战斗机 147
上一篇: Java监听器
下一篇: Hibernate project not selected 或者 该项目不是Hibernate项目 问题
txlaijava
博客等级 码龄19年 10粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值