hql连表查询(多表查询)

news/2024/11/29 8:49:28/

hql连表查询的问题,总结了一下,与大家分享

 

package android.com.bzjm.test;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import com.bzjm.pojo.Ktvinfo;import com.bzjm.pojo.Ktvtype;import android.com.bzjm.pojo.HibernateSessionFactory;/*** @author Adayan 2016年2月21日下午5:15:53*/public class Hqltext {public void jiaocha() {// 交叉查询// 同时查询出多表的数据Session session = null;try {session = HibernateSessionFactory.getSession();Transaction ts = session.beginTransaction();Query query = session.createQuery("from Ktvinfo,Ktvtype");List<Object[]> list = query.list();// 将获取到的2个表,分开获取for (Object[] values : list) {Ktvinfo ktvinfo = (Ktvinfo) values[0];System.out.println(ktvinfo.getId() + ktvinfo.getKinformation());Ktvtype type = (Ktvtype) values[1];System.out.println(type.getKroomInfo() + type.getKleftNum());}} catch (HibernateException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateSessionFactory.closeSession();}}public void neilianjie() {// 内连接查询(用于有外键的情况)// 下面三种(用于有外键的情况)hql语句都是可以得到相同的结果// 1.String hql="select p from Ktvtype as p inner join p.ktvinfo";// 在下面的hql语句中加入"fetch"后,此hql语句变为了"迫切HQL"语句,这样的查询效率要比上面的hql语句要高// String hql="select p from Ktvtype as p inner join fetch p.ktvinfo";// 2.String hql="select p from Ktvtype p,Ktvinfo k where p.ktvinfo=k";// 3.String// hql="select p from Ktvtype p,Ktvinfo k where p.ktvinfo.id=k.id";// 没有外键的情况: String hql="from Ktvtype p,Ktvinfo k where p.id=k.id";Session session = null;try {session = HibernateSessionFactory.getSession();Transaction ts = session.beginTransaction();// 用于有外键的时候String hql = "select p from Ktvtype as p inner join fetch p.ktvinfo";Query query = session.createQuery(hql);List<Object[]> list = query.list();// 将获取到的2个表,分开获取for (Object[] values : list) {Ktvinfo ktvinfo = (Ktvinfo) values[0];System.out.println(ktvinfo.getId() + ktvinfo.getKinformation());Ktvtype type = (Ktvtype) values[1];System.out.println(type.getKroomInfo() + type.getKleftNum());}} catch (HibernateException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateSessionFactory.closeSession();}}public void zuowailianjie() {// 左外连接(left outer join)// String// hql="select p from Ktvtype p left outer join p.ktvinfo order by p.ktvinfo.id";// 在下面的hql语句中加入"fetch"后,此hql语句变为了"迫切HQL"语句,//这样的查询效率要比上面的hql语句要高// String//hql="select p from Ktvtype p left outer join fetch p.ktvinfo order by p.ktvinfo.id";// String hqlk="select k from Ktvinfo k left outer join k.ktvtype";// 在下面的hql语句中加入"fetch"后,此hql语句变为了"迫切HQL"语句,//这样的查询效率要比上面 的hql语句要高// String hqlk="select k from Ktvinfo k left outer join fetch k.ktvtype";Session session = null;try {session = HibernateSessionFactory.getSession();Transaction ts = session.beginTransaction();String hql = "select p from Ktvtype p left outer join fetch p.ktvinfo order by p.ktvinfo.id";Query query = session.createQuery(hql);List<Ktvtype> list = query.list();for (Ktvtype p : list) {System.out.println(p.getKroomInfo() + p.getKleftNum());}System.out.println("+++++++++++++++++++++++++++++++++++++++");String hqlk = "select k from Ktvinfo k left outer join fetch k.ktvtype";query = session.createQuery(hqlk);List<Ktvinfo> listk = query.list();for (Ktvinfo k : listk) {System.out.println(k.getKinformation() + k.getKlocaltion());}} catch (HibernateException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateSessionFactory.closeSession();}}public void youwailianjie() {// 右外连接(right outer join)Session session = null;try {session = HibernateSessionFactory.getSession();Transaction ts = session.beginTransaction();String hql = "select k from Ktvinfo k right outer join k.ktvtype order by k.id";Query query = session.createQuery(hql);List<Ktvinfo> listk = query.list();for (Ktvinfo k : listk) {System.out.println(k.getKinformation() + k.getKlocaltion());}} catch (HibernateException e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateSessionFactory.closeSession();}}}

 


http://www.ppmy.cn/news/824122.html

相关文章

数据库---DQL 多表联合查询(二)

一、外连接 内连接&#xff1a;假设A和B表进行连接&#xff0c;使用内连接的话。凡是A表和B表能够匹配上的记录查询出来&#xff0c;这 就是内连接。&#xff08;内连接只能查询到两张表可以匹配到的数据&#xff0c;匹配不到的数据查不到&#xff09; 外连接&#xff1a;假设…

GL823K

下面是另一家SD/TF解码芯片的方案 ![](https://img-blog.csdnimg.cn/20210319145313645.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80OTU3MDgwNA,size_16,color_FFFFFF,t_70 13030533945 VX

DBeaver 快捷键大全

有些快捷键未经验证&#xff0c;如有问题望不吝指正&#xff01; ctrl enter 执行sql ctrl \ 执行sql,保留之前窗口结果 ctrl alt ↑ 向上复制一行 ctrl alt ↓ 向下复制一行 ctrl shift F 对sql语句进行格式化&#xff0c;对于很长的sql语句很有用 ctrl d 删除当前…

海康威视DS-K1F100-D8E发卡器Java版

防止以后要用&#xff0c;记录下 后端代码 Controller RequestMapping(value "cardMake") public class CardMakeController extends BaseController {private String menuId ; // 菜单地址(权限用)Resource(name "memberService")private MemberMana…

06_SQL之多表查询

多表查询 文章目录 多表查询前言一、多表查询分类讲解1.1 等值连接 VS 非等值连接1.1.1 等值连接 1.1.2 非等值连接1.2 自连接VS非自连接1.3 内连接VS外连接SQL92&#xff1a; 使用&#xff08;&#xff09;创建连接 二、SQL 99 语法实现多表查询2.0 基本语法2.1 内连接&#x…

Linq的一对多连表查询实现

前言 本人小白程序员一枚 会点java也会点.net 最近在公司做项目当中用到了linq连表查询 因为好久没用linq了 有些语法我也忘记了 既然不会那就一个字学&#xff01; 正文 在数据库中 表关系有一对一关系 一对多关系&#xff0c;多对多关系 我的需求是 我需要根据用户的id查询…

6. SQL 多表查询

文章目录 1. 表的加法1.1 UNION 去重合并1.2 UNION ALL 简单合并1.3 注意事项 2. 表的联结 JOIN2.1 交叉联结 CROSS JOIN2.2 内联结 INNER JOIN2.3 左联结 LEFT JOIN2.4 右联结 RIGHT JOIN2.5 全联结 FULL JOIN2.6 小结 3. 联结的应用3.1 案例13.2 案例23.3 案例3 4. case 表达…

DQL 多表查询

1、多表关系 一对多&#xff08;多对一&#xff09; 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工&#xff0c;一个员工对应一个部门 实现: 在从表的一方建立外键&#xff0c;指向主表一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程&am…