首页 > 其他分享 >hibernate------HQL总结

hibernate------HQL总结

时间:2023-06-09 10:03:44浏览次数:54  
标签:hibernate String passwd list hql HQL ------ query name


关键字: hibernate------hql总结

以以个普通Users表为例:

建表语句:

Java代码


    1. CREATE DATABASE `interceptor`   
    2. CHARACTER SET 'utf8';   
    3.   
    4. USE `interceptor`;   
    5.   
    6. DROP TABLE IF EXISTS `users`;   
    7. create table users(   
    8.     id int auto_increment primary key,   
    9.     name varchar(10) not null,   
    10.     passwd varchar(10) not null  
    11. )ENGINE=InnoDB DEFAULT CHARSET=utf8;


    User.java:

    Java代码


      1. package com.domain;   
      2.   
      3. public class Users implements java.io.Serializable {   
      4.   
      5.     private Integer id;   
      6.   
      7.     private String name;   
      8.   
      9.     private String passwd;   
      10.   
      11.     public Users() {   
      12.     }   
      13.   
      14.     public Users(String name, String passwd) {   
      15.         this.name = name;   
      16.         this.passwd = passwd;   
      17.     }   
      18.   
      19.     public Integer getId() {   
      20.         return this.id;   
      21.     }   
      22.   
      23.     public void setId(Integer id) {   
      24.         this.id = id;   
      25.     }   
      26.   
      27.     public String getName() {   
      28.         return this.name;   
      29.     }   
      30.   
      31.     public void setName(String name) {   
      32.         this.name = name;   
      33.     }   
      34.   
      35.     public String getPasswd() {   
      36.         return this.passwd;   
      37.     }   
      38.   
      39.     public void setPasswd(String passwd) {   
      40.         this.passwd = passwd;   
      41.     }   
      42.   
      43. }


      User.hbm.xml:


      Java代码



      1.   
      2. <?xml version="1.0" encoding="utf-8"?>   
      3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
      4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
      5. <hibernate-mapping>   
      6.     <class name="com.domain.Users" table="users" catalog="interceptor">   
      7.         <id name="id" type="java.lang.Integer">   
      8.             <column name="id" />   
      9.             <generator class="native" />   
      10.         </id>   
      11.         <property name="name" type="java.lang.String">   
      12.             <column name="name" length="10" not-null="true" />   
      13.         </property>   
      14.         <property name="passwd" type="java.lang.String">   
      15.             <column name="passwd" length="10" not-null="true" />   
      16.         </property>   
      17.     </class>   
      18. </hibernate-mapping>



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

      Java代码



      1. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段   
      2.         String hql = "from Users";   
      3.         Query query = session.createQuery(hql);   
      4.            
      5.         List<Users> users = query.list();   
      6.         for(Users user : users){   
      7.             System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());   
      8.         }   
      9.   
      10.  输出结果为:   
      11. name1 : password1 : 1  
      12. name2 : password2 : 2  
      13. name3 : password3 : 3



      2.查询单个字段

      Java代码


      1.   
      2. //查询单个字段   
      3.         String hql = " select name from Users";   
      4.         Query query = session.createQuery(hql);   
      5.            
      6.         List<String> list = query.list();   
      7.         for(String str : list){   
      8.             System.out.println(str);   
      9.         }   
      10. 输出结果为:   
      11. name1   
      12. name2   
      13. name3



      3.查询其中几个字段

      Java代码



      1.   
      2. //查询其中几个字段   
      3.         String hql = " select name,passwd from Users";   
      4.         Query query = session.createQuery(hql);   
      5.         //默认查询出来的list里存放的是一个Object数组   
      6.         List<Object[]> list = query.list();   
      7.         for(Object[] object : list){   
      8.             String name = (String)object[0];   
      9.             String passwd = (String)object[1];   
      10.                
      11.             System.out.println(name + " : " + passwd);   
      12.         }   
      13. 输出结果为:   
      14. name1 : password1   
      15. name2 : password2   
      16. name3 : password3



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

      Java代码

      1. //查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了   
      2.         String hql = " select new list(name,passwd) from Users";   
      3.         Query query = session.createQuery(hql);   
      4.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了   
      5.         List<List> list = query.list();   
      6.         for(List user : list){   
      7.             String name = (String)user.get(0);   
      8.             String passwd = (String)user.get(1);   
      9.                
      10.             System.out.println(name + " : " + passwd);   
      11.         }   
      12.         /**  
      13.         输出结果为:  
      14.         name1 : password1  
      15.         name2 : password2  
      16.         name3 : password3  
      17.          */


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


      Java代码


        1.   
        2. //查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了   
        3.         String hql = " select new map(name,passwd) from Users";   
        4.         Query query = session.createQuery(hql);   
        5.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了   
        6.         List<Map> list = query.list();   
        7.         for(Map user : list){   
        8.             //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值   
        9.             //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了   
        10.             String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形   
        11.             String passwd = (String)user.get("1");   
        12.                
        13.             System.out.println(name + " : " + passwd);   
        14.         }   
        15.         /**  
        16.         输出结果为:  
        17.         name1 : password1  
        18.         name2 : password2  
        19.         name3 : password3  
        20.          */


        6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set(name,passwd) from Users";

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

        自定义类:

        Java代码


          1.   
          2. package com.domain;   
          3.   
          4. public class MyUser {   
          5.   
          6.     private String username;   
          7.     private String password;   
          8. //因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数   
          9.     public MyUser(String username,String password){   
          10.         this.username = username;   
          11.         this.password = password;   
          12.     }   
          13.        
          14.     public String getUsername() {   
          15.         return username;   
          16.     }   
          17.     public void setUsername(String username) {   
          18.         this.username = username;   
          19.     }   
          20.     public String getPassword() {   
          21.         return password;   
          22.     }   
          23.     public void setPassword(String password) {   
          24.         this.password = password;   
          25.     }   
          26.        
          27.        
          28. }


          Java代码

          1.   
          2. //通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,String hql = "from Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<hibernate-mapping auto-import="true"> auto-import默认值为true(所以auto-import属性也可以不写),自动导入了   
          3.         String hql = " select new  com.domain.MyUser(name,passwd) from Users";   
          4.         Query query = session.createQuery(hql);   
          5.         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了   
          6.         List<MyUser> myUsers = query.list();   
          7.         for(MyUser myUser : myUsers){   
          8.             String name = myUser.getUsername();   
          9.             String passwd = myUser.getPassword();   
          10.             System.out.println(name + " : " + passwd);   
          11.         }   
          12.         /**  
          13.         输出结果为:  
          14.         name1 : password1  
          15.         name2 : password2  
          16.         name3 : password3  
          17.          */


          8:条件查询


          Java代码

          1. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数   
          2.         String hql = "from Users where name=? and passwd=?";   
          3.         Query query = session.createQuery(hql);   
          4.         //第1种方式   
          5. //      query.setString(0, "name1");   
          6. //      query.setString(1, "password1");   
          7.         //第2种方式   
          8.         query.setParameter(0, "name1",Hibernate.STRING);   
          9.         query.setParameter(1, "password1",Hibernate.STRING);   
          10.         List<Users> list = query.list();   
          11.         for(Users users : list){   
          12.             System.out.println(users.getId());   
          13.         }   
          14.

          Java代码



          1. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数   
          2.         String hql = "from Users where name=:username and passwd=:password";   
          3.         Query query = session.createQuery(hql);   
          4.         //第1种方式   
          5. //      query.setString("username", "name1");   
          6. //      query.setString("password", "password1");   
          7.         //第2种方式,第3个参数确定类型   
          8.         query.setParameter("username", "name1",Hibernate.STRING);   
          9.         query.setParameter("password", "password1",Hibernate.STRING);   
          10.         List<Users> list = query.list();   
          11.         for(Users users : list){   
          12.             System.out.println(users.getId());   
          13.         }



          Java代码

          1. //条件查询,通过setProperties设置参数   
          2.         String hql = "from Users where name=:username and passwd=:password";   
          3.         Query query = session.createQuery(hql);   
          4.         //MyUser类的2个属性必须和:username和:password对应   
          5.         MyUser myUser = new MyUser("name1","password1");   
          6.         query.setProperties(myUser);   
          7.         List<Users> list = query.list();   
          8.         for(Users users : list){   
          9.             System.out.println(users.getId());   
          10.         }


          标签:hibernate,String,passwd,list,hql,HQL,------,query,name
          From: https://blog.51cto.com/u_16065168/6445491

          相关文章

          • Linux安装Redis
            1、系统环境[root@localhost~]#cat/etc/redhat-release2、安装依赖yum -y installgccgcc-c++pcrepcre-develzlibzlib-developensslopenssl-devel3将redis-3.2.1.tar.gz安装包上传到服务器的/usr/local/目录下3.1解压redis压缩包[root@localhostlocal]#tar-xvfre......
          • dnSpy进行反编译修改并编译运行EXE或DLL
            软件界面如下:回到目录回到目录该软件分别64位版本及32位版本,分别为dnSpy.exe及 dnSpy-x86.exe,调试时请注意调试所对应软件版本。回到目录现在进入话题:回到目录一、首先编写一个HelloWorld的控制台运行程序,如下图所示:回到目录回到目录代码如下:回到目录usingSystem;using......
          • ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
            前言在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的HelloWorld,如果你觉得本篇文章对你有用的话,不妨点个【推荐】。目录中间件(Middleware)的作用中间件的运行方式中间件(Middleware)和过......
          • 非接触式红外液位开关介绍
            非接触式红外液位开关也叫(分离式液位传感器),采用的是光学原理检测。例如在加湿器上的应用,将非接触式红外开关安装于设备底部位置,水箱上设计一个透明棱镜结构,当液位低于传感器检测点时,传感器则会发出信号提醒加水,当水箱被拿走时传感器则会停止检测,此类传感器不仅可以检测缺水,也能检测......
          • 在tomcat与jboss中配置c3p0连接池
            AppendixD:Configuringc3p0DataSourcesinTomcatYoucaneasilyconfigureApache'sTomcatwebapplicationservertousec3p0pooledDataSources.BelowisaTomcat5.0sampleconfigtogetyoustarted.It'safragmentofTomcat'sconf/serve......
          • [从jQuery看JavaScript]-变量与作用域链(Variable and Scope Chain)
            jQuery片段: 1.var2.//Willspeedupreferencestowindow,andallowsmungingitsname.3.window=this,4.//Willspeedupreferencestoundefined,andallowsmungingitsname.5.undefined,6.//MapoverjQueryinc......
          • 数据挖掘 流程简介
            我们这就是有企业挖掘中最常用的《流失用户分析》来说明:数据挖掘流程:1.定义主题:天啊,我在干什么!(此模块绝大多数主观意识上完成,有少量客观验证) 1.1明确主题用户在各用户群中的分布-流失用户在各用户群中比例   不同客户群的流失程度如:某渠道,某软件版本,......
          • jQuery中异步交互技术详细指南
                                                                                                                                              ......
          • 使用Axis开发Web Service程序
            今天是感恩节,差点又要在公司加班了。好在WebService程序并不是特别难搞,下午终于在eclipse下调通过了,正确产生了服务器端和客户端的Java代码,apache的东西的确很不错。说道WebService的程序开发,八个月前我加班调试公司和中国电信的商务领航系统的接口的时候,用的就是WebService......
          • Using Redis Cache for session data storage in ASP.NET Core
            reference: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-6.0Postedon:11-12-2017TweetWhenyourunanappindevelopmentortesting,itcanbeokayforsessiondatatobelostduringapprestarts.However,in......