Hibernate HQL语句使用总结

1. 查询整个映射对象所有字段

//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段  

        String hql =
"from Users";  

        Query query = session.createQuery(hql);  

           

        List<Users> users = query.list();  

        for(Users user : users){  

            System.out.println(user.getName() +
" : " + user.getPasswd() +
" : " + user.getId());  

        }  

  

 输出结果为:  

name1 : password1 :
1

name2 : password2 :
2

name3 : password3 :
3

2.查询字段  

//查询其中几个字段  

        String hql =
" select name,passwd from Users";  

        Query query = session.createQuery(hql);  

        //默认查询出来的list里存放的是一个Object数组  

        List<Object[]> list = query.list();  

        for(Object[] object : list){  

            String name = (String)object[0];  

            String passwd = (String)object[1];  

               

            System.out.println(name +
" : " + passwd);  

        }  

输出结果为:  

name1 : password1  

name2 : password2  

name3 : password3 

3.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回

//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了 

         String hql =
" select new list(name,passwd) from Users";  

        Query query = session.createQuery(hql);  

        //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了  

        List<List> list = query.list();  

        for(List user : list){  

            String name = (String)user.get(0);  

            String passwd = (String)user.get(1);  

               

            System.out.println(name +
" : " + passwd);  

        }  

        /** 

        输出结果为: 

         name1 : password1 

        name2 : password2 

        name3 : password3 

         */

4.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回

//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了  

        String hql =
" select new map(name,passwd) from Users";  

        Query query = session.createQuery(hql);  

        //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了  

        List<Map> list = query.list();  

        for(Map user : list){  

            //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值  

            //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了  

            String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形  

            String passwd = (String)user.get("1");  

               

            System.out.println(name +
" : " + passwd);  

        }  

        /** 

        输出结果为: 

         name1 : password1 

        name2 : password2 

        name3 : password3 

         */

5.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回

6.条件查询

//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数  

        String hql =
"from Users where name=? and passwd=?";  

        Query query = session.createQuery(hql);  

        //第1种方式  

//      query.setString(0, "name1");  

//      query.setString(1, "password1");  

        //第2种方式  

        query.setParameter(0,
"name1",Hibernate.STRING);  

        query.setParameter(1,
"password1",Hibernate.STRING);  

        List<Users> list = query.list();  

        for(Users users : list){  

            System.out.println(users.getId());  

        }  

//条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数  

        String hql =
"from Users where name=:username and passwd=:password";  

        Query query = session.createQuery(hql);  

        //第1种方式  

//      query.setString("username", "name1");  

//      query.setString("password", "password1");  

        //第2种方式,第3个参数确定类型  

        query.setParameter("username",
"name1",Hibernate.STRING);  

        query.setParameter("password",
"password1",Hibernate.STRING);  

        List<Users> list = query.list();  

        for(Users users : list){  

            System.out.println(users.getId());  

        

  

//条件查询,通过setProperties设置参数  

        String hql =
"from Users where name=:username and passwd=:password";  

        Query query = session.createQuery(hql);  

        //MyUser类的2个属性必须和:username和:password对应  

        MyUser myUser =
new MyUser("name1","password1");  

        query.setProperties(myUser);  

        List<Users> list = query.list();  

        for(Users users : list){  

            System.out.println(users.getId());  

        

  

7.update 数据

执行SQL语句(为什么要用SQL语句,我想是为了执行某些复杂的SQL语句吧) 

String sql="update Table set field = ‘test‘"

Session session = HibernateSessionFactory.getSession();

session.createSQLQuery(sql).executeUpdate();

ts.commit();

执行HQL语句   

String hql="update Table set field = ‘test‘"

Session session = HiberanteSessionFactory.getSession();

Transaction ts = session.beginTransaction();

Query query = session.createQuery(hql);

query.executeUpdate();

ts.commit();

时间: 2024-10-06 18:17:16

Hibernate HQL语句使用总结的相关文章

hibernate -- HQL语句总结

hiberante 这个曾经火了一时的东西,现在项目用到了 被迫学习 from users会返回对象 select  id ,name from user 会返回数组. 我想返回 部分对象的内容 select user(id,name) from user; 直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段            String hql = "from Users";            Query query = session.createQuer

hibernate hql语句 注意事项

现在有实体类 Student 和User . public class Student{ private String id; private Sting classRoom; private User user; @Id@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "paymentableGenerator", strategy = "uuid&qu

hibernate hql语句 group by having 的坑

我期望获得这个列表 然而,使用hql只能获得第一条数据,后来我琢磨了一下,和group by有关系 应该改成 成功查询到 原文地址:https://www.cnblogs.com/jnhs/p/10099068.html

hibernate 之 HQL语句总结【转】

1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query = session.createQuery(hql); List<Users> users = query.list(); for(Users user : users){ System.out.println(user.getName() + " : " + user.ge

hibernate中执行hql语句创建session需要的HibernateUtil类

import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory = null; static { try { Confi

Hibernate HQL查询语句总结

Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的E

Hibernate 中update hql语句

今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key , sname varchar(45) not null, ssex char(2) not null,sdept varchar(10) not null,sage int ,saddress varchar(45) ); update语句如下: String[] params = new St

Hibernate写hql语句与不写hql语句的区别?

写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选用的时机: 不写hql语句,有时比较方便,在不考虑复杂的查询的情况下,可以使用,此方法把某些Hibernate的方法封装起来,不灵活. 写hql语句,复杂的业务逻辑,建议使用,灵活方便. 以下通过俩种方法的对比来着重介绍一下hibernate不写hql的一种简单用法. 写hql语句: 具有丰富的灵活

Hibernate 的HQL语句,初级

这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf("hello"); Configuration config = new Configuration(); SessionFactory sessionfactory = config.configure("hibernate.cfg.xml").buildSessionFa