五、持久层框架(Hibernate)
一、分页查询
使用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)的更多相关文章
- 菜鸟学习Hibernate——持久层框架
一.Java操作数据库的阶段. Java对数据库进行操作经历了三个阶段. 1.1操作JDBC阶段 这个阶段就是利用JDBC类来操作数据库.这个阶段出现了两个问题: 代码过度重复:在每一次数据库操作的是 ...
- Hibernate数据库持久层框架
Hibernate是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hib ...
- Hibernate: 数据持久层框架
Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hi ...
- .NET平台下,关于数据持久层框架
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- MyBatis持久层框架学习之01 MyBatis的起源和发展
一.MyBatis的简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...
- MyBatis持久层框架使用总结
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...
- 持久层框架之MyBatis
1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- Java数据持久层框架 MyBatis之背景知识三
摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...
- Java数据持久层框架 MyBatis之背景知识二
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- MyBatis持久层框架使用总结 转载
MyBatis持久层框架使用总结 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...
随机推荐
- 20165306 预备作业3 Linux安装及学习
查看了许多教程,VirtualBox和Ubuntu已安装完成.以下为学习Linux基础入门课程的实验报告.实验截图.尚未解决的问题及体会. 实验三 用户及文件权限管理 一.Linux用户管理 (一)查 ...
- HDU 4496 D-City(逆向并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=4496 题意: 给出n个顶点m条边的图,每次选择一条边删去,求每次删边后的连通块个数. 思路: 离线处理删边,从后 ...
- Oracle spatial、openlayers、geoserver开发地理信息系统总结
感谢开源,使用OpenLayers+Geoserver的地理信息系统开发很简单,完全可以套用开发MIS系统的经验,我这里总结为三个步骤: 1.数据准备 2.数据发布 3.数据展现 我将按照这个思路来介 ...
- layer 弹出层 回调函数调用 弹出层页面 函数
1.项目中用到layer 弹出层,定义一个公用的窗口,问题来了窗口弹出来了,如何保存页面上的数据呢?疯狂百度之后,有了结果,赶紧记下. 2.自己定义的公共页面方法: layuiWindow: func ...
- Perl中命令行参数以及打开管道文件
打开管道文件 Linux提供了管道机制,可以方便应用程序之间的数据传递.在Perl中,扣开和使用管道可采用如下形式的open函数: open(Filehandle,”丨 CMD”); 其中 ...
- 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创
小蚂蚁说: 11月8日,在第五届世界互联网大会-<人工智能:融合发展新机遇>论坛上,蚂蚁金服副总裁.首席数据科学家漆远认为AI具有控制风险.降本增效和提升用户体验三大作用. 11月8日,第 ...
- 独家 | 蚂蚁金服TRaaS技术风险防控平台解密
小蚂蚁说: 在金融行业,风险防控能力的重要性不言而喻.而蚂蚁金服可实现高达99.999%的异地多活容灾,千亿级资金秒级实时核对“账.证.实”等能力也让业界有目共睹. 今年位于杭州的蚂蚁金服ATEC科技 ...
- iterrows(), iteritems(), itertuples()对dataframe进行遍历
iterrows(): 将DataFrame迭代为(insex, Series)对. itertuples(): 将DataFrame迭代为元祖. iteritems(): 将DataFrame迭 ...
- VS2010.STL::list的一个bug
1.ParameterAnswer_Parse(...) 下 FlistParameterOffset.clear(); 出错(list<DWORD>.clear()) (https:// ...
- openModelica调试
1打印信息 Modelica.Utilities.Streams.print(“messge”);