0、准备SQL(mysql)

CREATE TABLE Teachers(
	tid INT(5) PRIMARY KEY,
	tname VARCHAR(10)
);

CREATE TABLE Courses(
	cid INT(5) PRIMARY KEY,
	cname VARCHAR(10)
);

CREATE TABLE R_Teacher_Course(
	tid INT(5),
	cid INT(5),
	PRIMARY KEY(tid,cid),
	CONSTRAINT r_teacher_fk FOREIGN KEY(tid) REFERENCES Teachers(tid),
	CONSTRAINT r_course_fk FOREIGN KEY(cid) REFERENCES Courses(cid)
);

INSERT INTO Teachers(tid,tname) VALUES(1,'张老师');
INSERT INTO Teachers(tid,tname) VALUES(2,'李老师');
INSERT INTO Teachers(tid,tname) VALUES(3,'方老师');

INSERT INTO Courses(cid,cname) VALUES(1,'语文');
INSERT INTO Courses(cid,cname) VALUES(2,'数学');
INSERT INTO Courses(cid,cname) VALUES(3,'英语');

INSERT INTO R_Teacher_Course(tid,cid) VALUES(1,1);
INSERT INTO R_Teacher_Course(tid,cid) VALUES(1,2);
INSERT INTO R_Teacher_Course(tid,cid) VALUES(2,2);
INSERT INTO R_Teacher_Course(tid,cid) VALUES(2,3);
INSERT INTO R_Teacher_Course(tid,cid) VALUES(3,3);
INSERT INTO R_Teacher_Course(tid,cid) VALUES(3,1);

SELECT * FROM Teachers;
SELECT * FROM Courses;
SELECT * FROM R_Teacher_Course;

SELECT t.tid,t.tname,c.cid,c.cname 
FROM teachers t 
	INNER JOIN r_teacher_course r ON t.tid=r.tid
	INNER JOIN courses c ON r.cid=c.cid


1、entity类

Teacher.java

package com.rk.entity;

import java.util.ArrayList;
import java.util.List;

public class Teacher {
    private Integer id;
    private String name;
    private List courses = new ArrayList();
    public Teacher(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List getCourses() {
        return courses;
    }
    public void setCourses(List courses) {
        this.courses = courses;
    }
    
}

Course.java

package com.rk.entity;

import java.util.ArrayList;
import java.util.List;

public class Course {
    private Integer id;
    private String name;
    private List teachers = new ArrayList();
    public Course(){}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List getTeachers() {
        return teachers;
    }
    public void setTeachers(List teachers) {
        this.teachers = teachers;
    }
    
}


2、mybatis的映射文件

TeacherMapper.xml




    
        
        
    
    
        select t.tid,t.tname,c.cid,c.cname 
        from teachers t 
                inner join r_teacher_course r on t.tid=r.tid
                inner join courses c on r.cid=c.cid
        where c.cname=#{courseName}
    

CourseMapper.xml




    
        
        
    
    
        select c.cid,c.cname 
        from teachers t 
                inner join r_teacher_course r on t.tid=r.tid
                inner join courses c on r.cid=c.cid
        where t.tname=#{teacherName}       
    


3、mybatis的主配置文件

mybatis.xml




    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

db.properties

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/testdb
mysql.username=root
mysql.password=root


4、MyBatisUtils.java

package com.rk.utils;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;

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 static ThreadLocal threadLocal = new ThreadLocal();
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    
    private MyBatisUtils(){}
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = threadLocal.get();
        if(sqlSession == null){
            sqlSession = sqlSessionFactory.openSession();
            threadLocal.set(sqlSession);
        }
        return sqlSession;
    }
    
    public static void closeSqlSession(){
        SqlSession sqlSession = threadLocal.get();
        if(sqlSession != null){
            sqlSession.close();
            threadLocal.remove();
        }
    }
    
    public static void main(String[] args) {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        Connection conn = sqlSession.getConnection();
        System.out.println(conn);
    }
}


5、TeacherCourseDao.java

package com.rk.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.rk.entity.Course;
import com.rk.entity.Teacher;
import com.rk.utils.MyBatisUtils;

public class TeacherCourseDao {
    public List findTeacherByCourseName(String courseName){
        SqlSession sqlSession = null;
        try{
            sqlSession = MyBatisUtils.getSqlSession();
            List list = sqlSession.selectList("teacherNamespace.findTeacherByCourseName", courseName);
            sqlSession.commit();
            return list;
        }
        catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw new RuntimeException(e);
        }
        finally{
            MyBatisUtils.closeSqlSession();
        }
    }
    
    public List findCourseByTeacherName(String teacherName){
        SqlSession sqlSession = null;
        try{
            sqlSession = MyBatisUtils.getSqlSession();
            List list = sqlSession.selectList("courseNamespace.findCourseByTeacherName", teacherName);
            sqlSession.commit();
            return list;
        }
        catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw new RuntimeException(e);
        }
        finally{
            MyBatisUtils.closeSqlSession();
        }
    }
    
    public static void main(String[] args) {
        TeacherCourseDao dao = new TeacherCourseDao();
        List teacherList = dao.findTeacherByCourseName("数学");
        for(Teacher teacher : teacherList){
            System.out.println(teacher.getName());
        }
        
        List courseList = dao.findCourseByTeacherName("李老师");
        for(Course course : courseList){
            System.out.println(course.getName());
        }
    }
}