Mybatis多表連接查詢

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章