2018 IDEA mybatis 一对一

版权声明:柠萌 https://blog.csdn.net/Hack_Different/article/details/83004336

一、主表实体放从表对象

二、主表mapper放配置

三、测试


注:本次以 SyEmp员工 、SyDept部门 测试 , 一个员工对应一个部门。

一、主表实体放从表对象

private SyDept syDept;

public SyDept getSyDept() {
    return syDept;
}

public void setSyDept(SyDept syDept) {
    this.syDept = syDept;
}

二、主表mapper放配置

<第一种,联查映射>

<!--映射Student对象的resultMap(结果映射集)-->
<!--type为主表实体路径-->
<resultMap type="com.baidu.mybatis.pojo.SyEmp" id="SyEmpMapper">
    <result property="empId" column="Emp_ID" jdbcType="INTEGER"/>
    <result property="empName" column="Emp_Name" jdbcType="VARCHAR"/>
    <result property="empEmpno" column="Emp_EmpNo" jdbcType="VARCHAR"/>
    <result property="empPwd" column="Emp_Pwd" jdbcType="VARCHAR"/>
    <result property="empDeptid" column="Emp_DeptID" jdbcType="INTEGER"/>
    <result property="empRemark" column="Emp_Remark" jdbcType="VARCHAR"/>
    <result property="empDisabled" column="Emp_Disabled" jdbcType="INTEGER"/>
    <!--多对一关联映射:assoclation表示映射一个对象 -->
    <!--javaType为从表路径-->
    <association property="syDept" javaType="com.baidu.mybatis.pojo.SyDept">
        <result property="deptId" column="Dept_ID" jdbcType="INTEGER"/>
        <result property="deptName" column="Dept_Name" jdbcType="VARCHAR"/>
        <result property="deptRemark" column="Dept_Remark" jdbcType="VARCHAR"/>
        <result property="deptDisabled" column="Dept_Disabled" jdbcType="INTEGER"/>
    </association>

</resultMap>

<!--查询语句-->
<select id="queryById" resultMap="SyEmpMapper">
    select
      *
    from tapwater.sy_emp m,tapwater.sy_dept d
    where m.Emp_DeptID = d.Dept_ID and Emp_ID = #{empId}
</select>

<第二种,嵌套映射>

<!--映射Student对象的resultMap(结果映射集)-->
<!--type为主表实体路径-->
<resultMap type="com.baidu.mybatis.pojo.SyEmp" id="SyEmpMapper">
    <result property="empId" column="Emp_ID" jdbcType="INTEGER"/>
    <result property="empName" column="Emp_Name" jdbcType="VARCHAR"/>
    <result property="empEmpno" column="Emp_EmpNo" jdbcType="VARCHAR"/>
    <result property="empPwd" column="Emp_Pwd" jdbcType="VARCHAR"/>
    <result property="empDeptid" column="Emp_DeptID" jdbcType="INTEGER"/>
    <result property="empRemark" column="Emp_Remark" jdbcType="VARCHAR"/>
    <result property="empDisabled" column="Emp_Disabled" jdbcType="INTEGER"/>
    <!--多对一关联映射:assoclation表示映射一个对象 -->
    <!--javaType为从表路径,column为主表的列名,select为查询的语句,我们调用的是接口代理方法-->
    <association property="syDept" column="Emp_DeptID " javaType="com.baidu.mybatis.pojo.SyDept" 
        select="com.baidu.mybatis.dao.SyDeptDao.queryById" >
    </association>

</resultMap>

<!--查询语句-->
<select id="queryById" resultMap="SyEmpMapper">
    select
      *
    from tapwater.sy_emp
    where Emp_ID = #{empId}
</select>

注:从表mapper也必须有以下select

<!--查询语句-->
<select id="queryById" resultType="com.baidu.mybatis.pojo.SyDept">
    select
      *
    from tapwater.sy_dept
    where Dept_ID = #{deptId}
</select>

三、测试

public class Tests {

    public static void main(String[] args) throws Exception {

        /**
         * 获得SqlSession对象,通过SqlSession操作CRUD
         *
         */
        SqlSession sqlSession;

        //通过Resources类加载核心配置文件,得到文件的输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
        //创建会话工厂,编译配置文件流,获得sqlsessionfactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过sqlSessionFactory得到sqlsession对象
        sqlSession = sqlSessionFactory.openSession();

        SyEmpDao mapper = sqlSession.getMapper(SyEmpDao.class);
        System.out.println(mapper.queryById(1));

        sqlSession.commit();
        sqlSession.close();

    }
}

猜你喜欢

转载自blog.csdn.net/Hack_Different/article/details/83004336