一对多关系实现部门—>员工的查询
注意:这里是在《一对一关系实现员工—>部门的查询》的基础进行编写代码
《一对一关系实现员工—>部门的查询》
参考代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yzh7.mapper.DeptMapper">
<!--1对多关联映射
autoMapping:让mybatis自动完成属性和列名映射。
主数据的id(主键必须配置)
-->
<resultMap id="deptMap" type="dept" autoMapping="true">
<!--映射部门数据
id:表示主键列的映射定义
result:普通列的映射
property:实体属性
column:查询表中的列
-->
<id property="deptId" column="dept_id"/>
<!-- <result property="deptName" column="dept_name"/>-->
<!-- <result property="description" column="description"/>-->
<!--用collection定义部门中的员工集合数据的映射关系
ofType:用于指定集合中元素的类型
-->
<collection property="empList" ofType="emp" autoMapping="true">
<!-- <id property="empId" column="emp_id"/>-->
<!-- <result property="empName" column="emp_name"/>-->
<!-- <result property="sex" column="sex"/>-->
<!-- <result property="phone" column="phone"/>-->
</collection>
</resultMap>
<select id="listAll" resultMap="deptMap">
select
d.dept_id,d.dept_name,d.description,
e.emp_id,e.emp_name,e.sex,e.phone
from t_dept d
join t_emp e
on d.dept_id=e.dept_id
</select>
</mapper>
项目整体布局:
注意:resoouces下方的com.yzh.mapper包创建错误!正确如下:
参考:mapper.xml文件和mapper接口没有对应
注意:映射器(mappers)的使用。这里使用映射器接口实现类的完全限定类名
运行结果展示:
修改添加的代码如下:
mybatis_config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.yzh7.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--定义关联的mapper接口,通过三一致的规则自动与mapper文件关联
<mapper class="com.yzh7.mapper.BookMapper"/>
<mapper class="com.yzh7.mapper.EmpMapper"/>-->
<package name="com.yzh7.mapper"/>
</mappers>
</configuration>
参考官网:mybatis映射器mappers
https://mybatis.org/mybatis-3/zh/configuration.html#mappers
DeptMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yzh7.mapper.DeptMapper">
<resultMap id="deptMap" type="dept">
<!-- emp_id,emp_name,sex,phone,dept_id-->
<!-- <!–id:表示表中的主键字段 column:查询表的列名 property:表示列名要映射到的实体属性–>-->
<id column="dept_id" property="deptId"/>
<!--result:定义普通列和属性的映射关系-->
<result column="dept_name" property="deptName"/>
<result column="description" property="description"/>
<!-- dept_id,dept_name,description-->
<!--通过association标签(1对1),设置员工关联的部门对象-->
<collection property="empList" ofType="emp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
<result column="sex" property="sex"/>
<result column="phone" property="phone"/>
</collection>
</resultMap>
<!--
resultType:只用于单表查询,并且查询结果列名和属性可以直接对应的情况。用于简单查询映射。
resultMap:用于多表查询,或者列名和属性映射关系负责的情况。用于复杂查询映射。
需要通过resultMap节点,配置结果的映射关系
-->
<select id="listAll" resultMap="deptMap">
select d.dept_id,d.dept_name,d.description,
e.emp_id,e.emp_name,e.sex,e.phone
from t_dept d
join t_emp e
on d.dept_id=e.dept_id
</select>
</mapper>
或者
DeptMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yzh7.mapper.DeptMapper">
<resultMap id="deptMap" type="dept" autoMapping="true">
<!-- emp_id,emp_name,sex,phone,dept_id-->
<!-- <!–id:表示表中的主键字段 column:查询表的列名 property:表示列名要映射到的实体属性–>-->
<id column="dept_id" property="deptId"/>
<!-- <!–result:定义普通列和属性的映射关系–>-->
<!-- <result column="dept_name" property="deptName"/>-->
<!-- <result column="description" property="description"/>-->
<!-- dept_id,dept_name,description-->
<!--通过association标签(1对1),设置员工关联的部门对象-->
<collection property="empList" ofType="emp" autoMapping="true">
<!-- <id column="emp_id" property="empId"/>-->
<!-- <result column="emp_name" property="empName"/>-->
<!-- <result column="sex" property="sex"/>-->
<!-- <result column="phone" property="phone"/>-->
</collection>
</resultMap>
<!--
resultType:只用于单表查询,并且查询结果列名和属性可以直接对应的情况。用于简单查询映射。
resultMap:用于多表查询,或者列名和属性映射关系负责的情况。用于复杂查询映射。
需要通过resultMap节点,配置结果的映射关系
-->
<select id="listAll" resultMap="deptMap">
select d.dept_id,d.dept_name,d.description,
e.emp_id,e.emp_name,e.sex,e.phone
from t_dept d
join t_emp e
on d.dept_id=e.dept_id
</select>
</mapper>
Demo4:
package com.yzh7.test;
import com.yzh7.entity.Dept;
import com.yzh7.entity.Emp;
import com.yzh7.mapper.DeptMapper;
import com.yzh7.mapper.EmpMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class demo4 {
//一对多,一个部门关联多个员工
@Test
public void test1(){
DeptMapper deptMapper=session.getMapper(DeptMapper.class);
List<Dept> deptList=deptMapper.listAll();
for(Dept dept:deptList){
System.out.println(dept);
}
}
private static SqlSessionFactory factory; //静态
private SqlSession session;
@BeforeClass
public static void befCla() throws IOException {
String resource = "mybatis_config.xml"; //mybatis_config.xml
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Before
public void bf(){
session=factory.openSession();
}
@After
public void af(){
session.commit();
session.close();
}
}
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118052.html