hibernate中session,HQL,持久化,一对多,多对一
package com.hanqi.test;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.hanqi.entity.Course;
import com.hanqi.entity.Teacher;
import com.hanqi.entity.User;
public class Test01 {
private SessionFactory sf=null;
private Session se=null;
private Transaction ts;
//在测试用例执行之前自动执行的方法
//一般用来初始化的公用对象
//前置方法
@Before
public void init()
{
//1获取配置文件
Configuration cfg=new Configuration().configure();
//2注册配置
ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
//3获取SessionFactory(相当于JDBC)
sf =cfg.buildSessionFactory(sr);
System.out.println(sf);
//4产生Session
se=sf.openSession();
//5启动事务
ts=se.beginTransaction();
}
//后置方法
//一般用来释放资源
@After
public void destroy()
{
//7提交事务
ts.commit();
//8释放资源
se.close();
sf.close();
}
//测试Hibernate连接数据库
@Test
public void test()
{
//1获取配置文件
Configuration cfg=new Configuration().configure();
//2注册配置
ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
//3获取SessionFactory(相当于JDBC)
SessionFactory sf =cfg.buildSessionFactory(sr);
System.out.println(sf);
//4产生Session
Session se=sf.openSession();
//5启动事务
ts=se.beginTransaction();
//6操作事务
//添加数据
//实例化的新对象处于临时状态
User u1=new User();
u1.setBirthday(new Date());
u1.setMoney(2000);
u1.setPassword("123456");
u1.setUserName("测试一");
//保存数据
//通过save方法把对象从临时状态转成持久化状态
se.save(u1);
System.out.println(u1);
}
//测试查询方法
@Test
public void test1()
{
//查询数据
//提供两个参数:
//1需要返回哪一个持久化类的实例
//2实例的标识(数据的主键值)
//通过Session的get方法获得的对象处于持久化状态
User u2=(User)se.get(User.class,3);
u2.setUserName("修改的");
System.out.println(u2);
//删除
se.delete(u2);//使持久化对象进入删除状态
}
@Test
public void test2()
{
User u1=(User)se.get(User.class, 4);
System.out.println(u1);
User u2=(User)se.get(User.class, 4);//立即加载数据
System.out.println(u2);
}
@Test
public void test3()
{
User u1=(User)se.load(User.class, 4);//延时加载 懒加载
System.out.println("dsad");
System.out.println(u1);//当使用时才加载
}
//测试游离状态
@Test
public void test4()
{
//得到持久化状态的对象
User u1=(User)se.get(User.class,4);
System.out.println("u1="+u1);
//关闭session
se.close();
//使u1进入游离状态
u1.setUserName("测试游离");
//把OID置成null
u1.setUserID(null);
//重新创建session
se=sf.openSession();
//重新开启事务
ts=se.beginTransaction();
se.saveOrUpdate(u1);
System.out.println(u1);
}
//测试HQL
@Test
public void test5()
{
//使用HQL
//1创建Query对象
Query qu=se.createQuery("from User where userID >? and "
+ "userName like '测试%' order by userID");
//设置占位符
qu.setInteger(0, 10);
//执行查询
List<User> lu=qu.list();
//方法链调用
//lu=se.createQuery("from User where userID >?").setInteger(0, 10).list();
for(User e:lu)
{
System.out.println(e);
}
}
//测试分页
@Test
public void test6()
{
//设置开始行号:页码=2
//(页码-1)*每页行数
List<User> lu=se.createQuery("from User order by userID")
.setMaxResults(5)
.setFirstResult(5)
.list();
for(User e:lu)
{
System.out.println(e);
}
}
//分组查询
@Test
public void test7()
{
List<Object>lo=se.createQuery("select userName from User group by userName").list();
for(Object o:lo)
{
System.out.println(o);
}
}
//测试投影查询
@Test
public void test8()
{
List<Object[]>lo=se.createQuery("select userID,userName from User").list();
for(Object[] o:lo)
{
System.out.println(o[0]+" "+o[1]);
}
System.out.println("dasdasadfa");
//返回持久化对象的集合
List<User> lu=se.createQuery("select new User(userID,userName) from User").list();
for(User u:lu)
{
System.out.println(u);
}
}
//测试多对一
@Test
public void test10()
{
Course cs=(Course)se.get(Course.class,"9-888");
System.out.println(cs);
}
//测试一对多
@Test
public void test11()
{
Teacher tc=(Teacher)se.get(Teacher.class,"831");
System.out.println(tc);
}
}
hibernate中session,HQL,持久化,一对多,多对一的更多相关文章
- Hibernate中Session的get和load
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...
- hibernate中session
hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果 ...
- [转]Hibernate中Session的get和load
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...
- hibernate中session的获取使用以及其他注意事项
hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- Hibernate中Session与本地线程绑定
------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- Hibernate中的HQL语言
一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...
- hibernate中session的线程安全问题
Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Sessio ...
- Hibernate中Session之get和load方法的真正区别
最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...
随机推荐
- Grunt + Bower—前端构建利器(转)
目前比较流行的WEB开发的趋势是前后端分离.前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的Web Service服务,通过JSON格式进行 ...
- Java [Leetcode 189]Rotate Array
题目描述: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the ...
- 用C/C++开发基于VLC SDK的视频播放器
在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安 ...
- [Papers]NSE, $\p_3u$, multiplier spaces [Guo-Gala, ANAP, 2013]
$$\bex \p_3\bbu\in L^\frac{2}{1-r}(0,T;\dot X_r(\bbR^3)),\quad 0\leq r\leq 1. \eex$$
- webservice-WebService试题
ylbtech-doc:webservice-WebService试题 WebService试题 1.A,返回顶部 001.{WebService题目}下列是Web服务体系结构中的角色的是()(选择3 ...
- 【LeetCode 209】Minimum Size Subarray Sum
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
- vc编译器 msvcr.dll、msvcp.dll的含义和相关错误的处理
转自:http://blog.csdn.net/sptoor/article/details/6203376 很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Library) 连结, ...
- Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain
这周看了一篇Ryutarou Ohbuchi网格水印的论文,论文中提出在网格的频率域中加入水印.对于网格而言,没有如图像中的DCT等转换到频率域的变换,因此用什么量来模拟传统频率域中的系数,是很关键的 ...
- git 记录
在官网有详细的教程http://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5 查看分支和日志的两个工具:gitk 和 tig ,两个都有 --all 参数,可以查看所有 ...
- struts2实现文件上传
Struts2中实现简单的文件上传功能: 第一步:将如下文件引入到WEB_INF/lib目录下面,对应的jar文件可自行下载 第二步:在包test.struts2下建立类UploadFile pack ...