mybatis文件映射之关联查询初探一

现在有一数据库mybatis,两张数据表

tbl_department

 

tbl_employee

 

其中tbl_employee表中的d_id关联tbl_department表中的id字段

Employee.java

public class Employee {
    private Integer id;
     String lastName;
     String gender;
     String email;
    Department dept;
}

Department.java

 Department {
     String deptName;
}

(省略了getters和setters以及toString方法)

EmployeeMapper.java

    public Employee getEmpAndDept(Integer id);

EmployeeMapper.xml

    <resultMap type="com.gong.mybatis.bean.Employee" id="MySimpleMap">
        id column="id" property="id"/>
        result ="last_name"="lastName"="gender"="gender"="email"="email"="did"="dept.id"="dept_name"="dept.deptName"/>
    </resultMap>
    select id="getEmpAndDept" resultMap>
        SELECT e.id,e.last_name,e.gender,e.email,d.dept_name,d.id did 
        FROM tbl_employee e,tbl_department d
        WHERE e.d_id = d.id and e.id=#{id};
    select>

说明:可以支持级联属性映射,由于我们在select标签中为tbl_department中的id取了别名,因此可以直接在resultMap中对did进行级联映射。

最后进行测试:

package com.gong.mybatis.test;

import java.io.IOException;
 java.io.InputStream;
 java.util.Map;

 org.apache.ibatis.io.Resources;
 org.apache.ibatis.session.SqlSession;
 org.apache.ibatis.session.SqlSessionFactory;
 org.apache.ibatis.session.SqlSessionFactoryBuilder;
 org.junit.Test;

 com.gong.mybatis.bean.Employee;
 com.gong.mybatis.dao.EmployeeMapperPlus;

 TestMybatis2 {
    
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(is);
    }

    @Test
    void test()  IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.);
            Employee employee = mapper.getEmpAndDept(3);
            System.out.println(employee);
            System.out.println(employee.getDept());
            openSession.commit();
        } finally {
            openSession.close();
        }
        
    }

}

输出:

DEBUG 01-20 12:15:43,557 ==> Preparing: SELECT e.id,d.id did FROM tbl_employee e,tbl_department d WHERE e.d_id = d.id and e.id=?; (BaseJdbcLogger.java:145)
DEBUG 01-20 12:15:43,611 ==> Parameters: 3(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-20 12:15:43,652 <== Total: 1 (BaseJdbcLogger.java:145)
Employee [id=3,lastName=小红,gender=0,email=xiaohong@qq.com,dept=Department [id=1,deptName=开发部]]
Department [id=1,deptName=开发部]

说明关联查询是成功的。

相关文章

1.pom.xml引入依赖 &lt;dependency&gt; &lt;gro...
&lt;?xml version=&quot;1.0&quot; encoding=&a...
准备工作 ① 创建数据库&amp;数据表 ## 创建数据库 CREA...
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、...
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串...
resultMap作用是处理数据表中字段与java实体类中属性的映射关...