一、绑定本地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. Java-函数式编程(二)Lambda表达式

    本文首发:Java-函数式编程(二)Lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lamb ...

  2. 理解JVM之Java内存区域

    Java虚拟机运行时数据区分为以下几个部分: 方法区.虚拟机栈.本地方法栈.堆.程序计数器.如下图所示: 一.程序计数器 程序计数器可看作当前线程所执行的字节码行号指示器,字节码解释器工作时就是通过改 ...

  3. 集合框架四(Map)

    Map的主要实现类: --HashMap:Map的主要实现类(掌握) --LinkedHashMap:使用链表维护添加进Map中的顺序,遍历时按添加时的顺序遍历 --TreeMap:按照添加进Map中 ...

  4. 数据库查询字段为null 时,返回0

    oracle select nvl(字段名,0) from 表名; sqlserver select isnull(字段名,0) from 表名; mysql select ifnull(字段名,0) ...

  5. Warning:java:资源1.5已过时,将在未来所有发行版中删除

    idea运行提示错误信息:![](http://luzhiming.top/zb_users/upload/2018/10/201810132314159180803.png)解决办法如下:第一步![ ...

  6. javascript返回上一页的三种写法

    window.history.go(-1); //返回上一页 window.history.back(); //返回上一页不会造成死循环 //如果要强行刷新的话就是:window.history.ba ...

  7. Flutter自定义布局套路

    开始 在Android中我们要实现一个布局需要继承ViewGroup, 重写其中的onLayout和onMeasure方法. 其中onLayout负责给子控件设置布局区域, onMeaseure度量子 ...

  8. Android Application中的Context和Activity中的Context的异同

    一.Context是什么: 1.Context是维持Android程序中各组件能够正常工作的一个核心功能类,我们选中Context类 ,按下快捷键F4,右边就会出现一个Context类的继承结构图啦, ...

  9. ASP.NET Core 依赖注入最佳实践——提示与技巧

    在这篇文章,我将分享一些在ASP.NET Core程序中使用依赖注入的个人经验和建议.这些原则背后的动机如下: 高效地设计服务和它们的依赖. 预防多线程问题. 预防内存泄漏. 预防潜在的BUG. 这篇 ...

  10. python新生类和经典类简单说明

    经典类: #!/usr/bin/env python #*-* coding:utf-8 *-* class A(): def __init__(self): print 'my name is GF ...