package com.hanqi.dao;

import static org.junit.Assert.*;
import java.util.*;
import org.hibernate.service.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.*;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.*; public class TestNews
{ //构建会话工厂对象 较为消耗资源
SessionFactory sf = null; //构建会话对象
Session se = null; //开启事务
Transaction tr = null; @Before
public void init()
{
System.out.println("这是测试之前的代码"); //第一步:构建一个配置类
Configuration conf = new Configuration().configure(); //第二步:构建注册器类
ServiceRegistry serv = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build(); //构建会话工厂对象 较为消耗资源
sf = conf.buildSessionFactory(serv); //构建会话对象
se = sf.openSession(); //开启事务
tr = se.beginTransaction();
} //HQL查询
@Test
public void testquery()
{
// 2 - 1 查询
// String hql = "select n.id,n.title from News n order by n.id desc"; //News 是一个类 // 2 - 2 查询
// String hql = "select count(n.id),min(n.id),max(n.id) from News n"; // 2 - 3 group by 分组
// String hql = "select n.title,count(n.title) from News n group by n.title"; // 2 - 4 group by having 分组
// String hql = "select n.title,count(n.title) from News n group by n.title having count(n.title) > 4"; // 2 - N 输出方式
/* List<Object[]> l = query.list(); for(Object[] news : l)
{
for(Object o : news)
{
System.out.println( o + " ");
} System.out.println();
}
*/
} //HQL查询
@Test
public void testQuery()
{
// 1 - 1
//String hql = "from News n where n.id = :ID and n.title like :Title"; // 1 - 2
//String hql = "from News n where n.id = ? and n.title like ?"; //降序排序
// 1 - 3
// String hql = "from News n order by n.id desc"; /*
// 1 - 1
List<News> l = query.setInteger("ID", 23) //参数名只要能够与语句中的参数名匹配起来就可以
.setString("Title", "%标题%")
.list();
*/ /*
// 1 - 2
List<News> l = query.setInteger(0, 23)
.setString(1, "%标题%")
.list();
*/
// 1 - 3
// List<News> l = query.List(); //遍历输出查询 // 1 - N 均使用下列方式遍历
/*
List<News> l = query.list(); for(News news : l)
{
System.out.println(news);
}
*/ } //HQL分页查询
@Test
public void testQueryPage()
{ // 1 - 4
String hql = "from News n"; //生成Query对象
Query query = se.createQuery(hql); //分页
//页数
int pagenum = 3;
//每页最大行数 int rows = 5; List<News> l = query.setFirstResult((pagenum - 1) * rows) //起始行的编号
.setMaxResults(rows) //每页显示最大行数
.list(); System.out.println("结果集行数 = " + l.size() ); for(News news : l)
{
System.out.println(news);
} } //一级缓存
@Test
public void testYJHC()
{ News news1 = (News)se.get(News.class, 23); System.out.println(news1); News news2 = (News)se.get(News.class, 23); System.out.println(news2); } @Test
public void test()
{
System.out.println("这是测试"); //执行操作 //数据查询
//查询,转成,持久化状态
News news2 = (News)se.get(News.class, 22); // News 对象名 = (News(强制转化为的类型))会话对象.get.(实体类类型,主键值) System.out.println(news2); } @Test
public void testGet()
{
//执行操作 //执行数据插入
News news = new News();//转成,瞬时状态(临时状态) news.setTitle("标题");
news.setContent("内容");
news.setCreatedate(new Date());
news.setAuthor("作者"); //保存,瞬时状态转成持久化状态
se.save(news); //将实体类传进去 news.setTitle("新标题栏3"); //将对应数据进行修改 //刷新
se.flush(); //主动执行一次刷新 //提交事务
tr.commit(); //关闭会话
se.close(); //构建会话对象
se = sf.openSession(); //开始事务
tr = se.beginTransaction(); // news.setTitle("改变的标题"); // news.setId(1); //托管状态 se.saveOrUpdate(news); //会自动判断插入与修改 // se.update(news); //将托管状态转为持久化状态 news.setContent("新的内容1"); //删除
News news3 = (News)se.get(News.class, 1); //(News.class, 要删除的id号) se.delete(news3); } //延迟加载
@Test
public void testLoad()
{ News news4 = (News)se.load(News.class, 1);
System.out.println("id = " + news4.getId());
System.out.println("title = " + news4.getTitle()); } @After
public void destroy()
{
System.out.println("测试之后执行"); //提交事务
tr.commit(); //关闭会话
se.close(); //关闭会话工厂
sf.close();
}
}

20160115--Hibernate的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. uva 10635 - Prince and Princess(LCS)

    题目连接:10635 - Prince and Princess 题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的. 解题思路: ...

  2. 简易实现 TextView单行文本水平触摸滑动效果

    为了方便查看,已使用markdown编辑形成新博文. 本文Mardown地址 近期做应用的时候实用到TextView单行长文本,当文本内容过长时候又想实现触摸水平滑动效果. 网上找了非常多,都没有看到 ...

  3. querySelectorAll

    <!DOCTYPE html><html><body> <div id="query">第一个</div> <di ...

  4. CalendarHelper日期计算工具,各种日期的获取和计算

    今天分享一个日期获取和计算的工具类,这个最初是用在项目中获取每周每月日期用的. <Attention> 之后逛帖子的时候发现了这个专门处理日期的库,java上也有,android上还为了避 ...

  5. Tera Term——访问linux的ssh工具

    个人感觉他是一款免费的并且比较好用的ssh工具,下载地址: http://logmett.com/index.php?/products/teraterm.html 下载之后一路下一步就可以了.可以选 ...

  6. 跳转APP(app之间互相通信)

    摘要 步骤: 1,添加URL Types项 2,配置URL Scheme 3,其他应用的跳转 4,参数的接收   开发IOS项目的时候,有可能会遇到两个APP应用相互调用的需求,比如说:支付宝支付.. ...

  7. linux 链接控制

    如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vim /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ip ...

  8. JS参数使用带参数的方法

    大家都知道,在JS之中,一个变量的生命周期不是以大括号为界限的,所以即使是使用在循环或判断中的变量,外部也可以使用.可如果我们在循环或变量中使用了方法,而且这个方法使用了循环中的变量,那么后面的代码是 ...

  9. git管理修改

    为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改 ...

  10. file_get_contents()的另一种使用方法

    今天在网上看到一篇挺不错的文章,拿过来保存学习一下.本文源地址为:http://www.kuitao8.com/20140727/2867.shtml $data = file_get_content ...