注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风之泪

风过雨过,花开花落。。。

 
 
 

日志

 
 

hibernate-hql总结  

2010-10-18 11:16:08|  分类: ssh |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
hibernate------HQL总结
建表语句:
Java代码 复制代码
CREATE DATABASE `interceptor`   
CHARACTER SET 'utf8';   
  
USE `interceptor`;   
  
DROP TABLE IF EXISTS `users`;   
create table users(   
    id int auto_increment primary key,   
    name varchar(10) not null,   
    passwd varchar(10) not null  
)ENGINE=InnoDB DEFAULT CHARSET=utf8;  
CREATE DATABASE `interceptor`  CHARACTER SET 'utf8';    USE `interceptor`;    DROP TABLE IF EXISTS `users`;  create table users(   id int auto_increment primary key,   name varchar(10) not null,   passwd varchar(10) not null  )ENGINE=InnoDB DEFAULT CHARSET=utf8;  

User.java:
Java代码 复制代码
package com.domain;   
  
public class Users implements java.io.Serializable {   
  
    private Integer id;   
  
    private String name;   
  
    private String passwd;   
  
    public Users() {   
    }   
  
    public Users(String name, String passwd) {   
        this.name = name;   
        this.passwd = passwd;   
    }   
  
    public Integer getId() {   
        return this.id;   
    }   
  
    public void setId(Integer id) {   
        this.id = id;   
    }   
  
    public String getName() {   
        return this.name;   
    }   
  
    public void setName(String name) {   
        this.name = name;   
    }   
  
    public String getPasswd() {   
        return this.passwd;   
    }   
  
    public void setPasswd(String passwd) {   
        this.passwd = passwd;   
    }   
  
}  
package com.domain;    public class Users implements java.io.Serializable {     private Integer id;     private String name;     private String passwd;     public Users() {   }     public Users(String name, String passwd) {    this.name = name;    this.passwd = passwd;   }     public Integer getId() {    return this.id;   }     public void setId(Integer id) {    this.id = id;   }     public String getName() {    return this.name;   }     public void setName(String name) {    this.name = name;   }     public String getPasswd() {    return this.passwd;   }     public void setPasswd(String passwd) {    this.passwd = passwd;   }    }    

User.hbm.xml:
Java代码 复制代码
  
<?xml version="1.0" encoding="utf-8"?>   
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
<hibernate-mapping>   
    <class name="com.domain.Users" table="users" catalog="interceptor">   
        <id name="id" type="java.lang.Integer">   
            <column name="id" />   
            <generator class="native" />   
        </id>   
        <property name="name" type="java.lang.String">   
            <column name="name" length="10" not-null="true" />   
        </property>   
        <property name="passwd" type="java.lang.String">   
            <column name="passwd" length="10" not-null="true" />   
        </property>   
    </class>   
</hibernate-mapping>  
<?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  <hibernate-mapping>      <class name="com.domain.Users" table="users" catalog="interceptor">          <id name="id" type="java.lang.Integer">              <column name="id" />              <generator class="native" />          </id>          <property name="name" type="java.lang.String">              <column name="name" length="10" not-null="true" />          </property>          <property name="passwd" type="java.lang.String">              <column name="passwd" length="10" not-null="true" />          </property>      </class>  </hibernate-mapping>    

1. 查询整个映射对象所有字段
Java代码 复制代码
//直接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  
//直接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.查询单个字段
Java代码 复制代码
  
//查询单个字段   
        String hql = " select name from Users";   
        Query query = session.createQuery(hql);   
           
        List<String> list = query.list();   
        for(String str : list){   
            System.out.println(str);   
        }   
输出结果为:   
name1   
name2   
name3  
//查询单个字段    String hql = " select name from Users";    Query query = session.createQuery(hql);        List<String> list = query.list();    for(String str : list){     System.out.println(str);    }  输出结果为:  name1  name2  name3  

3.查询其中几个字段
Java代码 复制代码
  
//查询其中几个字段   
        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  
//查询其中几个字段    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  

4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
Java代码 复制代码
//查询其中几个字段,添加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  
         */  
//查询其中几个字段,添加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     */    

5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
Java代码 复制代码
  
//查询其中几个字段,添加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  
         */  
//查询其中几个字段,添加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     */  

6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set(name,passwd) from Users";
7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回
自定义类:
Java代码 复制代码
  
package com.domain;   
  
public class MyUser {   
  
    private String username;   
    private String password;   
//因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数   
    public MyUser(String username,String password){   
        this.username = username;   
        this.password = password;   
    }   
       
    public String getUsername() {   
        return username;   
    }   
    public void setUsername(String username) {   
        this.username = username;   
    }   
    public String getPassword() {   
        return password;   
    }   
    public void setPassword(String password) {   
        this.password = password;   
    }   
       
       
}  
package com.domain;    public class MyUser {     private String username;   private String password;  //因为:String hql = " select new  com.domain.MyUser(name,passwd) from Users";所以必须要有接受2个参数的构造函数   public MyUser(String username,String password){    this.username = username;    this.password = password;   }      public String getUsername() {    return username;   }   public void setUsername(String username) {    this.username = username;   }   public String getPassword() {    return password;   }   public void setPassword(String password) {    this.password = password;   }        }  

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

8:条件查询
Java代码 复制代码
//条件查询,参数索引值从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());   
        }   
          
//条件查询,参数索引值从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());    }      

Java代码 复制代码
//条件查询,自定义索引名(参数名):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());   
        }  
//条件查询,自定义索引名(参数名):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());    }  

Java代码 复制代码
//条件查询,通过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());   
        }  
//条件查询,通过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());    }
  评论这张
 
阅读(405)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017