package com.hanqi.test;

import java.util.Date;
import java.util.List; 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.User; public class Test01 { private Session se=null;
private SessionFactory sf=null;
private Transaction ts=null;
//定义特殊方法
//在测试用例方法被执行之前自动执行的方法
//一般用来初始化公用的对象
//前置方法
@Before
public void init()
{
//1获取配置文件
Configuration cfg=new Configuration().configure();
//2注册配置
ServiceRegistry sr=new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
//3获取SessionFactory (相当于jdbc的连接connection)
sf=cfg.buildSessionFactory(sr);
System.out.println(sf); //4产生Session 保存 跟jsp session没关系 叫会话而已 真正干活的
se=sf.openSession(); //5启动事务
ts=se.beginTransaction();
} //后置方法
//一般用来释放资源
@After
public void destory()
{
//7提交事务
ts.commit();//提交事务,不然没有真正的放到数据库 在这里执行了insert语句才写进数据库 //8释放资源
se.close();
sf.close();
} //测试Hibernate连接 @Test
public void test() { //6操作数据库
//添加数据 //实例化新对象,处于临时状态
User u1=new User();
u1.setBirthday(new Date());//创建当地时间
u1.setMoney();
u1.setPassword("");
u1.setUserName("测试1");
//u1.setUserID(2);//自然主键 //保存数据
//通过save方法把对象从临时状态转成持久化状态
se.save(u1);//不用操心insert语句,但不在这执行语句,也会有主键,hibernate自动生成
System.out.println(u1); } //测试查询
@Test
public void test1()
{
//查询数据 查一个
//提供2个参数
//需要返回哪一个持久化类的实例
//实例的标识(数据的主键值)
//通过session的get方法获得的对象处于持久化状态
User u2=(User)se.get(User.class,);//User类 主键是3
System.out.println(u2); //修改数据
User u3=(User)se.get(User.class,);//User类 主键是3
u3.setUserName("修改");
System.out.println(u3); //删除
//se.delete(u2);//使持久化对象进入删除状态 } @Test
public void test2()
{
User u1=(User)se.get(User.class,);//立即加载数据
System.out.println("get后");
System.out.println("u1="+u1);
User u2=(User)se.get(User.class,);
System.out.println("u2="+u2);
} public void test3()
{
User u1=(User)se.load(User.class, );//延时加载数据
System.out.println("load后");
System.out.println("U1="+u1);//当要使用时才能加载
} //测试游离状态
@Test
public void test4()
{
//得到持久化状态的对象
User u1=(User)se.get(User.class, );
System.out.println("u1="+u1);
se.close();//关闭游离状态 //使u1进入游离状态
u1.setUserName("测试游离456");
//把OID置成null
u1.setUserID(null);//把实体类的类型改为Integer
System.out.println("重新创建Session和事务..."); //重新创建Session,再使session回来
se=sf.openSession();
//重新开启事务 事务se.close()之前已经关了
ts=se.beginTransaction(); se.saveOrUpdate(u1);//自动判断是save还是update 为空是添加,有的话修改
} //测试HQL
@SuppressWarnings("unchecked")
@Test
public void test5()//Ouery是个查询类,要创建
{ //使用HQL 这是面向对象的,一定要注意大小写
//创建Query对象
// Query qu=se.createQuery("from User u where u.userID >? and u.userName=:uname order by userID");
//user是类名,写类名,针对实体类的 属性 构造方法按规则减少麻烦 //设置占位符
// qu.setInteger(0,20);//?的之前sql是从1开始,而这里是从0开始 //按参数名方式设置
// qu.setString("uname","测试1"); //执行查询
List<User> lu;//=qu.list();//得到结果集 //方法链调用
//都返回Query qu来取得结果集 前面也是不用写
lu=se.createQuery("from User where userID>?")
.setInteger(,)//setInteger结果有返回值,返回它自己
.list(); for(User u:lu)
{
System.out.println(u);
}
} //Query qu=se.createQuery("from User where u.userID <100 and username like '测试1' order by userID desc");
//Query qu=se.createQuery("from User where userID >100 order by userID");
//java8 lu=上面的,加上.scream().formatch() @Test
@SuppressWarnings("unchecked")
public void test6()
{
List<User> lu=se.createQuery("from User order by userID")
.setMaxResults()//默认从0行开始,不用写第几行开始
.list();
for(User u:lu)
{
System.out.println(u);
}
} @Test
@SuppressWarnings("unchecked")
public void test66()
{
//设置开始行号 :页码=2
//开始行数=(页码减一 )*每页行数
List<User> lu=se.createQuery("from User order by userID")
.setMaxResults()//默认从0行开始,不用写第几行开始
.setFirstResult()//(2-1)*5
.list();
for(User u:lu)
{
System.out.println(u);
}
} @SuppressWarnings("unchecked")
@Test
public void test7()
{
//分组查询 单列
//因为group by在数据库中select只能返回username,不能查所有,所以返回任意类型不是单个的object[]
//from 开头表示select * 不行所以加select
//单个例没必要数组
List<Object> lo=se.createQuery("select userName from User group by userName")
.list();
//输出长度
//System.out.println("数据条数="+lo.size());
for(Object o:lo)
{
System.out.println(o);
}
}
@SuppressWarnings("unchecked")
@Test
public void test77()
{
//分组查询 多列
//因为group by在数据库中select只能返回username,不能查所有,所以返回任意类型不是单个的object[]
//from 开头表示select * 不行所以加select
//单列没必要数组
List<Object[]> lo=se.createQuery("select userName,count(1) from User group by userName")
.list();
//输出长度
//System.out.println("数据条数="+lo.size());
for(Object[] o:lo)
{
System.out.println(o[]+""+o[]);
}
}
}

数据库的表t_user

test6方法控制台

test66方法的控制台显示

oracle的分页写法,效率最高的

select * from (select a.*, rownum as r from (select t.* from T_USER t order by userid) a
where rownum <=10)where r > 5

不要有t.rowid,这是删除数据用的

数据库中的表

test7方法控制台

test77控制台

框架 hibernate3 多条查询 分页的更多相关文章

  1. CodeIgniter框架多条件搜索查询分页功能解决方案

    最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...

  2. mysql数据库管理工具sqlyog在首选项里可以设置默认查询分页条数和字体,改写关键字大小写

    sqlyog设置一直习惯用sqlyog来管理mysql数据库,但有三个地方用得不是很爽:1.默认查询条数只有1000条经常需要勾选掉重新查询.2.自动替换关键字大小写,有时候字段名为关键字的搞成大写的 ...

  3. Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗?

    8:08:01 青春阳光 2017/4/7 8:08:01 大神在吗? Tp框架查询分页显示与全部查询出来显示运行时间快慢有区别吗? 青春阳光 2017/4/7 8:08:20 还有个问题,上传到pu ...

  4. SSH:Struts2.2+Hibernate3.6+Spring3.1分页示例[转]

    参考资料 1 ssh分页(多个例子) http://useryouyou.iteye.com/blog/593954 2 ssh2分页例子 http://459104018-qq-com.iteye. ...

  5. SSH框架的多表查询和增删查改 (方法一)中

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html   这边文章是接的刚刚前一遍的基础上敲的  ...

  6. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  7. 查询分页的几种Sql写法

    查询分页的几种Sql写法 摘自:http://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html 1.创建测试环境,(插入100万条数据大概耗 ...

  8. Git.Framework 框架随手记--ORM查询数据集合 二

    一.  分组查询 在SQL中使用Group By 来对数据分组,在实际中分组中一般与聚合函数一并使用.在Git.Framework中提供了相应的分组方法 DataTable Group(T entit ...

  9. MyBatis关联查询分页

    背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: sele ...

随机推荐

  1. 基于netcore对ElasitSearch客户端NEST查询功能的简单封装NEST.Repository

    NEST.Repository A simple encapsulation with NEST client for search data form elasticsearch. github A ...

  2. SQL索引优化及实战文章总结(总结)

    1. MySQL索引原理以及查询优化 2.

  3. HDU P2222 Keywords Search

    In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.Wiskey als ...

  4. CSS属性之margin

    0.对自身可视宽度的影响 1>改变处于标准文档流中,未设置width值的block元素的可视宽度 在标准文档流中,对于没有设置宽度的block元素,当其具有内容或者设置高度后,其自身宽度为父元素 ...

  5. Android组件化框架项目详解

    简介 什么是组件化? 项目发展到一定阶段时,随着需求的增加以及频繁地变更,项目会越来越大,代码变得越来越臃肿,耦合会越来越多,开发效率也会降低,这个时候我们就需要对旧项目进行重构即模块的拆分,官方的说 ...

  6. Eclipse调试不能进入断点

    Eclipse下在给行设置断点或者在调试时弹出错误“Unable to install breakpoint due to missing line number attributes,Modify ...

  7. 记录一次json转换的经历

    需求:数据库里面的一个字段,存的是json数据,类似{‘name’:“name1”,'items':“[{code:0,name:'name2'}]”},{‘name’:“name3”,'items' ...

  8. Spring Boot框架搭建

    用idea搭建Springboot还是很方便的 环境变量是JDK1.8 SpringBoot自带了Tomcat启动也很方便 1.创建项目 2. 3.选择SpringBoot的版本以及组件 4.创建完成 ...

  9. String类型的学习

    一 :关于两个string类型变量是否相等: 请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 分析: 首先为s0开辟空间,然后给s1开辟 ...

  10. [翻译] MMMaterialDesignSpinner

    MMMaterialDesignSpinner Usage To run the example project, clone the repo, and run pod install from t ...