HQL语句

来源:互联网 发布:王珊 数据库三版答案 编辑:程序博客网 时间:2024/05/13 02:30

什么是hql

SQL(Structured Query Language)结构化查询语言

HQL(Hibernate Query Language) hibernate 查询语言

HQL查询的作用

Ø 能够查询出一个表中的所有数据及排序

Ø 能够使用where条件查询

Ø 使用select条件子查询

Ø 投影查询

Ø 聚集查询

Ø 分页查询

Ø 单记录查询

Ø 批量删除

Ø 批量更新

 

hibernate操作数据库几种方法:

1SQL:SQL语句,然后通过Hibernate把查询的数据赋予POJO

2HQL:面向对象查询 (推荐用法)

3Criteria:更加面向对象的查询方式

HQLHibernate  query  language)是一个面向对象的查询语言。

ü SQLselect * from sys_user;   selectfrom是关键字,sys_user是表名

ü HQLfrom  User;  from是关键字,User是类名

Hql语句执行的步骤

1、 创建Query对象

2、 Hql语句参数赋值

3、 调用listiterate方法执行查询

Hql语句参数赋值的方法

1:下标

public List listByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title=?");

query.setString(0, title);

List list=query.list();

session.getTransaction().commit();

return list;

}

2:参数名

Hql语法

1、 hql语句除了类和属性外,其他单词不区分大小写

2、 查询表中所有的数据

public List list(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

List list=query.list();

session.getTransaction().commit();

return list;

}

3、 条件查询

public List list(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title='巴拿马'");

List list=query.list();

session.getTransaction().commit();

return list;

}

 

4、 投影查询(查询某几列)

public List getListTitle(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select title,content from News");

List list=query.list();

session.getTransaction().commit();

return list;

}

public static void main(String[] args) {

NewsTest nt=new NewsTest();

List list=nt.getListTitle();

for(int i=0;i<list.size();i++){

Object[] o=(Object[])list.get(i);

System.out.println(o[0]+"\t"+o[1]);

}

}

5、 聚集查询

 

public int count(){

int i=0;

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select count(*) from News");

i=(int)((Long)query.uniqueResult());

session.getTransaction().commit();

return i;

}

6、 模糊查询

a) like 模糊查询,%匹配0—n个字符  _匹配一个字符

public List listByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title like :title");

query.setParameter("title","%"+title+"%");

List list=query.list();

session.getTransaction().commit();

return list;

}

7、 分页查询

//分页查询

//pageNumber当前页码号     pageSize每页显示条数

public List listByPageNumber(int PageNumber ,int pageSize){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

//设置起始位置下标 下标从0开始

query.setFirstResult((PageNumber-1)*pageSize);

//设置每页条数

query.setMaxResults(pageSize);

List list=query.list();

session.getTransaction().commit();

return list;

}

8、 单记录查询

使用uniqueResult来进行单记录查询 ,如果没有查询到数据返回null,如果查询出的数据条数大于1条,则抛出异常

public News getByQuery(String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where content = ?");

 

News news=(News)query.uniqueResult();

session.getTransaction().commit();

return news;

}

9、 批量删除

public void deleteByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

Transaction  tx=session.beginTransaction();

Query query=session.createQuery("delete from News where title=?");

query.setParameter(0, title);

try{

query.executeUpdate();

}catch(Exception e){

//事物回滚

tx.rollback();

}

tx.commit();

}

10、批量更新

//批量更新

public void updateByTitle(String title,String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

Transaction  tx=session.beginTransaction();

Query query=session.createQuery("update News set content=? where title=?");

query.setParameter(0, content);

query.setParameter(1, title);

try{

query.executeUpdate();

}catch(Exception e){

//事物回滚

tx.rollback();

}

tx.commit();

}

 

 

练习

1. 新建一张表雇员表,包含字段 id、姓名、年龄、薪水(可通过hibernate映射建表)

    create table News(

Id  int(10),

 name  varchar(40),   

age  int(10),

Money  int(10)

 );

2. 批量新增20条数据

  public void saveNews(News news) {

// 创建session对象

Session session = HibernateUtils.getSessionFactory()

.getCurrentSession();

// 开启事物

session.beginTransaction();

// 保存user

             for (int i = 0; i < 9; i++) {

    session.save(news);

      }

// 提交事物

session.getTransaction().commit();

}

3. 查询一个表的所有信息

From News.

4. 查询年龄大于60岁的所有员工的信息

From news where age>60.

5. 查询年龄最大的员工信息和最小员工的信息

select max(age) ,min(age) from news.

6. 查询用户名包含5的所有员工的信息

From News where name like “%5%”.

7. 名字以0结尾的所有员工信息

From News where name like “%0”.

8. 查询名字以a开头的所有员工信息

From News where name like “a%”.

9. 查询所有用户的名字(不要其他信息)

Select name from News.

10. 查询所有用户的名字和主键id(不要其他信息)

Select name,id from News.

11. 查询年龄大于指定年龄的所有用户信息

From News where age>?.

12. 查询年龄大于指定年龄的所有用户信息(采用命名参数的方式给HQL语句传值)

Query query=sessioncreateQuery(“from News where age>?”);

13. 查询所有雇员的平均年龄

Select avg(*) from News.

14. 查询最大最小年龄的平均值

Select avg(max(*),min(*)) from News.

15. 查询雇员的总数量(使用uniqueResult

public News getByQuery(String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select count(*)from News");

 

News news=(News)query.uniqueResult();

session.getTransaction().commit();

return news;

}

 

16. 查询所有雇员的最小、最大年龄和年龄的总和

Select count(max(age),min(age),age) from News.

17. 分页查询(查询雇员:从5开始,最多找出8个雇员详细信息)

/分页查询

//pageNumber当前页码号     pageSize每页显示条数

        

public List listByPageNumber(int PageNumber ,int pageSize){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

//设置起始位置下标 下标从0开始

query.setFirstResult((PageNumber-1)*pageSize);

//设置每页条数

query.setMaxResults(pageSize);

List list=query.list();

session.getTransaction().commit();

return list;

}

 

18. 删除所有年龄小于18岁的雇员

Delete from News where age<18.

19. 给所有雇员的年龄+1

Update News set age=age+1.

什么是hql

SQL(Structured Query Language)结构化查询语言

HQL(Hibernate Query Language) hibernate 查询语言

HQL查询的作用

Ø 能够查询出一个表中的所有数据及排序

Ø 能够使用where条件查询

Ø 使用select条件子查询

Ø 投影查询

Ø 聚集查询

Ø 分页查询

Ø 单记录查询

Ø 批量删除

Ø 批量更新

 

hibernate操作数据库几种方法:

1SQL:SQL语句,然后通过Hibernate把查询的数据赋予POJO

2HQL:面向对象查询 (推荐用法)

3Criteria:更加面向对象的查询方式

HQLHibernate  query  language)是一个面向对象的查询语言。

ü SQLselect * from sys_user;   selectfrom是关键字,sys_user是表名

ü HQLfrom  User;  from是关键字,User是类名

Hql语句执行的步骤

1、 创建Query对象

2、 Hql语句参数赋值

3、 调用listiterate方法执行查询

Hql语句参数赋值的方法

1:下标

public List listByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title=?");

query.setString(0, title);

List list=query.list();

session.getTransaction().commit();

return list;

}

2:参数名

Hql语法

1、 hql语句除了类和属性外,其他单词不区分大小写

2、 查询表中所有的数据

public List list(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

List list=query.list();

session.getTransaction().commit();

return list;

}

3、 条件查询

public List list(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title='巴拿马'");

List list=query.list();

session.getTransaction().commit();

return list;

}

 

4、 投影查询(查询某几列)

public List getListTitle(){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select title,content from News");

List list=query.list();

session.getTransaction().commit();

return list;

}

public static void main(String[] args) {

NewsTest nt=new NewsTest();

List list=nt.getListTitle();

for(int i=0;i<list.size();i++){

Object[] o=(Object[])list.get(i);

System.out.println(o[0]+"\t"+o[1]);

}

}

5、 聚集查询

 

public int count(){

int i=0;

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select count(*) from News");

i=(int)((Long)query.uniqueResult());

session.getTransaction().commit();

return i;

}

6、 模糊查询

a) like 模糊查询,%匹配0—n个字符  _匹配一个字符

public List listByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where title like :title");

query.setParameter("title","%"+title+"%");

List list=query.list();

session.getTransaction().commit();

return list;

}

7、 分页查询

//分页查询

//pageNumber当前页码号     pageSize每页显示条数

public List listByPageNumber(int PageNumber ,int pageSize){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

//设置起始位置下标 下标从0开始

query.setFirstResult((PageNumber-1)*pageSize);

//设置每页条数

query.setMaxResults(pageSize);

List list=query.list();

session.getTransaction().commit();

return list;

}

8、 单记录查询

使用uniqueResult来进行单记录查询 ,如果没有查询到数据返回null,如果查询出的数据条数大于1条,则抛出异常

public News getByQuery(String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News where content = ?");

 

News news=(News)query.uniqueResult();

session.getTransaction().commit();

return news;

}

9、 批量删除

public void deleteByTitle(String title){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

Transaction  tx=session.beginTransaction();

Query query=session.createQuery("delete from News where title=?");

query.setParameter(0, title);

try{

query.executeUpdate();

}catch(Exception e){

//事物回滚

tx.rollback();

}

tx.commit();

}

10、批量更新

//批量更新

public void updateByTitle(String title,String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

Transaction  tx=session.beginTransaction();

Query query=session.createQuery("update News set content=? where title=?");

query.setParameter(0, content);

query.setParameter(1, title);

try{

query.executeUpdate();

}catch(Exception e){

//事物回滚

tx.rollback();

}

tx.commit();

}

 

 

练习

1. 新建一张表雇员表,包含字段 id、姓名、年龄、薪水(可通过hibernate映射建表)

    create table News(

Id  int(10),

 name  varchar(40),   

age  int(10),

Money  int(10)

 );

2. 批量新增20条数据

  public void saveNews(News news) {

// 创建session对象

Session session = HibernateUtils.getSessionFactory()

.getCurrentSession();

// 开启事物

session.beginTransaction();

// 保存user

             for (int i = 0; i < 9; i++) {

    session.save(news);

      }

// 提交事物

session.getTransaction().commit();

}

3. 查询一个表的所有信息

From News.

4. 查询年龄大于60岁的所有员工的信息

From news where age>60.

5. 查询年龄最大的员工信息和最小员工的信息

select max(age) ,min(age) from news.

6. 查询用户名包含5的所有员工的信息

From News where name like “%5%”.

7. 名字以0结尾的所有员工信息

From News where name like “%0”.

8. 查询名字以a开头的所有员工信息

From News where name like “a%”.

9. 查询所有用户的名字(不要其他信息)

Select name from News.

10. 查询所有用户的名字和主键id(不要其他信息)

Select name,id from News.

11. 查询年龄大于指定年龄的所有用户信息

From News where age>?.

12. 查询年龄大于指定年龄的所有用户信息(采用命名参数的方式给HQL语句传值)

Query query=sessioncreateQuery(“from News where age>?”);

13. 查询所有雇员的平均年龄

Select avg(*) from News.

14. 查询最大最小年龄的平均值

Select avg(max(*),min(*)) from News.

15. 查询雇员的总数量(使用uniqueResult

public News getByQuery(String content){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("select count(*)from News");

 

News news=(News)query.uniqueResult();

session.getTransaction().commit();

return news;

}

 

16. 查询所有雇员的最小、最大年龄和年龄的总和

Select count(max(age),min(age),age) from News.

17. 分页查询(查询雇员:从5开始,最多找出8个雇员详细信息)

/分页查询

//pageNumber当前页码号     pageSize每页显示条数

        

public List listByPageNumber(int PageNumber ,int pageSize){

Session session=HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Query query=session.createQuery("from News");

//设置起始位置下标 下标从0开始

query.setFirstResult((PageNumber-1)*pageSize);

//设置每页条数

query.setMaxResults(pageSize);

List list=query.list();

session.getTransaction().commit();

return list;

}

 

18. 删除所有年龄小于18岁的雇员

Delete from News where age<18.

19. 给所有雇员的年龄+1

Update News set age=age+1.

原创粉丝点击