Mybatis 多对一 和一对多 关联配置
简单的例子,整理下,防止自己忘记了.
本例中两个业务对象: Employer,Department. 二者关系是 N<-->1的关系
Employer.java
package com.mymaven.mybatisdemo.po;
public class Employer {
private String em_id;
private String name;
private String station;
private String work_years;
private String create_date;
private Department dpt; //隶属于哪个部门
public Department getDpt() {
return dpt;
}
public void setDpt(Department dpt) {
this.dpt = dpt;
}
public String getEm_id() {
return em_id;
}
public void setEm_id(String em_id) {
this.em_id = em_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStation() {
return station;
}
public void setStation(String station) {
this.station = station;
}
public String getWork_years() {
return work_years;
}
public void setWork_years(String work_years) {
this.work_years = work_years;
}
public String getCreate_date() {
return create_date;
}
public void setCreate_date(String create_date) {
this.create_date = create_date;
}
public Employer() {
}
}
Department.java
package com.mymaven.mybatisdemo.po;
import java.util.List;
public class Department {
private String dp_id;
private String dp_name;
private String cost_center;
private List<Employer> employerList;
public String getDp_id() {
return dp_id;
}
public void setDp_id(String dp_id) {
this.dp_id = dp_id;
}
public String getDp_name() {
return dp_name;
}
public void setDp_name(String dp_name) {
this.dp_name = dp_name;
}
public String getCost_center() {
return cost_center;
}
public void setCost_center(String cost_center) {
this.cost_center = cost_center;
}
public List<Employer> getEmployerList() {
return employerList;
}
public void setEmployerList(List<Employer> employerList) {
this.employerList = employerList;
}
public Department() {
super();
}
}
EmployerDao.java
package com.mymaven.mybatisdemo.dao;
import com.mymaven.mybatisdemo.po.Employer;
import java.util.List;
public interface EmployerDao {
public Employer getEmpByName(String name);
public List<Employer> getAllEmpDpt(String dp_id);
}
DepartmentMapper.java (类名忘记统一了...)
package com.mymaven.mybatisdemo.dao;
import com.mymaven.mybatisdemo.po.Department;
import java.util.List;
import java.util.Map;
public interface DepartmentMapper {
public void addDepartMent(Department dpt);
public Department queryByDpName(String dp_name);
//public Department getDepartmentById(String dp_id);
public List<Department> queryAllDepartment();
public void updateDepartment(Department dpt);
}
EmployerMapper.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">
<!-- 此处namespace需要指定dao接口 -->
<mapper namespace="com.mymaven.mybatisdemo.dao.EmployerDao">
<resultMap id="employerResult" type="Employer">
<id property="em_id" column="em_id" />
<result property="name" column="name" />
<result property="station" column="station" />
<result property="work_years" column="work_years" />
<result property="create_date" column="create_date" />
<association property="dpt"
resultMap="com.mymaven.mybatisdemo.dao.DepartmentMapper.departMentResult" /><!--注意此处引用的方式 -->
</resultMap>
<select id="getEmpByName" parameterType="java.lang.String" resultMap="employerResult" >
select *
from t_employer e inner join t_department t
on e.dp_id = t.dp_id
where e.name = #{name}
</select>
</mapper>
DepartmentMapper.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">
<!-- 此处namespace需要指定dao接口 -->
<mapper namespace="com.mymaven.mybatisdemo.dao.DepartmentMapper">
<!-- property 关联属性 Employer 关联对象的类 -->
<resultMap id="departMentResult" type="Department">
<id column="dp_id" property="dp_id" />
<result column="dp_name" property="dp_name" />
<result column="cost_center" property="cost_center" />
<collection property="employerList" ofType="Employer"
resultMap="com.mymaven.mybatisdemo.dao.EmployerDao.employerResult" /> <!--注意此处引用的方式 -->
</resultMap>
<select id="queryByDpName" resultMap="departMentResult" parameterType="java.lang.String">
select *
from t_employer e inner join t_department t
on e.dp_id = t.dp_id
where t.dp_name = #{dp_name}
</select>
</mapper>
测试代码:
package com.mymaven.mybatisdemo.test;
import com.mymaven.mybatisdemo.dao.DepartmentMapper;
import com.mymaven.mybatisdemo.dao.EmployerDao;
import com.mymaven.mybatisdemo.dao.GroupDao;
import com.mymaven.mybatisdemo.po.Employer;
import com.mymaven.mybatisdemo.po.Group;
import com.mymaven.mybatisdemo.utils.MybatisHelper;
import com.mymaven.mybatisdemo.po.Department;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import java.util.List;
import java.util.Map;
public class TestMyabtisDemo {
public static void main(String[] args){
TestMyabtisDemo tmbd = new TestMyabtisDemo();
tmbd.getDptAndEmps();
}
//测试1对多的关联方式 public void getDptAndEmps(){ ApplicationContext act = new FileSystemXmlApplicationContext("classpath*:applicationContext.xml"); DepartmentMapper departmentMapper = act.getBean(DepartmentMapper.class); Department department = departmentMapper.queryByDpName("部门1"); System.out.println(department.getDp_id() + "- " +department.getDp_name() + " - " +department.getCost_center() + " 员工数量 " +department.getEmployerList().size()
);
for(Employer emp:department.getEmployerList()){ System.out.println(emp.getName() + " - " +emp.getDpt().getDp_name() + "-" + emp.getStation());
} }
//测试1对1的关联方式 public void getEmployerAndDpt(){ ApplicationContext act = new FileSystemXmlApplicationContext("classpath*:applicationContext.xml"); EmployerDao empm = act.getBean(EmployerDao.class); Employer emp = empm.getEmpByName("刘江"); System.out.println(emp.getName() + " - " + emp.getDpt()+ " = " + emp.getStation() +" - " );
}
}
浙公网安备 33010602011771号