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. bzoj1863: [Zjoi2006]trouble 皇帝的烦恼

    白书原题.l边界又设错啦.一般都是错这里吧.注意为什么这里不能是l=0.(只是为了判断第一个和最后一个 #include<cstdio> #include<cstring> # ...

  2. Android 怎样使用API

    本文针对Android开发如何使用API文档进行一些经验分享. 1.为什么需要掌握API的使用. 也许你需要完成一个功能时很多时候你在网上google一番,因为很可能找到有用的代码片段,甚至不用关心具 ...

  3. UVA 11478 Halum(用bellman-ford解差分约束)

    对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...

  4. 2013.11.15 初学ant构建

    该做的事情都差不多做完了,今天开始用ant构建,所以学了下ant,其实要不是因为ubuntu时不时的抽风我应该早就可以开始构建了,但重写的时候也想清楚了一些逻辑,优化了一些地方.下面是我这辈子写的第一 ...

  5. JazzyViewPager开源项目的简析及使用

    JazzyViewPager是一个重写的ViewPager,能是ViewPager滑动起来更加的炫酷. 开源地址:https://github.com/jfeinstein10/JazzyViewPa ...

  6. MySQL row模式binlog复制原理

    http://www.360doc.com/content/14/1107/14/12904276_423333021.shtml

  7. linux下查看硬件配置的相关命令

    from:http://www.jakee.cn/index.php/archives/501.html 常用命令整理如下:查看主板的序列号: dmidecode | grep -i ’serial ...

  8. 【LeetCode 208】Implement Trie (Prefix Tree)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  9. 动态执行linq 语句 NLinq

    using Evaluant.NLinq.Memory;using System.Collections.Generic;using Evaluant.NLinq;using System.Colle ...

  10. MVC & MVVM

    什么是MVC,什么是MVVM? 面向过程 --> 面向对象 --> MVC --> MV* 面向过程: 开发人员按照需求逻辑顺序开发代码逻辑,主要思维模式在于如何实现.先细节,后整体 ...