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.Student;
import com.hanqi.entity.Teacher;
import com.hanqi.entity.User; public class Test01 {
private ServiceRegistry sr=null;
private SessionFactory sf=null;
private Session se=null;
private Transaction ts=null;
//在测试用例方法类执行之前,自动执行的方法
//一般用来初始化公用的对象
//前置方法
@Before
public void init()
{ Configuration cfg=new Configuration().configure(); //2、注册配置
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 destory()
{
ts.commit();
se.close();
sf.close(); } //测试Hibernate连接
@Test
public void test() { //6、操作数据库
//添加数据
//实例化的新对象,处于临时状态,
User u1=new User();
u1.setBirthday(new Date());
u1.setMoney();
u1.setPassword("");
u1.setName("测试1");
//u1.setUserID(9);//自然主键
//保存数据
//通过save方法把对象从临时状态转成持久化状态
se.save(u1);
System.out.println(u1);
}
//测试查询的方法
@Test
public void test1()
{
//查询数据
//提供两个参数
//需要返回哪一个持久化类的实例
//实例的标识(数据的主键值);
//通过Session的get方法获得的对象处于持久化状态
User u2=(User)se.get(User.class,);
//修改
u2.setName(""); System.out.println(u2);
//删除
//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);
}
@Test
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);
//关闭Session
se.close(); //使u1进入游离状态
u1.setName("测试游离2343243242");
//把Oid设置成null;
u1.setUserID(null);
System.out.println("重新创建Session和事务....");
//重新创建Session和事务
se=sf.openSession();
//重新开启事务
ts=se.beginTransaction();
se.saveOrUpdate(u1);
System.out.println("u1="+u1); }
//测试HQL
@Test
public void test5()
{
//使用HQL
//1、创建Query对象
//user(对象名不是表名)
Query qu=se.createQuery("from User where userID<? and name =:uname order by userID desc ");
//设置占位符
qu.setInteger(, );
//按参数名方式设置
qu.setString("uname", "测试1");
//执行查询
List<User>lu=qu.list();
//方法链调用
lu=se.createQuery("from User where userID>?").setInteger(, ).list();
for(User u:lu)
{
System.out.println(u);
} }
//测试分页
@Test
public void test6()
{
//设置开始行号,页码=2
//每页的开始行号=(页码-1)*每页行数
List<User> lu=se.createQuery("from User order by userID").setMaxResults()
.setFirstResult()
.list();
for(User u:lu)
{
System.out.println(u);
}
}
//分组查询
@Test
public void test7()
{
List<Object[]>lo=se.createQuery("select name ,count(1) from User group by name").list(); for(Object[] o:lo )
{
System.out.println(o[]);
} }
//测试投影查询
@Test
public void test8()
{
List<Object[]>lo=se.createQuery("select userID,name from User").list();
for(Object[]obj:lo)
{
System.out.println(obj[]+" "+obj[]);
}
System.out.println("$$$$$$$$$$$$");
// 返回持久化对象的集合
List<User>lu=se.createQuery("select new User(userID,name) from User").list();
for(User u:lu)
{
System.out.println(u);
se.update(u);
} }
//测试新的类
@Test
public void test9()
{
Student st=(Student)se.get(Student.class, "");
System.out.println(st);
}
//测试多对一
@Test
public void test10()
{
Course cs =(Course)se.get(Course.class, "9-888");
System.out.println(cs);
}
//测试一对多
@Test
public void test11()
{
Teacher te=(Teacher)se.get(Teacher.class, "");
System.out.println(te);
se.delete(te);
} }

hibernate 实现分页查询语句、单条查询语句、多条查询语句、修改、删除语句的更多相关文章

  1. (五)连接查询(SQL99标准)、子查询、分页查询、联合查询

    一.连接查询(SQL99标准) 1.含义:当要查询的数据来自多张表时要使用连接查询 2.语法: select 查询列表 from 表1 别名 [连接类型] join 表2 别名 on 连接条件 [wh ...

  2. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  3. SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

    目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...

  4. 常用sql语句总结(一)(查询)

    常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...

  5. mysql 查询 添加 删除 语句

    1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 d ...

  6. oracle数据库常用的99条查询语句(转载)

    1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 fro ...

  7. sql语句增删改查与子查询

    修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02 ...

  8. Oracle生成查询包含指定字段名对应的所有数据表记录语句

    应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 de ...

  9. mysql查询语句,通过limit来限制查询的行数。

    mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...

随机推荐

  1. 孙鑫MFC学习笔记9:状态栏与工具栏编程

    1.在窗口创建之前就应该修改窗口的样式 2.单文档应用程序会把文档名作为应用程序标题,应该去掉FWS_ADDTOTITLE属性,然后修改lpszName为标题 3.在窗口创建完成后,可以通过SetWi ...

  2. [工具] GIF 动画每帧合并到一张 PNG

    功能:将 GIF 动画每帧合并到一张 PNG 需求:配合 ImageMagick 图像处理软件. 下载:[工具]Gif2Png_Aone_1.0.0.zip 使用方法: 请到 ImageMagick  ...

  3. Java主要知识结构

    Java基础(建议看java编程规范): Java语言基础:数据类型,命名规则,权限控制符,注释 操作符:算术操作符,逻辑操作符,关系操作符,移位操作符,按位操作符 流程控制 数组 字符串 Java高 ...

  4. Linux命令速查手册,超详细Linux命令教程

    一.常用命令速查 ls cd pwd cat more less tail head cp scp mv mkdir rmdir touch rm ps kill top free clear tre ...

  5. 字符串模板替换方法 MessageFormat.format

    String content = "ab,cc,{名称},{密码},{日期},dd,ff"; String array[] = {userName, password, forma ...

  6. css权重

    1.行内样式,指的是html文档中定义的style <h1 style="color: #fff;">header</h1> 2.ID选择器 3.类,属性选 ...

  7. Clipboard.js – 现代方式实现复制文本到剪贴板

    复制文本到剪贴板应该并不难,目前已经有很成熟的 Flash 方法.但是 Flash 已经在很多场合不适用了,特别是随着 HTML5 技术的发展.今天推荐的这个 Clipboard.js 库不依赖 Fl ...

  8. 【经验之谈】前端面试知识点总结(CSS相关)——附答案

    目录 二.CSS部分 1.解释一下CSS的盒子模型? 2.请你说说CSS选择器的类型有哪些,并举几个例子说明其用法? 3.请你说说CSS有什么特殊性?(优先级.计算特殊值) 4.要动态改变层中内容可以 ...

  9. 【iScroll源码学习04】分离IScroll核心

    前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...

  10. PHP5 各版本维护时间

    版本维护: 5.2:维护至:2011-01-06.支持:xp(2003)以上.最终版本:5.2.17. 5.3:维护至:2014-08-14.支持:xp(2003)以上.最终版本:5.3.29 5.4 ...