mybatis 查询一对多 集合中没有值为啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 查询一对多 集合中没有值为啥相关的知识,希望对你有一定的参考价值。

参考技术A 可以通过关系映射查询出来 请看下面 在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。 mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联...本回答被提问者和网友采纳

mybatis中的一对多的查询

一对多分为单条sq语句l和多条sql语句

下面就以员工和就职部门为例:

 

部门实体类

private Integer deptno;
private String deptname;
//植入员工实体集合
private List<Emp> emps=new ArrayList<Emp>();

public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}

public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}

public List<Emp> getEmps() {return emps;}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}

员工实体类
private Integer empno;
private String empname;
private Integer deptno;
public Integer getEmpno() {return empno;}
public void setEmpno(Integer empno) {
this.empno = empno;
}

public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}

public Integer getDeptno() {return deptno;}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
 单条sql语句

接口

/**
* 根据部门对象编号,查询部门对象,对象里面包含的员工集合
*一对多,一条sql语句
* @param deptno
* @return
*/
public Dept findEmpByDept(int deptno);


xml文件(小配置)
<!--根据部门对象编号,查询部门对象,对象里面包含的员工集合
一对多 一条sql语句
-->
<resultMap id="deptMapper" type="Dept">
<id column="deptno" property="deptno"></id>
<result column="deptname" property="deptname"></result>
<collection property="emps" ofType="Emp">
<id column="empno" property="empno"></id>
<result column="empname" property="empname"></result>
</collection><!--由于此处是集合,所以用cillection-->
</resultMap>

<select id="findEmpByDept" resultMap="deptMapper">
SELECT dept.deptno,dept.deptname,empname,empno
FROM Dept,Emp
WHERE dept.deptno=emp.deptno AND emp.deptno=#{deptno}
</select>


测试类

/**
* 根据部门对象编号,查询部门对象,对象里面包含的员工集合
* 一对多 一条sql语句
*/
@Test
public void findEmpByDept(){
SqlSession session = MyBatisUtil.getSession();
IDeptDAO mapper = session.getMapper(IDeptDAO.class);
Dept dept = mapper.findEmpByDept(1);
System.out.println(dept.getDeptname());
for(Emp item:dept.getEmps()){
System.out.println(item.getEmpname());
}
session.commit();
session.close();
}

多条sql语句

接口
/**
* 根据部门对象编号,查询部门对象,对象里面包含的员工集合
*一对多,多条sql语句
* @param deptno
* @return
*/
public Dept findEmpByDeptManySql(int deptno);



xml文件(小配置)

<!--根据部门对象编号,查询部门对象,对象里面包含的员工集合-->
<!-- 一对多 多条sql语句-->
<resultMap id="deptMapperManySql" type="Dept">
<id column="deptno" property="deptno"></id>
<result column="deptname" property="deptname"></result>
<collection property="emps" ofType="Emp" select="getEmpByDeptNo" column="deptno"></collection>
</resultMap>
<select id="getEmpByDeptNo" resultType="Emp">
SELECT *from Emp where deptno=#{deptno}
</select>
<select id="findEmpByDeptManySql" resultMap="deptMapperManySql">
SELECT * FROM Dept WHERE deptno=#{deptno}
</select>



测试类

/**
* 根据部门对象编号,查询部门对象,对象里面包含的员工集合
* 一对多 多条sql语句
*/
@Test
public void findEmpByDeptManySql(){
SqlSession session = MyBatisUtil.getSession();
IDeptDAO mapper = session.getMapper(IDeptDAO.class);
Dept dept = mapper.findEmpByDeptManySql(3);
System.out.println(dept.getDeptname());
for(Emp item:dept.getEmps()){
System.out.println(item.getEmpname());
}
session.commit();
session.close();
}




 
 
 


 

以上是关于mybatis 查询一对多 集合中没有值为啥的主要内容,如果未能解决你的问题,请参考以下文章

【Mybatis】collection一对多查询子查询集合不为空,但属性值为空

MyBatis---集合查询(一对多)

MyBatis一对多和一对一xml文件的配置

Mybatis -- Mybatis多表查询:一对一(resultmapassociation匹配)一对多(collection集合)多对多(中间表)

MyBatis关联查询,一对多关联查询

MyBatis高级查询 一对多映射