实体类:
package cn.et.lesson03.emp;
import cn.et.lesson03.dept.Dept;
public class Emp {
/**
* 对象关系映射
* 举例:一个部门中有过个员工
* 那么查询唯一的一个员工时,部门信息是确定的
* (即多对一的关系)
* Emp中添加Dept来体现
*/
private String empId;
private String empName;
//部门对象
private Dept dept;
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [empId=" + empId + ", empName=" + empName + ", dept="
+ dept + "]";
}
}
接口:
package cn.et.lesson03.emp;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import cn.et.lesson03.dept.Dept;
public interface EmpMapper {
/**
* 将列名和字段名 建立关系
* property指向 java中的实体类字段 区分大小写
* column指向 数据库中的 列名不分区大小写
* @param empNo
* @return
*
* <!-- emp中多对一使用xml演示 -->
<resultMap type="cn.et.mybatis.lesson03.result.anno.Emp" id="myEmp">
<result column="empNo" property="empId"/>
<association property="dept" select="selectMyDept" column="deptno" javaType="cn.et.mybatis.lesson03.result.xml.Dept">
</association>
</resultMap>
*
*
*/
@Results({
@Result(column="empno",property="empId"),
@Result(column="ename",property="empName"),
/*noe是Mybatis中 多对一 的关键字
* @One指向 一 的查询语句
* 这里的column 是将selectEmpByEmpNo查询出来的deptno传入到selectDeptByDeptNO
* javaType 申明 one=@One查询出来的 结果类型
* property="dept" 将结果 存入dept
*/
@Result(column="deptno",property="dept", javaType=Dept.class, one=@One(select="cn.et.lesson03.emp.EmpMapper.selectDeptByDeptNO"))
})
@Select("select empno,ename,deptno from emp where empno=#{0}")
public Emp selectEmpByEmpNo(String empNo);
@Results({
@Result(column="deptNo",property="deptId"),
@Result(column="dname",property="deptName"),
@Result(column="loc" , property="deptLoc"),
})
@Select("select * from dept where deptno=#{0}")
public Dept selectDeptByDeptNO(String deptNo);
}
Test
package cn.et.lesson03.emp;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
private static SqlSession getSession() {
//因为需要的mybatis.xml文件 不在同一层目录 所以这里才使用 cn.et.lesson01.TestMybatis
InputStream is = TestMybatis.class.getResourceAsStream("/cn/et/lesson03/mybatis.xml");
SqlSessionFactory session = new SqlSessionFactoryBuilder().build(is);
//openSession()获取操作数据库的类 SqlSession
SqlSession sqlSession = session.openSession();
return sqlSession;
}
public static void main(String[] args) {
SqlSession sqlSession = getSession();
//通过动态代理创建一个实体类 通过接口会自动调用配置文件
EmpMapper dm = sqlSession.getMapper(EmpMapper.class);
Emp emp = dm.selectEmpByEmpNo("7900");
System.out.println(emp);
}
}
Run