多对多=1对多+多对一
一对多
实验准备
- 准备实验环境,打开终端进行如下操作。
cd /home/project
wget https://labfile.oss.aliyuncs.com/courses/4780/MyBatisEmpDemo04-01.zip
unzip MyBatisEmpDemo04-01.zip && rm MyBatisEmpDemo04-01.zip
- 下载数据库文件,然后启动数据库服务,创建
MyBatisDemo
数据库和表并导入初始数据。
cd /home/project
wget https://labfile.oss.aliyuncs.com/courses/4780/staffsystem.sql
sudo service mysql start
mysql -u root < /home/project/staffsystem.sql
执行结果如下图所示:
然后我们主要在EmpProRMapper 和test里面书写代码
@ 进入EmpProRMapper.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="org.lanqiao.mapper.EmployeeMapper">
<select id="id名称" resuleType="返回值类型" parameterType="输入的参数">
编写sql语句
select * from a
</select>
<!-- 根据项目编号查询参与该项目的所有员工信息 -->
<resultMap id="employeeResultMap" type="Employee" autoMapping="true">
<id property="eNo" column="eNo"/>
</resultMap>
<select id="queryAllEmployeeByPNo" parameterType="string" resultMap="employeeResultMap">
select e.* from employee e,emp_pro_r epr where e.eNo = epr.eNo and epr.pNo=#{pNo}
</select>
<!-- 根据员工编号查询该员工参与的所有项目信息 -->
<resultMap id="projectResultMap" type="Project" autoMapping="true">
<id property="pNo" column="pNo"/>
</resultMap>
<select id="queryAllProjectByEno" parameterType="string" resultMap="projectResultMap">
select p.* from project p,emp_pro_r epr where p.pNo = epr.pNo and epr.eNo=#{eNo}
</select>
</mapper>
@然后·去相应的.java文件编写接口
package
/**
* 定一个 EmployeeMapper 接口
* @author lanqiao
*/
public interface EmployeeMapper {
public resuleType值 id名(入参);
/**
* 根据项目编号查询参与该项目的所有员工信息
* @param pNo 项目编号
* @return 返回该项目下的所有员工信息
*/
public List<Employee> queryAllEmployeeByPno(String pNo);
/**
* 根据员工编号查询该员工参与的所有项目信息
* @param eNo 员工编号
* @return 返回该员工参与的所有项目信息
*/
public List<Project> queryAllProjectByEno(String eNo);
}
@书写实体类,根据数据表
// 员工编号
private String eNo;
// 部门编号
private String dNo;
// 岗位编号
private String jNo;
// 员工姓名
private String eName;
// 员工身份证号
private String cardId;
// 性别
private String sex;
// 手机号
private String phone;
// 邮箱
private String email;
// 一个员工参与多个项目
private List<Project> projects;
。。。。get、set.tostring 构造器;
@最后去test里面书写代码
@Before
public void before() throws IOException{
String resource = "mybatis-config.xml";
//加载 MyBatis 的配置文件
Reader reader = Resources.getResourceAsReader(resource);
//创建 SqlSession 的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能够执行 SQL 映射文件中 SQL 语句的 SqlSession 对象
session = sessionFactory.openSession();
}
@Test
public void test() throws IOException{
XXXMapper mapper=session.getMapper(XXXMapper.class);
返回值 xx=mapper.方法名字();
session.close();
}