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. 【剑指offer】连续子数组的最大和

    个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...

  2. 依赖注入及AOP简述(二)——工厂和ServiceLocator .

    2.2.    工厂模式 基于手工构建组件的诸多弱点,1995年“大师4人组”(GoF)在其经典著作<DesignPatterns>一书中提出了“工厂模式”,这种模式在一定程度上有效的解决 ...

  3. GCC单独编译host/examples/ tx_waveforms.cpp

    1.编译 须要链接uhd库和boost_program_options库以及boost_thread库: g++ tx_waveforms.cpp -o a -luhd -lboost_program ...

  4. InfluxDB 开源分布式时序、事件和指标数据库

    InfluxDB 是一个开源分布式时序.事件和指标数据库.使用 Go 语言编写,无需外部依赖.其设计目标是实现分布式和水平伸缩扩展. 特点 schemaless(无结构),可以是任意数量的列 Scal ...

  5. EF项目中应用出现问题???

    最近用EF做了个项目发现很多不便利的地方. 具体如下. 1,我是通过edmx 建模,然后通过模型生成数据库. 虽然数据库已经创建成功但是问题来了,我在加字段,和标的时候再次生成时domeo.edmx. ...

  6. 《JavaScript 闯关记》

    为何写作此课程 stone 主要负责基于 Web 的企业内部管理系统的开发,虽然能够熟练地使用 JavaScript,但随着对 JavaScript 的理解越来越深,才发现自己尚未掌握其精髓. 201 ...

  7. C++中socket编程

    原文:http://blog.csdn.net/cuiran/article/details/5854794 Server端 #include <WINSOCK2.H> #include ...

  8. 安装rvm命令行工具

    rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换. https://rvm.io/ 如果你打算学习ruby/rails, rvm是必不可少的工具之一. 这里所有的命令都是再用户 ...

  9. 可以通过Action来判断是什么操作触发了事件

    ObservableCollection<T>当这个集合发生改变后会有相应的事件得到通知请看如下代码: static void Main(string[] args) { var a = ...

  10. 我的DbHelper数据操作类(转)

    其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...