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. python,tensorflow,CNN实现mnist数据集的训练与验证正确率

    1.工程目录 2.导入data和input_data.py 链接:https://pan.baidu.com/s/1EBNyNurBXWeJVyhNeVnmnA 提取码:4nnl 3.CNN.py i ...

  2. css中:not()选择器和jQuery中.not()方法

    因为老是将这两个的not方法弄混,所以写一下备忘. css中:not()选择器用法 :not 伪类选择器可以筛选不符合表达式的元素,:not(selector) 其中的selector为css选择器 ...

  3. java中的>>>和>>>=

    “>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0.当我们要作位移的原始值并非代表数值时(例如:表示颜色图素 ...

  4. PHP中使用Jpgraph生成统计图

    Jpgraph是PHP图表类库,可以生成折线图.柱状图.大饼图等等统计图.如果你想使用PHP生成统计图来统计数据,使用它再方便不过啦. 如果说你要亲自使用GD库来写的话,那我只能膜拜大神啦(我不会哈哈 ...

  5. cacti 安装与 与不能显示图像故障解决方案

    on debian 7&8 apt-get install snmp snmpd apt-get install cacti cacti-spine apt-get install moreu ...

  6. PRINCE2考试用什么语言?

    PRINCE2考试可用英语之外的阿拉伯语.中文.日语.马来西亚/印度尼西亚语.泰国语.越南语.菲律宾语.波兰语和盖尔语等9种语言进行. PRINCE2手册目前已有英文.中文.丹麦语和日语,正在翻译成荷 ...

  7. springboot整合fastdfs实现上传和下载

    FastDFS_Client源码 https://github.com/tobato/FastDFS_Client 友情提示:由于FastDFS_Client这个源码不是很多,并且目前没有找到相关文档 ...

  8. libcrypto.so.10内容丢失导致sshd无法运行

    今天启动虚拟机,ssh服务起不来,提示如下: Starting sshd: /usr/sbin/sshd: error while loading shared libraries: libcrypt ...

  9. 表空间(TableSpace)

    我们知道Oracle数据库真正存放数据的是数据文件(Data File),oracle表空间(tablespace)实际上是一个逻辑的概念,在物理上是并不存在的,那么把一组data files捻在一起 ...

  10. 【转】snmpwalk常用用法

    在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,现总结一些常用的方法如下: 1.snmpwalk -v 2c -c public 10.103.33.1 ...