JAVA框架:hibernate(四)
一、绑定本地session
原理:之前connection实现事务一个道理,2种方法:1、变量下传。2、因为servlet是单线程,和本地当前线程绑定。
配置:
1)配置核心配置文件hibernate.cfg
<!--绑定本地session-->
<property name="hibernate.current_session_context_class">thread</property>
2)hibernate本身底层已经帮忙绑定当前线程(threadLocal)通过getCurrentSession 获取session。
工具类:
package jd.com.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class hibernateUtils {
private final static Configuration CONFIURATION;
private final static SessionFactory SESSIONFACTORY;
static {
CONFIURATION=new Configuration().configure();
SESSIONFACTORY=CONFIURATION.buildSessionFactory();
}
public static Session getSession(){
return SESSIONFACTORY.openSession();
}
public static Session getCurrenSession(){
return SESSIONFACTORY.getCurrentSession();
}
}
3)业务层进行事务定义:
package jd.com.service.Custorm; import jd.com.dao.Dao;
import jd.com.hibernatepro.Customer;
import org.hibernate.Session;
import jd.com.dao.hibernateUtils;
import org.hibernate.Transaction;
import org.junit.Test; public class service {
@Test
public void savobj(){
Customer customer =new Customer();
customer.setName("iio");
Customer customer1 =new Customer();
customer1.setName("ooc");
Session session=hibernateUtils.getCurrenSession();
Transaction tr=session.beginTransaction();
try {
Dao dao=new Dao();
dao.saveCustorm(customer);
Integer a=/;
dao.saveCustorm(customer1);
tr.commit();
}catch (Exception ex){
ex.printStackTrace();
tr.rollback();
}
// 不要关闭session 线程结束就自动关闭session。 }
}
dao层执行:
package jd.com.dao; import jd.com.hibernatepro.Customer;
import org.hibernate.Session; public class Dao {
public void saveCustorm(Customer custome){
Session session=hibernateUtils.getCurrenSession();
session.save(custome);
}
}
需要注意的是session不需要释放。当前线程结束就释放session。
简单的条件查询:
**Query查询接口** . 具体的查询代码如下
// 1.查询所有记录
/*Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
System.out.println(list);*/ // 2.条件查询:
/*Query query = session.createQuery("from Customer where name = ?");
query.setString(0, "tom");
List<Customer> list = query.list();
System.out.println(list);*/ // 3.条件查询:
/*Query query = session.createQuery("from Customer where name = :aaa and age = :bbb");
query.setString("aaa", "tom");
query.setInteger("bbb", 38);
List<Customer> list = query.list();
System.out.println(list);*/ ----------
JAVA框架:hibernate(四)的更多相关文章
- ORM框架Hibernate (四) 一对一单向、双向关联映射
简介 在上一篇博客说了一下多对一映射,这里再说一下一对一关联映射,这种例子在生活中很常见,比如一个人的信息和他的身份证是一对一.又如一夫一妻制等等. 记得在Java编程思想上第一句话是“一切皆对象”, ...
- JAVA 框架hibernate (三)(数据库更新丢失)
一.场景: 我们在并发操作数据库同一个字段,比如:name:tom age:22这条数据.有2个同时进行操作.A操作该数据的name改成admin,B操作这条数据的age改成:35.然后A先把数据更 ...
- JAVA框架--hibernate、struts2、spring
JAVAEE——spring01:介绍.搭建.概念.配置详解.属性注入和应用到项目 JAVAEE——struts2_04:自定义拦截器.struts2标签.登陆功能和校验登陆拦截器的实现 JA ...
- java框架之Spring(4)-Spring整合Hibernate和Struts2
准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...
- 【JAVA框架】Hibernate 与Mybatis 区别
Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关 ...
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- java 三大框架 hibernate部分知识实现增删该查操作
1.三层架构 表现层 web层(MVC是一个表现层的设计模型) 业务层 service层 持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...
- 有可能挑战Java优势的四种技术
2012-02-22 Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注.但是和所有语言一样,Java将来也会褪色.依据我做的超越Java的研究,一个 ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
随机推荐
- JS函数机制小结
1.javascript中函数是第一型对象,即与其它对象一样,具有: 1.可以通过字面量创建 2.可以赋值给变量或者属性 3.可以作为参数进行传递 4.可以作为函数结果返回 5.拥有属性和方法 2.函 ...
- SpringMVC—Struts2拦截器学习网址整理
引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...
- Android 常见adb命令
Android 常见adb命令 by:授客 QQ:1033553122 1. 查看所有已链接的设备 命令: adb devices 例: C:\Users\laiyu>adb device ...
- android 点击数字跳转到电话界面
实现方式两种: 1,在xml文件下很简单的实现 只需要在textview属性中加入android:autoLink="phone". <TextView ...
- LeetCode题解之Max Consecutive Ones
1.题目描述 2.问题分析 遍历一次数组,以每个1 为起点向后数,数到0 时比较当前1的个数和最大1 的个数,然后将遍历的起点放到当前0 的后面. 3.代码 int findMaxConsecutiv ...
- STL之容器(containers) 简介
什么是容器? 容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型,c++中的容器主要使用如vector,list (顺序容器) 这些都是已经封装好了. 1.结构(struct): ...
- js-dom-动态创建html标签时,name属性的初始化问题
当我们动态创建可包含Name属性的元素时,不能简单的使用赋值element.name = "..."来添加其Name, 而必须在创建Element时,使用document.crea ...
- svn Please execute the 'Cleanup' command. 问题解决
1由于使用svn 更新文件出错,导致svn中断,然后就一直循环出现 ‘’Please execute the 'Cleanup' command‘’ 问题: 查找网上方案 . 有使用sqlite3 ...
- 快速开发QCombox以及业务样式自定义
这是我在项目实战中的个人总结,写的仓促,有些东西也不一定准确,有些是自己推断的,还希望各位多多指教,多多评论. 关于QCombox如果不需要自定义,其实写UI是很简单的. 创建实例:QComboBox ...
- SAP业务蓝图设计的一些想法
SAP蓝图设计是面向业务流程的,目前国内很多软件公司在做蓝图设计(概要设计)都是面向功能的,而对于用户来说,需要的不是一个个功能点,而是要实现具体的业务.功能点是一个点,而业务流程是一条线.是在梳理业 ...