一、分页查询

  使用Criteria进行分页查询,无论是使用Oracle,MySQL,NoSQL,DB2,分页查询的代码写法都相同。

分页查询代码示例:

package com.demo.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions; import com.demo.pojo.Product; public class TestHibernate{
public static void main(String[] args){
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction(); String name="demo";
Criteria c=session.createCriteria(Produt.class);
c.add(Restriction.like("name","%"+name+"%"));
c.setFirstResult(2);//从第二条数据开始
c.setMaxResults(5);//一共查询5条数据 List<Product> list=c.list();
for(Product p:list){
System.out.println(p.getName()+"\t");
} session.getTransaction().commit();
session.close();
sf.close();
}
}

二、Hibernate获取session的两种方式

1、openSession和getCurrentSession

区别:

1.1、获取的是否是同一个session对象

openSession:每次会得到新的Session对象

getCurrentSession:在同一个线程中,每次都获取相同的Session对象。在不同的线程中,获取的是不同的Session对象。

1.2、事务提交的必要性

openSession:只有在增,删,改的时候需要提交事务,查询不要提交事务

getCurrentSession:所有操作必须放在事务中进行,并且提交事务后,session会自动关闭。

===》在同一个线程中的代码如下:

package com.demo.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class TestHibernate{
public static void main(String[] args){
SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session session1=sf.openSession();
Session session2=sf.openSession();
System.out.println(session1==session2);//flase
session1.close();
session2.close();
Session session3=sf.getCurrentSession();
Session session4=sf.getCurrentSession();
System.out.println(session3==session4);//true
sessjon3.close();
//session4.close();只能关闭一次,不能再次进行关闭
sf.close();
}
}

===》在不同的线程中:

package com.demo.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class TestHibernate{
public static void main(String[] args){
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session1;
Session session2; Thread thread1=new Thread(){
public void run(){
session1=sf.getCurrentSession();
}
};
thread1.start(); Thread thread2=new Thread(){
public void run(){
session2=sf.getCurrentSession();
}
};
thread2.start();
thread1.join();
thread2.join(); System.out.println(session1==session2);
}
}

五、持久层框架(Hibernate)的更多相关文章

  1. 菜鸟学习Hibernate——持久层框架

    一.Java操作数据库的阶段. Java对数据库进行操作经历了三个阶段. 1.1操作JDBC阶段 这个阶段就是利用JDBC类来操作数据库.这个阶段出现了两个问题: 代码过度重复:在每一次数据库操作的是 ...

  2. Hibernate数据库持久层框架

    Hibernate是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hib ...

  3. Hibernate: 数据持久层框架

    Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hi ...

  4. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  5. MyBatis持久层框架学习之01 MyBatis的起源和发展

    一.MyBatis的简介  MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...

  6. MyBatis持久层框架使用总结

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...

  7. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  8. Java数据持久层框架 MyBatis之背景知识三

    摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...

  9. Java数据持久层框架 MyBatis之背景知识二

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  10. MyBatis持久层框架使用总结 转载

    MyBatis持久层框架使用总结   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...

随机推荐

  1. Lintcode415-Valid Palindrome-Medium

    Given a string, determine if it is a palindrome, considering only alphanumeric(字母和数字) characters and ...

  2. BZOJ 1061: [Noi2008]志愿者招募(线性规划与网络流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 题意: 思路: 直接放上大神的建模过程!!!(https://www.byvoid.com/z ...

  3. POJ 3415 Common Substrings(长度不小于K的公共子串的个数+后缀数组+height数组分组思想+单调栈)

    http://poj.org/problem?id=3415 题意:求长度不小于K的公共子串的个数. 思路:好题!!!拉丁字母让我Wa了好久!!单调栈又让我理解了好久!!太弱啊!! 最简单的就是暴力枚 ...

  4. P3110 [USACO14DEC]驮运Piggy Back

    传送门 做过次短路后,再来做这题感觉轻松不少. 这题看着就像最短路模板题. 思路: 虽说题目看起来比较水,但是码起来还是有点难度的.(对我这个蒟蒻来说) 这道题,跟"路障"一题差不 ...

  5. 使用JS与CSS3的翻转实现3D翻牌效果

    之前我们有讨论过使用CSS3如何实现网页水平翻转的效果,而这次我们介绍的是翻转效果更深一层的应用——3D翻牌效果. 这里我们需要使用flip中轴翻转实现,又因为是3D效果,如果希望呈现一定的3D视角, ...

  6. Javascript中点击(click)事件的3种写法

    方法一 <!DOCTYPE html> <html> <head> <title>Javascript中点击事件方法一</title> &l ...

  7. ztree异步加载树节点

    参考文档:https://www.cnblogs.com/tenWood/p/8620708.html ztree api地址:http://www.treejs.cn/v3/api.php 说明:j ...

  8. R 的内部机制

    在前面的章节中,我们已经学习了 R 语言的基础功能,并且了解了如何运用向量.矩阵.列表和数据框表示不同形式的数据,以及用内置函数解决简单的问题.但是仅仅了解这些功能并不能解决所有问题.现实中的数据分析 ...

  9. web自动化测试与Appuim自动化测试对比

    web自动化测试-打开浏览器: from selenium import webdriver driver = webdriver.Chrome() #定义chrome驱动 driver.maximi ...

  10. java——File

    注意事项: 1:创建File对象需要导包, import java.io.File 2:File对象没有无参数构造.创建对象需要传参. 3:File类的对象,既可以代表文件也可以代表文件夹.   构造 ...