日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate的批量查询

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate的批量查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?Hibernate的查詢大致分為以下三種場景,

  1.  HQL查詢-hibernate Query Language(多表查詢,但不復雜時使用)

? ? ?2.  Criteria查詢(單表條件查詢)

  3.  原生SQL查詢(復雜的業務查詢)

?

接下來解釋三種使用方法:?

?1.HQL查詢-hibernate Query Language(多表查詢,但不復雜時使用)  Hibernate獨家查詢語言,屬于面向對象的查詢語言,HQL語言中不會出現SQL中的表和列,HQL使用的都是JavaBean的類名和屬性名。

1.HQL基本查詢

(1)查詢所有的基本語句

@Test// HQL查詢所有數據public void fun1() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句String hql = "from cn.qlq.domain.Customer";// from 類名全路徑// 3.根據hql創建查詢對象Query query = session.createQuery(hql);// 4.根據查詢對象獲取查詢結果List<Customer> customers = query.list();System.out.println(customers);}

?

結果:

Hibernate: selectcustomer0_.cust_id as cust_id1_0_,customer0_.cust_name as cust_nam2_0_,customer0_.cust_source as cust_sou3_0_,customer0_.cust_industry as cust_ind4_0_,customer0_.cust_level as cust_lev5_0_,customer0_.cust_linkman as cust_lin6_0_,customer0_.cust_phone as cust_pho7_0_,customer0_.cust_mobile as cust_mob8_0_ fromcst_customer customer0_ [Customer [cust_id=1, cust_name=XXXXXXXXXX], Customer [cust_id=2, cust_name=聯想]]

?

?

改進:如果整個項目中只有一個類的名字可以省略包路徑,也就是可以只寫類名:

@Test// HQL查詢所有數據public void fun1() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from Customer";// 如果整個項目中只有這一個類名可以直接寫名字// 3.根據hql創建查詢對象Query query = session.createQuery(hql);// 4.根據查詢對象獲取查詢結果List<Customer> customers = query.list();System.out.println(customers);}

?

?

(2)根據主鍵查詢單個

@Test// HQL查詢單個數據public void fun2() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from Customer where cust_id = 1";// where后面是Customer的屬性名稱而不是列名// 3.根據hql創建查詢對象Query query = session.createQuery(hql);// 4.根據查詢對象獲取查詢結果Customer customer = (Customer) query.uniqueResult();System.out.println(customer);}

?

?

?2.HQL條件查詢:

?(1)?占位符查詢

  類似于JDBC的占位符,只是hibernate的?下標從0開始,而JDBC的下標從1開始,基本上所有的編程索引都從0開始,唯獨JDBC從1開始。。。。

@Test// HQL的?占位符查詢public void fun3() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from Customer where cust_id = ?";// 如果整個項目中只有這一個類名可以直接寫名字// 3.根據hql創建查詢對象Query query = session.createQuery(hql); // query.setLong(0, 1l);//類似于JDBC的占位符,只是JDBC的占位符下標從0開始,hibernate從1開始query.setParameter(0, 1l);//這種寫法不用管類型// 4.根據查詢對象獲取查詢結果Customer customer = (Customer) query.uniqueResult();System.out.println(customer);}

?

?

?

?(2)命令占位符? ?:name格式的查詢,固定格式,name隨便起,習慣性的起做和條件名字一樣

@Test// HQL的命令占位符查詢public void fun4() {// 1 獲得sessionSession session = HibernateUtil.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from Customer where cust_id = :cust_id";// :cust_id的名字隨便起,只不過習慣性的起做一樣// 3.根據hql創建查詢對象Query query = session.createQuery(hql); // query.setLong(0, 1l);//類似于JDBC的占位符,只是JDBC的占位符下標從0開始,hibernate從1開始query.setParameter("cust_id",1l);// 4.根據查詢對象獲取查詢結果Customer customer = (Customer) query.uniqueResult();System.out.println(customer);}

?

?

?

3.HQL排序與分頁查詢

?  分頁查詢類似于mysql的limit關鍵字,limit start,pageSize。。。。。。

@Test// HQL分頁查詢public void fun5() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.書寫HQL語句 // String hql = "from cn.qlq.domain.Customer";// from 類名全路徑String hql = "from Customer order by cust_id desc";// :cust_id的名字隨便起,只不過習慣性的起做一樣// 3.根據hql創建查詢對象Query query = session.createQuery(hql);/*** 類似于 limit start,pageSize;* 假設頁大小是2* 頁號 起始值 頁大小* 1 0 2* 2 2 2*///例如取第二頁數據query.setFirstResult(2);query.setMaxResults(2);// 4.根據查詢對象獲取查詢結果List<Customer> customers = query.list();System.out.println(customers);}

?

?

結果:

Hibernate: selectcustomer0_.cust_id as cust_id1_0_,customer0_.cust_name as cust_nam2_0_,customer0_.cust_source as cust_sou3_0_,customer0_.cust_industry as cust_ind4_0_,customer0_.cust_level as cust_lev5_0_,customer0_.cust_linkman as cust_lin6_0_,customer0_.cust_phone as cust_pho7_0_,customer0_.cust_mobile as cust_mob8_0_ fromcst_customer customer0_ limit ?,?

[Customer [cust_id=2, cust_name=新增數據], Customer [cust_id=1, cust_name=程序員111]]

?

?

?

2.Criteria查詢(單表條件查詢)

  criteria查詢相比于上面的HQL查詢要簡單的多。

?1.基本查詢---查詢所有

@Test// 查詢所有public void test1() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.創建criteria進行查詢Criteria criteria = session.createCriteria(Customer.class);List<Customer> list = criteria.list();System.out.println(list);}

?

結果:

[Customer [cust_id=1, cust_name=程序員111], Customer [cust_id=2, cust_name=新增數據], Customer [cust_id=3, cust_name=測試名稱222], Customer [cust_id=4, cust_name=測試名稱222]]

?

?

2. 條件查詢單個:

@Test// 根據ID查詢單個,條件查詢public void test2() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.創建criteria進行查詢Criteria criteria = session.createCriteria(Customer.class);criteria.add(Restrictions.eq("cust_id", 1l));Customer customer = (Customer) criteria.uniqueResult();System.out.println(customer);}

?

結果:

Customer [cust_id=1, cust_name=程序員111]

?

條件列表:

?

?3.分頁查詢:

@Test// 分頁查詢public void test3() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.創建criteria進行查詢Criteria criteria = session.createCriteria(Customer.class);/*** 類似于 limit start,pageSize;* 假設頁大小是2* 頁號 起始值 頁大小* 1 0 2* 2 2 2*/criteria.setFirstResult(2);criteria.setMaxResults(2);List<Customer> list = criteria.list();System.out.println(list);}

?

結果:

[Customer [cust_id=3, cust_name=測試名稱222], Customer [cust_id=4, cust_name=測試名稱222]]

?

4.排序分組使用

?

@Test// 排序和分組public void test5() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.排序Criteria criteria = session.createCriteria(Customer.class);criteria.addOrder(Order.desc("cust_id"));List<Customer> list = criteria.list();System.out.println(list);System.out.println();// 2.分組Criteria criteria1 = session.createCriteria(Customer.class);criteria1.setProjection(Projections.groupProperty("cust_name"));List<Customer> list1 = criteria1.list();System.out.println(list1);}

?

?結果:

[Customer [cust_id=4, cust_name=測試名稱222], Customer [cust_id=3, cust_name=測試名稱222], Customer [cust_id=2, cust_name=新增數據], Customer [cust_id=1, cust_name=程序員111]]

[新增數據, 測試名稱222, 程序員111]

?

5.聚集函數查詢總數

@Test// 查詢總數(聚集函數的使用)public void test4() {// 1 獲得sessionSession session = HibernateUtils.openSession();// 2.聚集函數查詢總數Criteria criteria = session.createCriteria(Customer.class);criteria.setProjection(Projections.rowCount());Long count = (Long) criteria.uniqueResult();System.out.println(count);// 3.聚集函數查詢總數第二種方法Criteria criteria1 = session.createCriteria(Customer.class);criteria1.setProjection(Projections.count("cust_id"));Long count1 = (Long) criteria.uniqueResult();System.out.println(count1);// 4.聚集函數查詢幾個不同的姓名Criteria criteria2 = session.createCriteria(Customer.class);criteria2.setProjection(Projections.countDistinct("cust_name"));Long count2 = (Long) criteria2.uniqueResult();System.out.println(count2);}

?

?結果:

4
4
3

?

3.Hibernate種的原生SQL查詢(用于處理一些復雜的業務邏輯)

1.基本查詢

1.查詢結構是數組集合

@Test// 基本查詢--返回數組listpublic void test1() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();String sql = "select * from cst_customer";// 3.構造Query對象進行查詢SQLQuery sqlQuery = session.createSQLQuery(sql);List<Object[]> list = sqlQuery.list();for (Object[] o : list) {System.out.println(Arrays.toString(o));}// 提交事務 tx.commit();}

?

結果

[1, 程序員111, null, null, null, null, null, null]
[2, 新增數據, null, null, null, null, null, null]
[3, 測試名稱222, null, null, null, null, null, null]
[4, 測試名稱222, null, null, null, null, null, null]

?

2.查詢結果是對象集合(重要)

@Test// 基本查詢--返回對象listpublic void test2() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();String sql = "select * from cst_customer";// 3.構造Query對象進行查詢SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(Customer.class);List<Customer> list = sqlQuery.list();System.out.println(list);// 提交事務 tx.commit();}

?

結果

[Customer [cust_id=1, cust_name=程序員111], Customer [cust_id=2, cust_name=新增數據], Customer [cust_id=3, cust_name=測試名稱222], Customer [cust_id=4, cust_name=測試名稱222]]

?

2.條件查詢

@Test// 基本查詢--返回對象listpublic void test3() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();String sql = "select * from cst_customer where cust_id=?";// 3.構造Query對象進行查詢SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(Customer.class);sqlQuery.setParameter(0, 1l);Customer cus = (Customer) sqlQuery.uniqueResult();System.out.println(cus);// 提交事務 tx.commit();}

?

結果

Customer [cust_id=1, cust_name=程序員111]

?

3.聚集函數查詢總數

@Test// 基本查詢--查詢總數public void test4() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();String sql = "select count(*) from cst_customer";// 3.構造Query對象進行查詢SQLQuery sqlQuery = session.createSQLQuery(sql);BigInteger bg = (BigInteger) sqlQuery.uniqueResult();System.out.println(bg);// 提交事務 tx.commit();}

?

結果

4

?

4.排序與分頁綜合查詢

@Test// 基本查詢--分頁查詢public void test5() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();//按cust_id降序排序String sql = "select * from cst_customer order by cust_id desc limit ?,?";// 3.構造Query對象進行查詢SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.addEntity(Customer.class);/*** 分頁查詢 取第二頁,頁大小是二*/sqlQuery.setParameter(0, 2);sqlQuery.setParameter(1, 2);List<Customer> list = sqlQuery.list();System.out.println(list);// 提交事務 tx.commit();}

?

結果

[Customer [cust_id=2, cust_name=新增數據], Customer [cust_id=1, cust_name=程序員111]]

?

4.原生SQL映射為MAP:

@Test/*** 原生SQL查詢(SQLQuery映射查詢結果為map)*/public void fun6(){Session session = HibernateUtil.openSession();Transaction tx = session.beginTransaction();String sql = "select * from cst_customer";SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);System.out.println(sqlQuery.list());tx.commit();session.close();}

?

結果:

[{cust_phone=null, cust_name=測試名稱1, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=7}, {cust_phone=null, cust_name=測試名稱2, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=8}, {cust_phone=null, cust_name=測試名稱3, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=9}, {cust_phone=null, cust_name=測試名稱4, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=10}, {cust_phone=null, cust_name=測試名稱5, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=11}, {cust_phone=null, cust_name=測試名稱6, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=12}, {cust_phone=null, cust_name=測試名稱7, cust_mobile=null, cust_linkman=null, cust_industry=null, cust_level=null, cust_source=null, cust_id=13}]

?

5.hibernate原生SQL進行插入操作

@Test// 原生SQL執行插入操作public void test6() {// 1.獲取與線程綁定的sessionSession session = HibernateUtils.getCurrentSession();// 2.開啟事務Transaction tx = session.beginTransaction();String sql = "insert into user values('xxxx','李四',23)";;// 3.構造Query對象進行插入SQLQuery sqlQuery = session.createSQLQuery(sql);sqlQuery.executeUpdate();// 提交事務 tx.commit();}

?

轉載于:https://www.cnblogs.com/qlqwjy/p/9357369.html

總結

以上是生活随笔為你收集整理的Hibernate的批量查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区女内射 | 久久久噜噜噜久久久 | 少妇自拍视频 | 日本少妇裸体做爰高潮片 | 91精品亚洲一区 | av中文一区 | 国产做爰视频免费播放 | 人妻一区二区在线 | 无码专区久久综合久中文字幕 | 亚洲国产一区二区三区四区 | 国产人成在线观看 | 日韩精品成人免费观看视频 | av无限看| 亚洲午夜伦理 | 欧美色涩| 欧美另类专区 | 天天搞夜夜 | 美女国产网站 | 色臀 | 婷婷综合社区 | 国产精品久久久久三级无码 | c逼| www久久com | 丰满大肥婆肥奶大屁股 | 久久久久久久久久国产精品 | 久久久久亚洲AV成人 | 男女涩涩视频 | 亚洲免费毛片 | 偷拍久久久 | 久久图库 | 青娱乐在线播放 | 福利在线电影 | 亚洲午夜精品一区二区三区 | 国产夫妻自拍小视频 | 久久久精选 | 日韩视频免费观看高清完整版在线观看 | 精品国产av 无码一区二区三区 | 国产丰满农村老妇女乱 | 久久久精 | 国产69精品久久久 | 欧美性生交xxxxx久久久 | 欧美精品一区二区性色a+v | 欧美国产在线看 | a∨色狠狠一区二区三区 | 精品国产色 | 天天夜夜啦啦啦 | 人人妻人人澡人人爽人人欧美一区 | 老司机精品视频在线 | 国产精久| 在线观看成人免费视频 | 欧美精品一卡二卡 | 天天透天天操 | 国产日韩av在线播放 | 免费二区| 欧美视频免费看 | www.毛片.com | 做视频| 中文字幕精品一区二区三区精品 | 亚洲自拍图片 | 欧美成人h| 色爱综合| 亚洲AV无码成人精品国产一区 | 亚洲乱熟女一区二区 | 38在线视频 | 激情偷乱人成视频在线观看 | 欧美人与动牲交xxxxbbbb | 欧美日韩免费一区二区三区 | 男人操女人的免费视频 | 欧美成年人在线观看 | 超碰免费91| 一本一道久久a久久综合蜜桃 | 亚洲一区二区三区电影在线观看 | 90岁老太婆乱淫 | 国产成人精品亚洲精品色欲 | 日韩一级视频 | 久久久亚洲欧美 | 狠狠人妻久久久久久综合 | 日本a v网站 | 精品人妻一区二区三区含羞草 | 久久青青草原亚洲av无码麻豆 | 国产又黄又爽 | 一区二区在线免费 | 亚洲六月婷婷 | 丰满人妻一区二区三区免费视频棣 | 亚洲成av人片在www色猫咪 | 无码人妻一区二区三区精品视频 | 中文字幕在线观看第二页 | 日韩经典第一页 | 黄色一级大片在线免费看国产一 | 午夜影音| 欧美日韩午夜 | 日韩精品成人在线 | 国产精品久久久久久影视 | 亚洲av永久无码精品三区在线 | 国产精品美女久久 | 人妻互换一区二区三区四区五区 | 久久精品国产免费 | av黄色免费网站 | 秋霞成人午夜鲁丝一区二区三区 |