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. error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.

    error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCom ...

  2. 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)

    Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...

  3. GitHub上新建或删除仓库Repository

    一:新建仓库 在首页的New Repository,点击进入页面,输入和项目同名的仓库名就可以了.

  4. psql 命令行使用

    如果觉得直接打开数据库修改繁琐,那么使用终端命令行是方便而又高大上的.下面来看看有哪些命令行: 说明:如果是正式的服务器则需要进行一个操作在执行下面的命令 ssh name @主机地址 -- name ...

  5. SDL教程第一和第二个视频的笔记

    观看正月点灯笼的SDL教程,地址http://www.tudou.com/listplay/9eG9tkk91oQ.html #include <stdio.h> #include < ...

  6. JVM的生命周期、体系结构、内存管理和垃圾回收机制

    一.JVM的生命周期 JVM实例:一个独立运行的java程序,是进程级别 JVM执行引擎:用户运行程序的线程,是JVM实例的一部分 JVM实例的诞生 当启动一个java程序时.一个JVM实例就诞生了, ...

  7. PDF.NET框架学习篇之SQL-MAP使用存储过程

    最近一直在学习“深蓝医生”的PDF.NET框架,对Sql-Map使用存储过程有了点小小的体会.基础知识请到http://www.cnblogs.com/bluedoctor/archive/2010/ ...

  8. Linux学习历程(持续更新整理中)

    1.文件目录操作命令 (1) ls   显示文件和目录列表 a ls -l  显示文件的详细信息 b ls -a 列出当前目录的所有文件,包含隐藏文件. c stat '目录/文件'   显示指定目录 ...

  9. Type.js – 帮助你更好的控制网页字体排版

    Type.js 是一款很好的网页字体排版工具.它可以让你使用新的 CSS 属性,在网页上试下更精细的排版控制.设置很简单.上传 type.js 到您的网站,并在你的 HTML 链接中引用.接下来,你就 ...

  10. 免费素材:包含 250+ 组件的 DO UI Kit

    DO UI kit 现在可以免费用于 Photoshop 和 Sketch 了.它有超过130个屏幕,10个完整的主题以及250+的组件混合以创造惊人的应用.他们都是再混合和视网膜.最重要的是他们看起 ...