当前位置: 首页 > 编程日记 > 正文

【spring框架】spring整合hibernate初步

spring与hibernate做整合的时候,首先我们要获得sessionFactory。

我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给spring来管理。

下面的代码演示如何创建一个JDBC DataSource 和Hibernate SessionFactory:
<beans><bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="org.hsqldb.jdbcDriver"/><property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/><property name="username" value="sa"/><property name="password" value=""/></bean><bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="myDataSource"/><property name="mappingResources"><list><value>product.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value></property></bean></beans>

org.springframework.orm.hibernate3.LocalSessionFactoryBean是spring提供的使用XML配置的sessionFactory,是不支持Annotation的。可以使用:
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean让sessionFactory支持Annotation注解的形式来配置。

改写为(加了Properties的配置,Properties里面提供了hibernate的一些配置,如方言等属性):
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="myDataSource"/><property name="mappingResources"><list><value>product.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property>
</bean>

可以看到hibernate的映射方式(mappingResources)是xml的,我们想注入一个使用Annnotation的注解实体类,可以这样改写:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="myDataSource"/><property name="annotatedClasses"><list><value>cn.edu.hpu.model.user</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop></props></property>
</bean>


做一下实验要引入hibernate的jar包
User的Annotation注解实体类写法:
User.java:
package cn.edu.hpu.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;@Entity
public class User {private int id;private String name;@Id@GeneratedValuepublic 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;}}

UserDaoImpl的save方法就要用SessionFactory进行数据库数据的add了:
package cn.edu.hpu.dao.Impl;import javax.annotation.Resource;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Component;import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;@Component("u")
public class UserDaoImpl implements UserDao{private SessionFactory sessionFactory;@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public SessionFactory getSessionFactory() {return sessionFactory;}public void save(User u) {Session s=sessionFactory.openSession();s.beginTransaction();s.save(u);s.getTransaction().commit();System.out.println("add success!!");		}
}
(中间出了一次错,java.lang.IllegalStateException: @Resource annotation requires a single-arg。问题出现在配置resource的时候出现错误!
解决方案!@resource配置在了get上(正确的是应该配置在set上))

测试类:
package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;public class UserServiceTest {@Testpublic void testAdd() throws Exception{ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");UserService userService=(UserService)ctx.getBean("userService");System.out.println(userService.getClass());User u=new User();u.setName("jack");userService.add(u);ctx.destroy();}
}

测试成功,数据库储存了一条名为"jack"的字段。

以上是初步的整合,下一次总结是进一步整合。

转载请注明出处:http://blog.csdn.net/acmman/article/details/44570923

相关文章:

PyTorch简介

PyTorch是一个针对深度学习&#xff0c;并且使用GPU和CPU来优化的tensor library(张量库)。最新发布的稳定版本为1.9&#xff0c;源码在https://github.com/pytorch/pytorch 。它支持在Linux、Mac和Windows上编译和运行。调用Python接口可以通过Anaconda或Pip的方式安装&#x…

Java 责任链模式

顾名思义&#xff0c;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;为请求创建了一个接收者对象的链。这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中&#xff0c;通常每个接收者…

2019嵌入式智能国际大会圆满落幕,7大专场精彩瞬间释出!

全球第二大市场研究机构MarketsandMarkets报告称&#xff0c;2019年全球AIoT市场规模为51亿美元&#xff0c;到2024年&#xff0c;这一数字将增长至162亿美元。5G元年&#xff0c;人工智能开始更多地转向应用智能。基于此&#xff0c;12月6-7日&#xff0c;由哈尔滨工业大学&am…

ubuntu12.04 alternate win7 双系统安装

ubuntu alternate的安装比desktop复杂一点,因为alternate的安装过程有个步骤是检测cd-rom,如果你是刻盘安装,自然没问题,但是,现在的安装一般是将系统刻到U盘里,或者在硬盘中划出一个分区,将其制作成启动盘. 这里我是用U盘安装的... 安装前的准备: 1)在硬盘上分出一个空闲分区:…

C/C++包管理工具Conan简介

Conan是一个开源的、跨平台的、去中心化的C和C包管理器&#xff0c;它的源码在https://github.com/conan-io/conan &#xff0c;License为MIT&#xff0c;最新发布版本为1.38.0&#xff0c;由Python实现。版本更新较频繁&#xff0c;但保持向前兼容。 Conan特点&#xff1a; (1…

神经架构搜索在视频理解中研究进展的综述

作者 | Michael S. Ryoo 研究员与 AJ Piergiovanni 学生研究员&#xff08;Google 机器人团队&#xff09;来源 | TensorFlow&#xff08;ID&#xff1a;TensorFlow_official&#xff09;视频理解一直是项颇具挑战性的难题。视频中包含时空数据&#xff0c;因此要提取特征表示需…

Java命令模式

命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传给调用对象。调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&#xff0c;该对象执行命令…

关于本分类(codeforces-好题系列)

前前后后花了将近半个月&#xff0c;终于将吴神的十场cf的50题目补完了&#xff0c;看到了各种技巧和DP的好题&#xff0c;为了方便以后查阅&#xff0c;新增一个分类便于查找&#xff0c;当然本分类的题目其他分类一般都有&#xff0c;先去吃个饭&#xff0c;回来刷题解转载于…

Conan客户端简单使用示例

在https://blog.csdn.net/fengbingchun/article/details/118443862 中对Conan进行了简单介绍&#xff0c;这里调用openssl的接口&#xff0c;写一个简单的test来说明Conan的使用步骤&#xff1a; (1).首先添加一个conanfile.txt文件&#xff0c;内容如下&#xff1a;依赖项为op…

Java解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09;提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式。这种模式实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图&#xff1a;给定一个语言&…

为什么鲜有炫富的程序员?看看中国各阶级收入统计表

网上那些口口声声随随便便就能年入百万的&#xff0c;听听就行。作为开发者&#xff0c;可以不参加双11&#xff0c;但是花钱最多的地方就是买电子产品和“买课”。他们的炫富就是&#xff1a;你根本不知道有多贵的机械键盘&#xff0c;为了赚钱和幸福&#xff0c;又买了多少大…

HQL中的Like查询需要注意的地方

public List getOrgan(String organCode, String organName) { String hsql; List list; if (organCode ! null && organCode.length() > 0) { hsql "from Ab31 where bae002 ? and aab061 like ?"; list getHibernateTemplate().find…

深度神经网络中的Batch Normalization介绍及实现

之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时&#xff0c;网络中会有BN层&#xff0c;即Batch Normalization&#xff0c;在每个Dense Block中都会有BN参与运算&#xff0c;下面对BN进行介绍并给出C和PyTorch实现。 Batch Normalization即…

韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?

作者 | 藏狐来源 | 脑极体&#xff08;ID&#xff1a;unity007&#xff09;伴随着感恩节气氛的日渐浓重&#xff0c;面对只剩下最后一个月份额的2019&#xff0c;奋进的、错失的&#xff0c;都已尘埃落定&#xff0c;是时候迎来盘点得失、清理思绪的冬藏时节了。整体来看&#…

Java迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09;是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 意图&#xff1a;提供一种方法顺序访问一个聚合对象中各个元…

Linux下搭建高效的SVN

第一种安装方式&#xff1a;svn下载&#xff1a;http://archive.apache.org/dist/subversion/需要的包yum install gcc gcc-cyum install expat-develyum install openssl-develhttp://labs.renren.com/apache-mirror//httpd/httpd-2.2.22.tar.gz //最好用2.2版本http://subver…

通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤

Ubuntu版本要求是16.04及以上版本。这里以16.04为例。 在Ubuntu上安装OpenSSH server&#xff0c;执行&#xff1a;$ sudo apt-get install openssh-server 在Windows 10 1803上安装Windows OpenSSH Client(注&#xff1a;Windows早期版本则需要安装Git for Windows)&#xff1…

Java中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类&#xff0c;该类通常处理不同类之间的通信&#xff0c;并支持松耦合&#xff0c;使代码易于维护。中介者模式属于行为型模式。 意图&#xff1a;用一个中…

那些打着AI万金油旗号的产品欺骗大众,如何识别?

作者 | Arvind Narayanan译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;如今&#xff0c;很多打着AI名号售出的产品都属于万金油系列&#xff0c;没什么实质性的功能。为什么会这样&#xff1f;我们应该如何识别这类AI&#xff1f;幻灯片上是评估性格和工…

分享一款jQuery全屏滚动页面特性案例

分享一款jQuery全屏滚动页面特性案例。我们在来往官网&#xff0c;或者小米官网都会看到全屏滚动页面的一些例子。可以说全屏滚动页面越来越受欢迎。它们就像是竖着的图片轮转一样。这样的页面有很多&#xff0c;如&#xff1a;iPhone 5C页面&#xff1a;http://www.dowebok.co…

后深度学习时代的一大研究热点?论因果关系及其构建思路

作者 | Bernhard Schlkopf译者 | Kolen编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;尽管机器学习在现阶段取得了很大成功&#xff0c;但是相比于动物所能完成的工作&#xff0c;机器学习在动物擅长的关键技术上表现不尽人意&#xff0c;比如…

Java观察者模式

当对象间存在一对多关系时&#xff0c;则使用观察者模式&#xff08;Observer Pattern&#xff09;。比如&#xff0c;当一个对象被修改时&#xff0c;则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一…

Python3中None用法

1.None是一个空值&#xff0c;空值是Python里的一个特殊值&#xff0c;用None表示。可以将None赋值给任何变量。 var None; print(var) # None if var is None:print("var has a value of None") # print else:print("var:", var) 2.None有自己的数据类型…

try finally 中的return

2019独角兽企业重金招聘Python工程师标准>>> public class Test { public static int test1() { int x 1; try { return x; } finally { x; } } public static int test2() { int x 1; try { return x; } finally { return x; } } public st…

我用Python破解了同事的加密压缩包

作者 | 朱小五来源 | 凹凸玩数据&#xff08;ID: alltodata&#xff09;又是一杯奶茶。事情的经过是这样的&#xff1a;又是奶茶&#xff0c;行吧行吧。快点开工&#xff0c;争取李大伟回来之前搞定。李大伟说是6位数字密码那么我们可以利用python生成全部的六位数字密码#生成从…

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

关于Valgrind的介绍可以参考&#xff1a;https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过android toolchain如android-ndk-r14b交叉编译Valgrind源码的操作步骤&#xff1a; 1. 从 https://valgrind.org/ 下载最新的版本3.17.0&…

Java状态模式

在状态模式&#xff08;State Pattern&#xff09;中&#xff0c;类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图&#xff1a;允许对象在内部…

Red Hat 5.8 CentOS 6.5 共用 输入法

pick up from http://jingyan.baidu.com/article/20b68a885a3607796cec622c.html

Python3中with用法

Python中的with语句用于用上下文管理器(context manager)定义的方法包装块的执行&#xff0c;它允许将常见的try…except…finally使用模式封装起来以方便重用。 在Python中&#xff0c;在处理非托管资源(unmanaged resources)(如文件流)时使用with关键字。它允许确保你在使用资…

作为计算机专业的你,这些点你命中了哪些?

是不是学计算机的在别人眼里就得会修电脑&#xff1f;是不是编代码的程序员在别人眼里就得喜欢穿格子衫&#xff1f;是不是从事互联网行业的人在别人眼里就喜欢背双肩包出行&#xff1f;1我学计算机就得会修电脑&#xff1f;前两天我在加班的时候&#xff0c;电话突然响起&…