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方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...
随机推荐
- codevs 1172 Hankson 的趣味题
woc....这题考细节处理.要注意代码的逻辑顺序还有不要作死地循环到sqrt+1. #include<iostream> #include<cstdio> #include& ...
- 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结
一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM.2.浏览器载入angular.js脚本.3.AngularJS等到DOMContentLoaded事件触发.4.A ...
- USACO1.4.1 Packing Rectangles
//毕竟我不是dd牛,USACO的题解也不可能一句话带过的…… 题目链接:http://cerberus.delos.com:790/usacoprob2?a=pWvHFwGsTb2&S=pa ...
- 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目
[题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- java.lang.Throwable 异常/深入
有几个现象是需要总结的: -------------------------------------- 在java语言中,错误类的基类是java.lang.Error,异常类的基类是java.lang ...
- IOS init initWith 等相关集中
1.initWithCoder 当一个view从nib初始化的时候,会调用这个函数. 用keyedArchiver序列化一个类的实力,后面用keyedUnArchiver拿回来的时候会调用到 ...
- virtualbox虚拟机中mysql远程连接登陆报2003错误的解决方法
最近在virtualbox中安装了Ubuntu 14,配置了一个mysql server,设置的桥接网络模式.在其他电脑连接的时候,总是报2003错误.开始以为是localhost没有置换为%,运行u ...
- 使用DDMS测试安卓手机APP的性能(android)
安装/配置: 通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的 ...
- Face++接口封装
本节使用doCurlGetRequest函数来封装Face++的接口请求.我们在class文件夹下的faceStub.php文件中实现 一个faceStub类,封装请求Face++的相关接口. 实现代 ...
- 分享一个Web弹框类
using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...