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() +" - " );

 }

}



 



 

 

posted on 2013-06-13 15:14  babyblue  阅读(251)  评论(0)    收藏  举报