目录
(1)查询类的一个属性testQueryUserOneAttributes()
查询类的两个及两个以上属性testQueryUserSeveralAttributes();采用对象数组的方式;
testQueryUserOneAttributeByDistinct()
public void testQueryUserByExample()
基本的HQL查询,条件查询1,查询名字“李洋洋”的User testQueryUserByWhere1()
基本的HQL查询,条件查询,查询年龄在20-30之间的User testQueryUserByWhere2()
基本的HQL查询,条件查询之模糊查询,查询名字含有李的User testQueryUserByWhere3()
基本的HQL查询,条件查询之嵌套子查询,查询年龄>平均年龄的所有用户 testEmbededSonQuery()
11.基本的HQL查询,条件查询之OrderBy,按照年龄降序,年龄相同,按照名字升序
12.基本的HQL查询,条件查询之分组查询,统计男生女生各有多少
13基本的HQL查询,条件查询之分组查询,having可以对每组进行条件限制
public void testQueryByGroupAndHaving()
基本的HQL查询,参数绑定查询 testQueryUserByParameter()
基本的HQL查询,分页查询,传入具体参数 testQueryByPage1()
(1)把如下代码复制到pojo->User.hbm.xml;与class同级(Ctrl+i调节格式)
(2)基本的HQL查询,再User.hbm.xml定义命名查询标签 public void testQueryUserByQueryTag()
基本的HQL更新,把李洋洋更新成杨理理 testUpdate()
一、Copy 下 helloHibernate3ManageObjects 粘贴更改名字为Hibernate4QueryByHQL(命名随意)
manageUser.java 中Testcase里面全部重写 ;
二、先在User.java里面添加 toString();
public String toString(){
return "User [id=" +id+",name="+name+",age="+age+",gender="+gender+",birthday="+birthday;
}
manageUser.java
0、保存添加20个元素
//0、基本的HQL查询,保存
public void testSaveUser(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// User u2=session.get(User.class, 89); //删除元素
// session.delete(u2);
for(int i=0; i<20; i++){
User u=new User();
if(i%2==0) u.setGender("男");
else u.setGender("女");
u.setAge(i);
u.setBirthday(Date.valueOf("2000-1-1"));
u.setName("王"+i);
session.save(u);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
1.HQL基本查询
基本的HQL查询 testQueryUser()
(1) 查询方法一
(2) 删除元素
User u2=session.get(User.class, 2); //删除元素
session.delete(u2);
(3) 查询方法二
(4)查询方法三定义一个迭代器的方法
//基本的HQL查询
public void testQueryUser(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 2); //删除元素
// session.delete(u2);
Query query=session.createQuery("from User");
List<User> users=query.list();
//1、查询方法一
/*
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.toString());
}*/
//2、查询方法二
/*for(User u:users){
System.out.println(u.toString());
}*/
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
2.HQL属性查询
基本的HQL查询,查询类的属性
(1)查询类的一个属性testQueryUserOneAttributes()
//1.基本的HQL查询,查询类的一个属性
public void testQueryUserOneAttributes(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 2); //删除元素
// session.delete(u2);
Query query=session.createQuery("select u.name from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List names=query.list();
//1、查询方法一
for(int i=0;i<names.size();i++)
{
String name=(String)names.get(i);
System.out.println(name);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
(2)查询类的两个及两个以上属性testQueryUserSeveralAttributes();采用对象数组的方式;
//2.基本的HQL查询,查询类的两个及两个以上属性
public void testQueryUserSeveralAttributes(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 2); //删除元素
// session.delete(u2);
Query query=session.createQuery("select u.name,u.age from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List attributes=query.list();
//1、查询方法一
for(int i=0;i<attributes.size();i++)
{
Object objs[]=(Object[])attributes.get(i);
System.out.println(objs[0]+"的年龄"+objs[1]);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
3、HQL属性查询
查询distinct去重
testQueryUserOneAttributeByDistinct()
//3.基本的HQL查询,查询distinct去重
public void testQueryUserOneAttributeByDistinct(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("select distinct u.name from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List names=query.list();
//1、查询方法一
for(int i=0;i<names.size();i++)
{
String name=(String)names.get(i);
System.out.println(name);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
4、HQL实例化查询
基本的HQL查询,实例化查询
public void testQueryUserByExample()
在user.java 中添加如下代码
public User(String username,int age){
name=username;
this.age=age;
}
姓名和年龄的构造方法
testQueryUserByExample()
//5.基本的HQL查询,实例化查询
public void testQueryUserByExample(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("select new User(u.name,u.age) from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List<User> users=query.list();
//1、查询方法一
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.getName()+"的年龄"+u.getAge());
if(u.getAge()==20){
session.saveOrUpdate(u);
}
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
5、HQL统计函数查询
基本的HQL查询,统计查询
testStatisticalQuery()
//6.基本的HQL查询,统计查询
public void testStatisticalQuery(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//统计有多少个对象(即有多少条数据记录)
Query query=session.createQuery("select count(*) from User u");
Number result1=(Number)query.uniqueResult();
System.out.println(result1);
//统计平均年龄
query=session.createQuery("select avg(age) from User u");
Number result2=(Number)query.uniqueResult();
System.out.println(result2);
//统计最大年龄
query=session.createQuery("select max(age) from User u");
Number result3=(Number)query.uniqueResult();
System.out.println(result3);
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
6.添加如下代码到User.java
public User() {
// TODO Auto-generated constructor stub
name=getName();
this.age=age;
gender=getGender();
this.id=id;
birthday=getBirthday();
}
7、HQL条件查询——where子句1
基本的HQL查询,条件查询1,查询名字“李洋洋”的User
testQueryUserByWhere1()
/7.基本的HQL查询,条件查询1,查询名字“李洋洋”的User
public void testQueryUserByWhere1(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u where u.name='李洋洋'"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
8. HQL条件查询——where子句2
基本的HQL查询,条件查询,查询年龄在20-30之间的User
testQueryUserByWhere2()
//8.基本的HQL查询,条件查询,查询年龄在20-30之间的User
public void testQueryUserByWhere2(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.age >= 20 and u.age <= 30");
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
9.HQL条件查询——where子句3
基本的HQL查询,条件查询之模糊查询,查询名字含有李的User
testQueryUserByWhere3()
//9.基本的HQL查询,条件查询之模糊查询,查询名字含有李的User
public void testQueryUserByWhere3(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.name like '%李%' and u.age>15"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
10.子查询
基本的HQL查询,条件查询之嵌套子查询,查询年龄>平均年龄的所有用户
testEmbededSonQuery()
//10.基本的HQL查询,条件查询之嵌套子查询,查询年龄>平均年龄的所有用户
public void testEmbededSonQuery(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.age>(select avg(age) from User)"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
11.基本的HQL查询,条件查询之OrderBy,按照年龄降序,年龄相同,按照名字升序
testQueryByOrderBy()
//11.基本的HQL查询,条件查询之OrderBy,按照年龄降序,年龄相同,按照名字升序
public void testQueryByOrderBy(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u order by u.age desc, u.name"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
12、基本的HQL查询,条件查询之分组查询,统计男生女生各有多少
testQueryByGroup()
//12.基本的HQL查询,条件查询之分组查询,统计男生女生各有多少 public void testQueryByGroup(){ Configuration cfg=null; SessionFactory sf=null; Session session=null; Transaction ts=null; try { sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式 session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例 ts=session.beginTransaction(); //开启事务 //此时avg统计查询是针对分组之后的每一组进行的 Query query=session.createQuery("select u.gender, avg(u.age) from User u group by u.gender"); //可以多个条件 //此时list是object类型 对象数组 List<Objects[]> list=query.list(); for(int i=0; i<list.size(); i++){ Object[] objs=(Object[])list.get(i); System.out.println(objs[0]+"的平均年龄为"+objs[1]); } ts.commit(); } catch (Exception e) { //捕获异常 // TODO Auto-generated catch block e.printStackTrace(); //异常:回滚 if(ts!=null){ ts.rollback(); } }finally{ sf.close(); } }
13、基本的HQL查询,条件查询之分组查询,having可以对每组进行条件限制
public void testQueryByGroupAndHaving()
//13.基本的HQL查询,条件查询之分组查询,having可以对每组进行条件限制
public void testQueryByGroupAndHaving(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//此时avg统计查询是针对分组之后的每一组进行的
Query query=session.createQuery("select u.gender, avg(u.age) from User u group by u.gender having avg(u.age)<20"); //可以多个条件
//此时list是object类型 对象数组
List<Objects[]> list=query.list();
for(int i=0; i<list.size(); i++){
Object[] objs=(Object[])list.get(i);
System.out.println(objs[0]+"的平均年龄为"+objs[1]);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
14、参数绑定查询
基本的HQL查询,参数绑定查询
testQueryUserByParameter()
setString()方法不能使用,采用setParameter()方法
//14.基本的HQL查询,参数绑定查询
public void testQueryUserByParameter(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u where u.name=?");
// query.setString(0,"李洋洋");
query.setParameter(0, "李洋洋");
List<User> users=query.list();
//1、查询方法一
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
15.分页查询
基本的HQL查询,分页查询
public void testQueryByPage()
查询前五个对象
//15.基本的HQL查询,分页查询
public void testQueryByPage(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u ");
query.setFirstResult(0);
query.setMaxResults(5);
List<User> users=query.getResultList();
for(User u:users)
{
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
16.分页查询
基本的HQL查询,分页查询,传入具体参数
testQueryByPage1()
//16.基本的HQL查询,分页查询,传入具体参数
public void testQueryByPage1(){
QueryByPage(3);
}
public void QueryByPage(int pageSize){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u ");
List<User> users=query.getResultList();
int userCount=users.size();
int pageCount=0;
pageCount=userCount/pageSize;
if(userCount % pageSize!=0){
pageCount++;
}
for(int i=0; i<pageCount; i++){
System.out.println("第"+i+"页:");
System.out.println("---------------------------------");
query.setFirstResult(i*pageSize);
query.setMaxResults(pageSize);
List<User> user1s=query.getResultList();
for(User u:user1s)
{
System.out.println(u.toString());
}
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
不用总去读取数据库,需要哪页再查询
//16.基本的HQL查询,分页查询,传入具体参数
public void testQueryByPage1(){
QueryByPage(3);
}
public void QueryByPage(int pageSize){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//不用总去读取数据库,需要哪页再查询
Query query=session.createQuery("select count(*) from User u "); //统计查询
Number cnts=(Number)query.uniqueResult();
int userCount=cnts.intValue();
int pageCount=0;
pageCount=userCount/pageSize;
if(userCount % pageSize!=0){
pageCount++;
}
Query query1=session.createQuery("from User u "); //普通
for(int i=0; i<pageCount; i++){
System.out.println("第"+i+"页:");
System.out.println("---------------------------------");
query1.setFirstResult(i*pageSize);
query1.setMaxResults(pageSize);
List<User> user1s=query1.list();
for(User u:user1s)
{
System.out.println(u.toString());
}
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
17.命名查询
在映射文件中定义命名查询语句(HQL)
(1)把如下代码复制到pojo->User.hbm.xml;与class同级(Ctrl+i调节格式)
<query name="findUserByName">
<![CDATA[
from User u where u.username=:name
]]>
</query>
User.hbm.xml
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.hrbust.pojo.User" table="T_USER" select-before-update="true" dynamic-update="true">
<id name="id" column="id">
<generator class="identity"/>
</id>
<property name="name" column="username"/>
<property name="gender" column="sex"/>
<property name="age" />
<property name="birthday" column="borndate"/>
</class>
<query name="findUserByName">
<![CDATA[
from User u where u.name=:username
]]>
</query>
</hibernate-mapping>
(2)基本的HQL查询,再User.hbm.xml定义命名查询标签
public void testQueryUserByQueryTag()
//17.基本的HQL查询,再User.hbm.xml定义命名查询标签
public void testQueryUserByQueryTag(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.getNamedQuery("findUserByName");
query.setParameter("username", "李洋洋");
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
18.使用HQL更新和删除记录
基本的HQL更新,把李洋洋更新成杨理理
testUpdate()
查询
//18.基本的HQL更新,把李洋洋更新成杨理理
public void testUpdate(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("update User u set u.name='杨理理' where u.name='李洋洋'");
query.executeUpdate();
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
基本的HQL删除,把杨理理删除
testDelete()
查询
//18.基本的HQL删除,把杨理理删除
public void testDelete(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("delete User u where u.name='杨理理'");
query.executeUpdate();
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
manageuser.java
package cn.hrbust.dao;
//1814010809
import java.sql.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import cn.hrbust.pojo.User;
import junit.framework.TestCase;
public class manageUser extends TestCase{
//2.基本的HQL查询,查询类的一个属性
public void testQueryUserOneAttributes(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 2); //删除元素
// session.delete(u2);
Query query=session.createQuery("select u.name from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List names=query.list();
//1、查询方法一
for(int i=0;i<names.size();i++)
{
String name=(String)names.get(i);
System.out.println(name);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//3.基本的HQL查询,查询类的两个及两个以上属性
public void testQueryUserSeveralAttributes(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 2); //删除元素
// session.delete(u2);
Query query=session.createQuery("select u.name,u.age from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List<Object[]> attributes=query.list();
// List attributes=query.list(); //后面81强制转换,没有直接指定泛型的类型
//1、查询方法一
for(int i=0;i<attributes.size();i++)
{
Object objs[]=(Object[])attributes.get(i);
System.out.println(objs[0]+"的年龄"+objs[1]);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//4.基本的HQL查询,查询distinct去重
public void testQueryUserOneAttributeByDistinct(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("select distinct u.name from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List names=query.list();
//1、查询方法一
for(int i=0;i<names.size();i++)
{
String name=(String)names.get(i);
System.out.println(name);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//5.基本的HQL查询,实例化查询
public void testQueryUserByExample(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("select new User(u.name,u.age) from User u"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List<User> users=query.list();
//1、查询方法一
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.getName()+"的年龄"+u.getAge());
if(u.getAge()==20){
session.saveOrUpdate(u);
}
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//6.基本的HQL查询,统计查询
public void testStatisticalQuery(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//统计有多少个对象(即有多少条数据记录)
Query query=session.createQuery("select count(*) from User u");
Number result1=(Number)query.uniqueResult();
System.out.println(result1);
//统计平均年龄
query=session.createQuery("select avg(age) from User u");
Number result2=(Number)query.uniqueResult();
System.out.println(result2);
//统计最大年龄
query=session.createQuery("select max(age) from User u");
Number result3=(Number)query.uniqueResult();
System.out.println(result3);
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//7.基本的HQL查询,条件查询1,查询名字“李洋洋”的User
public void testQueryUserByWhere1(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u where u.name='李洋洋'"); //这里取属性名称,不再是数据库里面的表,不写字段的名称了
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//8.基本的HQL查询,条件查询,查询年龄在20-30之间的User
public void testQueryUserByWhere2(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.age >= 20 and u.age <= 30");
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//9.基本的HQL查询,条件查询之模糊查询,查询名字含有李的User
public void testQueryUserByWhere3(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.name like '%李%' and u.age>15"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//10.基本的HQL查询,条件查询之嵌套子查询,查询年龄>平均年龄的所有用户
public void testEmbededSonQuery(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u where u.age>(select avg(age) from User)"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
//11.基本的HQL查询,条件查询之OrderBy,按照年龄降序,年龄相同,按照名字升序
public void testQueryByOrderBy(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// Query query=session.createQuery("from User u where u.age between 20 and 30");
Query query=session.createQuery("from User u order by u.age desc, u.name"); //可以多个条件
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//12.基本的HQL查询,条件查询之分组查询,统计男生女生各有多少
public void testQueryByGroup(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//此时avg统计查询是针对分组之后的每一组进行的
Query query=session.createQuery("select u.gender, avg(u.age) from User u group by u.gender"); //可以多个条件
//此时list是object类型 对象数组
List<Objects[]> list=query.list();
for(int i=0; i<list.size(); i++){
Object[] objs=(Object[])list.get(i);
System.out.println(objs[0]+"的平均年龄为"+objs[1]);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//13.基本的HQL查询,条件查询之分组查询,having可以对每组进行条件限制
public void testQueryByGroupAndHaving(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//此时avg统计查询是针对分组之后的每一组进行的
Query query=session.createQuery("select u.gender, avg(u.age) from User u group by u.gender having avg(u.age)<20"); //可以多个条件
//此时list是object类型 对象数组
List<Objects[]> list=query.list();
for(int i=0; i<list.size(); i++){
Object[] objs=(Object[])list.get(i);
System.out.println(objs[0]+"的平均年龄为"+objs[1]);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//14.基本的HQL查询,参数绑定查询
public void testQueryUserByParameter(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u where u.name=?");
// query.setString(0,"李洋洋");
query.setParameter(0, "李洋洋");
List<User> users=query.list();
//1、查询方法一
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//15.基本的HQL查询,分页查询
public void testQueryByPage(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("from User u ");
query.setFirstResult(0);
query.setMaxResults(5);
List<User> users=query.getResultList();
for(User u:users)
{
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//16.基本的HQL查询,分页查询,传入具体参数
public void testQueryByPage1(){
QueryByPage(3);
}
public void QueryByPage(int pageSize){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//不用总去读取数据库,需要哪页再查询
Query query=session.createQuery("select count(*) from User u "); //统计查询
Number cnts=(Number)query.uniqueResult();
int userCount=cnts.intValue();
int pageCount=0;
pageCount=userCount/pageSize;
if(userCount % pageSize!=0){
pageCount++;
}
Query query1=session.createQuery("from User u "); //普通
for(int i=0; i<pageCount; i++){
System.out.println("第"+i+"页:");
System.out.println("---------------------------------");
query1.setFirstResult(i*pageSize);
query1.setMaxResults(pageSize);
List<User> user1s=query1.list();
for(User u:user1s)
{
System.out.println(u.toString());
}
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
//17.基本的HQL查询,再User.hbm.xml定义命名查询标签
public void testQueryUserByQueryTag(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.getNamedQuery("findUserByName");
query.setParameter("username", "李洋洋");
List<User> users=query.list();
//3、查询方法三定义一个迭代器的方法
Iterator iterator=users.iterator();
while(iterator.hasNext()){
User u=(User)iterator.next();
System.out.println(u.toString());
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
//18.基本的HQL删除,把杨理理删除
public void testDelete(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
Query query=session.createQuery("delete User u where u.name='杨理理'");
query.executeUpdate();
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
//1基本的HQL查询,查询所有属性
public void testQueryUser(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
//
// User u2=session.get(User.class, 82); //删除元素
// session.delete(u2);
Query query=session.createQuery("from User");
List<User> users=query.list();
//1、查询方法一
for(int i=0;i<users.size();i++)
{
User u=(User)users.get(i);
System.out.println(u.toString());
}
//2、查询方法二
/*for(User u:users){
System.out.println(u.toString());
}*/
//3、查询方法三定义一个迭代器的方法
// Iterator iterator=users.iterator();
// while(iterator.hasNext()){
// User u=(User)iterator.next();
// System.out.println(u.toString());
// }
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
// sf.close();
}
}
//0、基本的HQL查询
public void testSaveUser(){
Configuration cfg=null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
try {
sf=HibernateUtil.getSessionFactory(); //sessionfactory单态模式
session=sf.getCurrentSession(); //保证每个读写线程有唯一的session实例
ts=session.beginTransaction(); //开启事务
// User u2=session.get(User.class, 89); //删除元素
// session.delete(u2);
for(int i=0; i<20; i++){
User u=new User();
if(i%2==0) u.setGender("男");
else u.setGender("女");
u.setAge(i);
u.setBirthday(Date.valueOf("2000-1-1"));
u.setName("王"+i);
session.save(u);
}
ts.commit();
} catch (Exception e) { //捕获异常
// TODO Auto-generated catch block
e.printStackTrace();
//异常:回滚
if(ts!=null){
ts.rollback();
}
}finally{
sf.close();
}
}
}
至此,HQL相关操作,全部完成。