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.數據庫表結構如下所示