Spring笔记⑤--整合hibernate代码测试
String整合hibernate代码测试
在上节生成的表中插入数据:
注意:使用myeclipse2014生成的整合项目可能存在问题需要我们自己导入。
第一步 我们写dao接口
package com.ssh.spring_hibernate.dao;
public //根据书号获取数的单价 public
//更新书的库存,使书号对应的库存-1 public
//更新用户的账户余额:使username的balance-price public } |
写好其实现类
package com.ssh.spring_hibernate.dao;
import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class BookShopDaoImpl implements BookShopDao { /** * 怎么用hibernate * 从SessionFactory中拿到跟当前线程绑定的Session */
@Autowired private SessionFactory sessionFactory;
public Session getSession(){ return sessionFactory.getCurrentSession(); } @Override public int findBookPriceByIsbn(String isbn) { String hql="select b.price from Book b where b.isbn=?"; Query q=getSession().createQuery(hql).setString(0, isbn); return (Integer) q.uniqueResult(); }
@Override public void updataBookStock(String isbn) { //验证书的库存是否足够 String hql2="select b.stock from Book b where b.isbn=?"; int stock=(Integer) getSession().createQuery(hql2).setString(0, isbn).uniqueResult(); if (stock==0) { System.out.println("库存不足!"); } String hql="update Book b set b.stock=b.stock-1 where b.isbn=?"; getSession().createQuery(hql).setString(0, isbn).executeUpdate(); }
@Override public void updateUserAccount(String username, int price) { //验证余额是否足够 String hql2="select a.balance from Account a where a.username=?"; int balance=(Integer) getSession().createQuery(hql2).setString(0, username).uniqueResult(); System.out.println(balance); if (balance<price) { System.out.println("余额不足"); } int result=balance-price; String hql="update Account a set a.balance=? where a.username=?"; getSession().createQuery(hql).setInteger(0, result).setString(1, username).executeUpdate(); System.out.println("余额为"+result); }
} |
注意:需要在spring的配置文件中添加自动扫描的路径
<!-- 设置自动扫描的包--> <context:component-scan |
第二步写好service
public
interface BookShopService {
public
void
purchase(String username,String isbn);
}
public
interface
Cashier {
public
void checkout(String username,List<String>isbn);
}
其实现类
package com.ssh.spring_hibernate.service;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import com.ssh.spring_hibernate.dao.BookShopDao;
@Service public class BookShopServiceImpl implements BookShopService{ @Autowired private BookShopDao bookShopDao;
@Override public void purchase(String username, String isbn) { int price =bookShopDao.findBookPriceByIsbn(isbn); bookShopDao.updataBookStock(isbn); bookShopDao.updateUserAccount(username, price); }
} |
package com.ssh.spring_hibernate.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
@Service public @Autowired private BookShopService bookShopService;
@Override public for (String is : isbn) { bookShopService.purchase(username, is); }
}
} |
第三步写我们的测试类
public
private ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); private BookShopService bookShopService=null; { bookShopService=ctx.getBean(BookShopService.class); }
public DataSource d=ctx.getBean(DataSource.class); System.out.println(d.getConnection()); }
public bookShopService.purchase("aa", "1002"); } public new Go().testBookShopService(); } } |
控制台打印
Hibernate: select book0_.PRICE as col_0_0_ from SH_BOOK book0_ where book0_.ISBN=? Hibernate: select book0_.STOCK as col_0_0_ from SH_BOOK book0_ where book0_.ISBN=? Hibernate: update SH_BOOK set STOCK=STOCK-1 where ISBN=? Hibernate: select account0_.BALANCE as col_0_0_ from SH_ACCOUNT account0_ where account0_.USER_NAME=? Hibernate: update SH_ACCOUNT set BALANCE=? where USER_NAME=? |
Spring Hibernate 事务的流程
- 在方法之前
- 获取Session
- 把Session和当前线程绑定,这样就可以在Dao中使用SessionFactory的getCurrentSession()方法来获取Session了
- 开启事务
- 若方法正常结束,即没有出现异常,则
- 提交事务
- 使和当前线程绑定的Session解除绑定
- 关闭Session
3若方法出现异常,则
① 回滚事务
- 使和当前线程绑定的Session解除绑定
- 关闭Session
Spring笔记⑤--整合hibernate代码测试的更多相关文章
- 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明
摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFac ...
- mybatis与spring的整合(代码实现)
mybatis与spring的整合(代码实现) 需要jar包: mybatis核心包:依赖包:log4j包:spring croe;beans;tx;aop;aspects;context;expre ...
- Spring Boot 整合Hibernate Validator
Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...
- spring之整合Hibernate
spring整合Hibernate整合什么? 1.让IOC容器来管理Hibernate的SessionFactory. 2.让Hibernate使用上spring的声明式事务. 整合步骤: 1.加入H ...
- Spring Data-Spring整合Hibernate基于JPA规范
JPA:由 Sun 公司提供了一对对于持久层操作的标准(接口+文档) Hibernate:是 Gavin King 开发的一套对于持久层操作的自动的 ORM 框架. Hibernate JPA:是在 ...
- Java框架:spring框架整合hibernate框架的xml配置(使用注解的方式)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- spring框架整合hibernate框架简单操作数据库
1.配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:/ ...
- Spring笔记——配置Hibernate框架事务
原文:http://www.iteye.com/topic/1123347 Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这 ...
- 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
1.导入jar watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400 ...
随机推荐
- 沟通修炼 I型沟通->U型沟通
沟通的目的 来源:邀请你看<01课 沟通管理:学会U型沟通,沟通效率翻倍>https://url.cn/51YaHrq?sf=uri 案例: 女友太困,不想早起去上班 你的回答? 正确做法 ...
- swoft orm中的坑(针对实体类的属性名称和数据库字段不相等)
最近在用swoft的orm,发现了一些问题: 首先看下实体类的定义 它的属性名称和所映射的数据库字段名不一致,这个就会导致蛋疼的问题,首先,在我们使用orm的时候,应该使用哪个字段? 我直接说结论,在 ...
- C语言常用知识点
C语言条件预处理命令 /* 格式: #ifdef 标识符 程序1 #else 程序2 #endif 标识符已经定义时,程序段1才参加编译 应用:如调试版本,发行版本,便于调试 */ #include ...
- ISE14.7使用教程(一个完整工程的建立)
FPGA公司主要是两个Xilinx和Altera(现intel PSG),我们目前用的ISE是Xilinx的开发套件,现在ISE更新到14.7已经不更新了,换成了另一款开发套件Vivado,也是Xil ...
- docker save和docker export的区别
docker save保存的是镜像(image),docker export保存的是容器(container): docker load用来载入镜像包,docker import用来载入容器包,但两者 ...
- 20145202马超 2016-2017-2 《Java程序设计》第9周学习总结
20145202马超 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交 ...
- JavaWeb总结(九)
过滤器 - 一个中间组件,用于拦截源数据和目的数据之间的消息 - 过滤二者之间传递的数据 Web应用上的过滤器 -驻留在Web服务器上的Web组件 -过滤从客户端传递到服务器端的请求和响应 单个过滤器 ...
- PostgreSQL集群方案相关索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的集群方案相关文摘和文章的链接: pgpool-II: 1 pgpool-I ...
- 【轮子狂魔】WeChatAPI 开源系统架构详解
如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是接收微信服务器请求: WeChatAP ...
- netty+proto使用简要记录
1. maven环境配置protobuf 2.生成.proto文件 3.将.proto转为java文件 打开电脑的cmd,进入.proto所在文件位置,输入命令:protoc.exe --java_o ...