一、绑定本地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(四)的更多相关文章

  1. ORM框架Hibernate (四) 一对一单向、双向关联映射

    简介 在上一篇博客说了一下多对一映射,这里再说一下一对一关联映射,这种例子在生活中很常见,比如一个人的信息和他的身份证是一对一.又如一夫一妻制等等. 记得在Java编程思想上第一句话是“一切皆对象”, ...

  2. JAVA 框架hibernate (三)(数据库更新丢失)

    一.场景: 我们在并发操作数据库同一个字段,比如:name:tom  age:22这条数据.有2个同时进行操作.A操作该数据的name改成admin,B操作这条数据的age改成:35.然后A先把数据更 ...

  3. JAVA框架--hibernate、struts2、spring

    JAVAEE——spring01:介绍.搭建.概念.配置详解.属性注入和应用到项目   JAVAEE——struts2_04:自定义拦截器.struts2标签.登陆功能和校验登陆拦截器的实现   JA ...

  4. java框架之Spring(4)-Spring整合Hibernate和Struts2

    准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...

  5. 【JAVA框架】Hibernate 与Mybatis 区别

    Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介     1.1    Hibernate 框架          Hibernate是一个开放源代码的对象关 ...

  6. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  7. java 三大框架 hibernate部分知识实现增删该查操作

    1.三层架构    表现层 web层(MVC是一个表现层的设计模型)    业务层 service层    持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...

  8. 有可能挑战Java优势的四种技术

    2012-02-22  Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注.但是和所有语言一样,Java将来也会褪色.依据我做的超越Java的研究,一个 ...

  9. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  10. 框架Hibernate笔记系列 基础Session

    标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...

随机推荐

  1. EF数据库优先模式(二)

    接着上一节的内容,建立好EF数据模型(DataFirst)之后,创建一个借口类,将公用的借口放到接口类里面 public interface IObjectLoader<T,TM> {  ...

  2. hadoop学习之yarn资源管理

    一.yarn简介 yarn是在hadoop2.x中才引入的一个新的机制,在hadoop1.x中MapReduce任务需要同时做任务管理和资源分配,那么引入yarn之后,hadoop的资源管理的任务就全 ...

  3. python的变量以及常量介绍

    变量概念: 把程序运行过程中产生的中间值保存在内存. 方便后面使用. 命名规范: 1. 数字, 字母, 下划线组成 2. 不能数字开头, 更不能是纯数字 3. 不能用关键字 4. 不要用中文 5. 要 ...

  4. 去除img默认的边框

    //当img属性src没有值时,会有难看的边框和难看的一个小图 有什么办法去掉呢? <img  src=" " /> //不要这样写 <img   />  ...

  5. CSS编辑元素的浮动

    1.元素浮动: 1)使用 float:left; 这样的格式设置元素的浮动方式,属性值可以是left,right: 2)元素设置为左浮动时,元素将从原区域浮动到浏览器的左侧页面:右浮动时,就会附在右侧 ...

  6. Leaflet.draw 无法编辑multipolygon类型多边形 解决方法

    问题说明 在做面要素的编辑的时候,当对multiploygon类型的面要素进行编辑的时候,出现如下错误: TypeError: Cannot read property 'lat' of null 通 ...

  7. jquery 绑定事件 获取方式 --------------data event 获取

    //绑定事件 bind event $("body").on("click",function(){ console.log("in") } ...

  8. webpack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  9. Python之聚类(KMeans,KMeans++)

    # -*- coding: utf-8 -*- """ Created on Mon Sep 17 16:41:46 2018 @author: zhen "& ...

  10. 使用 D: 盘作为 Windows VM 上的数据驱动器

    如果应用程序需要使用 D 盘存储数据,请按照以下说明使用其他驱动器号作为临时磁盘. 切勿使用临时磁盘来存储需要保存的数据. 如果调整虚拟机大小或停止(解除分配)虚拟机,这可能会触发将虚拟机放置于新虚拟 ...