夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          <2008年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          公告

          本博客中未注原創(chuàng)的文章均為轉(zhuǎn)載,對轉(zhuǎn)載內(nèi)容可能做了些修改和增加圖片注釋,如果侵犯了您的版權(quán),或沒有注明原作者,請諒解

          常用鏈接

          留言簿(21)

          隨筆分類(644)

          隨筆檔案(669)

          文章檔案(6)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          以個(gè)普通Users表為例:
          建表語句:
          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:
          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:

          <?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. 查詢整個(gè)映射對象所有字段
          //直接from查詢出來的是一個(gè)映射對象,即:查詢整個(gè)映射對象所有字段

          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());
          }

          輸出結(jié)果為:
          name1 : password1 : 1
          name2 : password2 : 2
          name3 : password3 : 3
          2.查詢單個(gè)字段
          //查詢單個(gè)字段

          String hql = " select name from Users";
          Query query = session.createQuery(hql);
          List<String> list = query.list();
          for(String str : list){
          System.out.println(str);
          }
          輸出結(jié)果為:
          name1
          name2
          name3
          3.查詢其中幾個(gè)字段
          //查詢其中幾個(gè)字段

          String hql = " select name,passwd from Users";
          Query query = session.createQuery(hql);
          //默認(rèn)查詢出來的list里存放的是一個(gè)Object數(shù)組
          List<Object[]> list = query.list();
          for(Object[] object : list){
          String name = (String)object[0];
          String passwd = (String)object[1];

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

          輸出結(jié)果為:
          name1 : password1
          name2 : password2
          name3 : password3
          4.修改默認(rèn)查詢結(jié)果(query.list())不以O(shè)bject[]數(shù)組形式返回,以List形式返回
          //查詢其中幾個(gè)字段,添加new list(),注意list里的l是小寫的。也不需要導(dǎo)入包,這樣通過query.list()出來的list里存放的不再是默認(rèn)的Object數(shù)組了,而是List集合了
          String hql = " select new list(name,passwd) from Users";
          Query query = session.createQuery(hql);
          //默認(rèn)查詢出來的list里存放的是一個(gè)Object數(shù)組,但是在這里list里存放的不再是默認(rèn)的Object數(shù)組了,而是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);
          }

          /**

          輸出結(jié)果為:
          name1 : password1
          name2 : password2
          name3 : password3
          */
          5.修改默認(rèn)查詢結(jié)果(query.list())不以O(shè)bject[]數(shù)組形式返回,以Map形式返回
          //查詢其中幾個(gè)字段,添加new map(),注意map里的m是小寫的。也不需要導(dǎo)入包,這樣通過query.list()出來的list里存放的不再是默認(rèn)的Object數(shù)組了,而是map集合了
          String hql = " select new map(name,passwd) from Users";
          Query query = session.createQuery(hql);
          //默認(rèn)查詢出來的list里存放的是一個(gè)Object數(shù)組,但是在這里list里存放的不再是默認(rèn)的Object數(shù)組了,而是Map集合了

          List<Map> list = query.list();
          for(Map user : list){
          //一條記錄里所有的字段值都是map里的一個(gè)元素,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);

          }

          /**
          輸出結(jié)果為:
          name1 : password1
          name2 : password2
          name3 : password3
          */
          6.修改默認(rèn)查詢結(jié)果(query.list())不以O(shè)bject[]數(shù)組形式返回,以Set形式返回,但是因?yàn)镾et里是不允許有重復(fù)的元素,所以:username和password的值不能相同。只需將hql改為:String hql = " select new set(name,passwd) from Users";
          7.修改默認(rèn)查詢結(jié)果(query.list())不以O(shè)bject[]數(shù)組形式返回,以自定義類型返回
          自定義類:
          package com.domain;
          public class MyUser {
          private String username;
          private String password;
          //因?yàn)椋篠tring hql = " select new com.domain.MyUser(name,passwd) from Users";所以必須要有接受2個(gè)參數(shù)的構(gòu)造函數(shù)
          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;
          }
          }


          //通過query.list()出來的list里存放的不再是默認(rèn)的Object數(shù)組了,而是自定義的類MyUser,必須加包名,String hql = "from Users";中的Users類也是必須加包名的,但是因?yàn)樵賃sers.hbm.xml里<hibernate-mapping auto-import="true"> auto-import默認(rèn)值為true(所以auto-import屬性也可以不寫),自動(dòng)導(dǎo)入了
          String hql = " select new com.domain.MyUser(name,passwd) from Users";
          Query query = session.createQuery(hql);
          //默認(rèn)查詢出來的list里存放的是一個(gè)Object數(shù)組,但是在這里list里存放的不再是默認(rèn)的Object數(shù)組了,而是MyUser對象了
          List<MyUser> myUsers = query.list();
          for(MyUser myUser : myUsers){
          String name = myUser.getUsername();
          String passwd = myUser.getPassword();
          System.out.println(name + " : " + passwd);
          }

          /**

          輸出結(jié)果為:
          name1 : password1
          name2 : password2
          name3 : password3
          */



          8:條件查詢
          //條件查詢,參數(shù)索引值從0開始,索引位置。通過setString,setParameter設(shè)置參數(shù)
          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());
          }
          //條件查詢,自定義索引名(參數(shù)名):username,:password.通過setString,setParameter設(shè)置參數(shù)
          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個(gè)參數(shù)確定類型
          query.setParameter("username", "name1",Hibernate.STRING);
          query.setParameter("password", "password1",Hibernate.STRING);
          List<Users> list = query.list();
          for(Users users : list){
          out.println(users.getId());
          }

          //條件查詢,通過setProperties設(shè)置參數(shù)
          String hql = "from Users where name=:username and passwd=:password";
          Query query = session.createQuery(hql);
          //MyUser類的2個(gè)屬性必須和:username和:password對應(yīng)
          MyUser myUser = new MyUser("name1","password1");
          query.setProperties(myUser);
          List<Users> list = query.list();
          for(Users users : list){
          System.out.println(users.getId());
          }

          posted on 2008-11-12 14:23 HUIKK 閱讀(4300) 評論(2)  編輯  收藏 所屬分類: Hibernate

          評論

          # re: HQL 總結(jié) 2011-06-13 16:03 RE:HQL總結(jié) 小結(jié) 算法
          1
            回復(fù)  更多評論
            

          # re: HQL 總結(jié) 2011-08-11 16:18 zw
          寫的不錯(cuò),很詳細(xì)。
          支持!  回復(fù)  更多評論
            

          主站蜘蛛池模板: 乐至县| 招远市| 海伦市| 敖汉旗| 磐石市| 遂宁市| 尚义县| 云林县| 邵武市| 建湖县| 兴义市| 新源县| 乾安县| 甘南县| 太湖县| 淅川县| 柘荣县| 武宁县| 哈尔滨市| 佳木斯市| 行唐县| 垫江县| 黄浦区| 嘉义市| 额尔古纳市| 桐乡市| 沙湾县| 武隆县| 青州市| 清涧县| 六安市| 巫溪县| 东乌珠穆沁旗| 乌鲁木齐县| 利津县| 北流市| 旅游| 金平| 女性| 怀柔区| 大余县|