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,持久化,一对多,多对一的更多相关文章

  1. Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

  2. hibernate中session

    hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果 ...

  3. [转]Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

  4. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  5. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  6. Hibernate中Session与本地线程绑定

    ------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...

  7. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

  8. Hibernate中的HQL语言

    一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...

  9. hibernate中session的线程安全问题

    Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Sessio ...

  10. Hibernate中Session之get和load方法的真正区别

    最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...

随机推荐

  1. codevs 1172 Hankson 的趣味题

    woc....这题考细节处理.要注意代码的逻辑顺序还有不要作死地循环到sqrt+1. #include<iostream> #include<cstdio> #include& ...

  2. 使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结

    一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM.2.浏览器载入angular.js脚本.3.AngularJS等到DOMContentLoaded事件触发.4.A ...

  3. USACO1.4.1 Packing Rectangles

    //毕竟我不是dd牛,USACO的题解也不可能一句话带过的…… 题目链接:http://cerberus.delos.com:790/usacoprob2?a=pWvHFwGsTb2&S=pa ...

  4. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目

    [题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  5. java.lang.Throwable 异常/深入

    有几个现象是需要总结的: -------------------------------------- 在java语言中,错误类的基类是java.lang.Error,异常类的基类是java.lang ...

  6. IOS init initWith 等相关集中

    1.initWithCoder    当一个view从nib初始化的时候,会调用这个函数.  用keyedArchiver序列化一个类的实力,后面用keyedUnArchiver拿回来的时候会调用到 ...

  7. virtualbox虚拟机中mysql远程连接登陆报2003错误的解决方法

    最近在virtualbox中安装了Ubuntu 14,配置了一个mysql server,设置的桥接网络模式.在其他电脑连接的时候,总是报2003错误.开始以为是localhost没有置换为%,运行u ...

  8. 使用DDMS测试安卓手机APP的性能(android)

    安装/配置: 通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的 ...

  9. Face++接口封装

    本节使用doCurlGetRequest函数来封装Face++的接口请求.我们在class文件夹下的faceStub.php文件中实现 一个faceStub类,封装请求Face++的相关接口. 实现代 ...

  10. 分享一个Web弹框类

    using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...