HQL语句:三表查询(一对多,一对多)
实体类:CrmDepartment
package com.learning.crm.department.domain; import java.util.HashSet;
import java.util.Set; import com.learning.crm.post.domain.CrmPost; public class CrmDepartment {
/*
*
* CREATE TABLE `crm_department` (
`depId` VARCHAR(255) NOT NULL PRIMARY KEY,
`depName` VARCHAR(50) DEFAULT NULL
);
*
*/ private String depId;
private String depName; //一对多 : 一个部门有【多个职务】
private Set<CrmPost> posts=new HashSet<CrmPost>(); public String getDepId() {
return depId;
} public void setDepId(String depId) {
this.depId = depId;
} public String getDepName() {
return depName;
} public void setDepName(String depName) {
this.depName = depName;
} public Set<CrmPost> getPosts() {
return posts;
} public void setPosts(Set<CrmPost> posts) {
this.posts = posts;
} @Override
public String toString() {
return "CrmDepartment [depId=" + depId + ", depName=" + depName + "]";
} }
CrmPost:
package com.learning.crm.post.domain; import java.util.HashSet;
import java.util.Set; import com.learning.crm.department.domain.CrmDepartment;
import com.learning.crm.staff.domain.CrmStaff; public class CrmPost {
/*
*
CREATE TABLE `crm_post` (
`postId` varchar(255) NOT NULL PRIMARY KEY,
`postName` varchar(100) DEFAULT NULL,
`depId` varchar(255) DEFAULT NULL,
CONSTRAINT FOREIGN KEY (`depId`) REFERENCES `crm_department` (`depId`)
);
*
*/ private String postId;
private String postName; //多对一 多个职务对应【一个部门】
private CrmDepartment department; //一对多 一个职务有【多个员工】
private Set<CrmStaff> staffs=new HashSet<CrmStaff>(); public String getPostId() {
return postId;
} public void setPostId(String postId) {
this.postId = postId;
} public String getPostName() {
return postName;
} public void setPostName(String postName) {
this.postName = postName;
} public CrmDepartment getDepartment() {
return department;
} public void setDepartment(CrmDepartment department) {
this.department = department;
} public Set<CrmStaff> getStaffs() {
return staffs;
} public void setStaffs(Set<CrmStaff> staffs) {
this.staffs = staffs;
} @Override
public String toString() {
return "CrmPost [postId=" + postId + ", postName=" + postName + ", department=" + department + "]";
} }
CrmStaff:
package com.learning.crm.staff.domain;
import java.util.Date;
import com.learning.crm.post.domain.CrmPost;
public class CrmStaff {
/*
*
CREATE TABLE `crm_staff` (
`staffId` VARCHAR(255) NOT NULL PRIMARY KEY,
`loginName` VARCHAR(100) DEFAULT NULL,
`loginPwd` VARCHAR(100) DEFAULT NULL,
`staffName` VARCHAR(100) DEFAULT NULL,
`gender` VARCHAR(20) DEFAULT NULL,
`onDutyDate` DATETIME DEFAULT NULL,
`postId` VARCHAR(255) DEFAULT NULL,
CONSTRAINT FOREIGN KEY (`postId`) REFERENCES `crm_post` (`postId`)
);
*
*/
private String staffId;
private String loginName;
private String loginPwd;
private String staffName;
private String gender;
private Date onDutyDate;
//多对一 多个员工对应【一个职务】
private CrmPost post;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getStaffName() {
return staffName;
}
public void setStaffName(String staffName) {
this.staffName = staffName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getOnDutyDate() {
return onDutyDate;
}
public void setOnDutyDate(Date onDutyDate) {
this.onDutyDate = onDutyDate;
}
public CrmPost getPost() {
return post;
}
public void setPost(CrmPost post) {
this.post = post;
}
@Override
public String toString() {
return "CrmStaff [staffId=" + staffId + ", loginName=" + loginName + ", loginPwd=" + loginPwd + ", staffName="
+ staffName + ", gender=" + gender + ", onDutyDate=" + onDutyDate + ", post=" + post + "]";
}
}
spring中多表查询+条件查询
package com.learning.crm.staff.dao.impl; import static org.junit.Assert.*; import java.io.Serializable;
import java.util.List; import org.aspectj.weaver.patterns.ThisOrTargetAnnotationPointcut;
import org.junit.Test;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.learning.crm.department.dao.DepartmentDao;
import com.learning.crm.post.dao.PostDao;
import com.learning.crm.post.dao.impl.PostDaoImpl;
import com.learning.crm.staff.dao.StaffDao;
import com.learning.crm.staff.domain.CrmStaff; public class StaffDaoImpl extends HibernateDaoSupport implements StaffDao{ private PostDao postDao; public void setPostDao(PostDao postDao) {
this.postDao = postDao;
} @Override
public List<CrmStaff> findAllStaffByCondition(String postName, String depName, String staffName) { //where连接查询
// List<Object[]> list = this.getHibernateTemplate().find(" select s.staffName,p.postName,d.depName from CrmStaff s,CrmPost p,CrmDepartment d where s.post=p "
// + "and s.post.department=d and p.postName =? and d.depName=? and s.staffName=? ",postName,depName,staffName);
//join两表连接查询
// List<Object[]> list = this.getHibernateTemplate().find(" select s.staffName,p.postName,d.depName from CrmStaff s left join s.post p where 1=1 and "
// + " p.postName =? and s.staffName=? ",postName,staffName); //join三表连接查询
List<CrmStaff> list = this.getHibernateTemplate().find(" select s from CrmStaff s left join s.post p left join p.department d where 1=1 and "
+ " d.depName=? and p.postName =? and s.staffName=? ",depName,postName,staffName); //+ " p.postName =? and s.staffName=? ",postName,staffName
//and p.postName =? and=d.depName=? and s.staffName=?
//where s.post.postName=p.postName
//s.post.department.depName=d.depName /*for (Object[] objects : list) {
for (Object object : objects) {
System.out.print(object);
}
System.out.println();
}*/ for (CrmStaff object : list) {
object.getPost().getDepartment().getDepName();
object.getPost().getPostName();
System.out.println(object);
} return null;
} }
HQL语句:三表查询(一对多,一对多)的更多相关文章
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- hql语句关联查询(select new )
在 new bean()中,对象里要有其构造方法,查询参数必须是构造方法中的参数,get set也要同步 类似于 String hql= "select new A(a.id, a.na ...
- hibernate的三表查询
表的关系: Cardgraderule 1:n Cardgrade Cardgrade 1:n Acardtype 实体类: public class C ...
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- Hibernate写hql语句与不写hql语句的区别?
写hql语句与不写hql语句的区别? 写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成. 不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成. 二者选 ...
- hql语句查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Mybatis中的多表查询 多对一,一对多
示例:用户和账户 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) 步骤: 1.建立两张表:用户表,账户表 让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中 ...
- hql语句查询实体类采用list方法的返回结果集
在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...
- 使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错
问题描述: 今天在使用HQL的按照参数的名字查询数据库信息的时候报错如下: org.hibernate.QueryException: Space is not allowed after param ...
- [Hibernate] 通过 properties 类和 hql 语句进行动态查询
//需要保证Emp和EmpProperties中的setter和getter以及属性以及 参数占位符(:eName) 的一致//动态查询 @Test public void test4(){ EmpP ...
随机推荐
- js 逗号操作符
有一道js面试题,题目是这样的:下列代码的执行结果是什么,为什么? var i, j, k; for (i=0, j=0; i<10, j<6; i++, j++) { k = i+j; ...
- Javaworkers团队第四周项目总结
本周项目进展 本周是我们的项目开发的第四周,在之前的一周,我们小组在合作的情况下基本完成了项目代码的框架编写,我们组的项目课题,小游戏--贪吃蛇以及可以运行,可以进行简单的游戏,但是我们在思考之后发现 ...
- 使用javascript模拟常见数据结构(四)
七.树 树是一种非线性的分层的数据结构,在现实生活中比较常见的例子比如家谱和公司的组织架构图,如下所示: 一个树结构存在着一系列的父子结构,并且有着一个根节点,这种结构本质上表明了一对多的关系. 那, ...
- 【JMeter】 使用Synchronizing Timer设置请求集合点,实现绝对并发
布局设置说明 参数说明: Number of Simulated Users to Group 每次释放的线程数量.如果设置为0,等同于设置为线程租中的线程数量. Timeout in millise ...
- maven3常用命令、java项目搭建、web项目搭建
------------------------------maven3常用命令--------------------------- 1.常用命令 1)创建一个Project mvn archety ...
- vue双向数据绑定最最最最最简单直观的例子
vue双向数据绑定最最最最最简单直观的例子 一.总结 一句话总结:双向绑定既不仅model可以影响view的数据,view也可以影响model的数据 view model 数据 1.vue双向数据绑定 ...
- MySQL分页查询大数据量优化方法
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...
- 雷林鹏分享:Ruby 发送邮件 - SMATP
Ruby 发送邮件 - SMATP SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. ...
- Android-----------广告图片轮播控件
Banner广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式.动画.轮播和切换时间.位置.图片加载框架等! 很多Android APP中都有广告栏,我也用过很多次了,特来写一篇博文. 先 ...
- C#皮肤之IrisSkin4.dll
1. 将IrisSkin4.dll动态文件导入当前项目引用中.具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll文件,然后加 ...