1.在Eclipse中新建java项目。
2.在项目新建文件夹lib,并将mybatis-3.4.6.jar和mysql-connector-java-5.1.27.jar拷贝到该文件夹下,然后选中两个jar包右键-->BuildPath-->Add to Build Path。
3.在src目录下新建mybatisconf.xml配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<!-- <typeAliases>
<package name="com.scope.domain"/> 别名默认与类同名
</typeAliases> -->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/scope/domain/departmentMapper.xml"/>
</mappers>
</configuration>
注意:在配置文件中如果没有配置<typealiases>别名,则在映射文件中涉及到类名的时候要用类的完整路径。
配置文件中关于数据源的内容从db.properties文件中读取
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/Primary_school?useUnicode\=true&characterEncoding\=utf-8
username=root
password=password
4.编写映射文件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">
<mapper namespace="com.scope.domain.DepartmentMapper">
<select id="getDepartment" parameterType="int" resultMap="departmentMap" >
select e.ename,e.job,e.salary,d.deptno from employee e,department d where d.deptno=e.deptno and d.deptno = #{deptno}
</select><!-- sql语句中要查询Department的主键,否则会因为没有主键查询不到Department从而无法获取Employee -->
<resultMap type="com.scope.domain.Department" id="departmentMap">
<id property="deptno" column="deptno"/>
<result property="dname" column="dname"/>
<result property="loc" column="loc"/>
<collection property="employees" ofType="com.scope.domain.Employee">
<id property="empno" column="empno"/>
<result property="ename" column="ename"/>
<result property="job" column="job"/>
<result property="hiredate" column="hiredate"/>
<result property="salary" column="salary"/>
<result property="deptno" column="deptno"/>
</collection>
</resultMap>
</mapper>
5.在src目录下新建包com.scope.domain,新建实体类Department和Employee。
package com.scope.domain;
//实体类Employee
public class Employee {
private Integer empno;//员工编号
private String ename;//员工姓名
private String job;//员工工作
private String hiredate;//员工雇佣日期
private Float salary;//员工工资
private Integer deptno;//员工所属部门编号
/*getter和setter方法*/
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getHiredate() {
return hiredate;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return "Employee [empno=" + empno + ", ename=" + ename + ", job=" + job + ", hiredate=" + hiredate + ", salary="
+ salary + ", deptno=" + deptno + "]";
}
}
package com.scope.domain;
//实体类Department
public class Department {
private Integer deptno;//部门编号
private String dname;//部门名称
private String loc;//部门地址
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Department [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}
6.编写工具类MybatisUtils
package com.scope.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtils {
private MybatisUtils(){}
private static SqlSessionFactory factory=null;
static
{
try {
InputStream stream=Resources.getResourceAsStream("mybatisconf.xml");
factory=new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession openSession()
{
return factory.openSession();
}
public static void closeSession(SqlSession session)
{
session.close();
}
}
7.编写测试类,运行程序
package com.scope.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.scope.domain.Department;
import com.scope.domain.Employee;
import com.scope.utils.MybatisUtils;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
SqlSession session=MybatisUtils.openSession();
String statement="com.scope.domain.DepartmentMapper.getDepartment";
//求班级下有多少学生
Department d=session.selectOne(statement, 4);
List <Employee> employees=d.getEmployees();
for(Employee e:employees)
{
System.out.println(e.toString());
}
}
}
8.工程目录结构如下图
9.数据库表结构如下所示