Mybatis一对一、一对多、多对多查询。+MYSQL

场景:使用三张数据表:student学生表、teacher教师表、position职位表

一个学生可以有多为老师、一位老师可以有多个学生、但是一个老师只能有一个职位:教授、副教授、讲师;但是一个职位可以有多个老师:例如教授可以多人

这里则产生了:

一对一关系,从老师角度:老师对职位一对一

一对多关系,从职位角度:职位对老师一对多

多对多关系:查找被教授教导的所有学生(首先职位对老师一对多,老师再对学生再对多、这里便有了一对多对多)

数据表:

老师表

CREATE TABLE `tb_teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t_no` varchar(20) DEFAULT NULL,
  `t_name` varchar(20) DEFAULT NULL,
  `position_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

/*Data for the table `tb_teacher` */

insert  into `tb_teacher`(`id`,`t_no`,`t_name`,`position_id`) values
(1,'163314001','张文远',1),
(2,'163314002','赵传智',1),
(3,'163314003','风清扬',2),
(4,'163314004','王汇智',2),
(5,'163314005','汪思远',3);

学生表

CREATE TABLE `tb_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t_stu_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

/*Data for the table `tb_student` */

insert  into `tb_student`(`id`,`t_stu_name`) values 

(1,'赵依'),

(2,'钱迩'),

(3,'张山'),

(4,'李石'),

(5,'王武'),

(6,'马柳');

职位表

CREATE TABLE `tb_position` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t_pos_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

/*Data for the table `tb_position` */

insert  into `tb_position`(`id`,`t_pos_name`) values 

(1,'教授'),

(2,'副教授'),

(3,'讲师');

最后是教师学生关系表

CREATE TABLE `tb_stu_teach` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t_stu_id` int(11) DEFAULT NULL,
  `t_teach_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

/*Data for the table `tb_stu_teach` */

insert  into `tb_stu_teach`(`id`,`t_stu_id`,`t_teach_id`) values 

(1,1,1),

(2,1,2),

(3,1,3),

(4,2,2),

(5,2,3),

(6,2,4),

(7,3,3),

(8,3,4),

(9,3,5),

(10,4,4),

(11,4,5),

(12,4,1);

最后在eclipse中的目录结构如下:

Mybatis一对一、一对多、多对多查询。+MYSQL_第1张图片

希望您明白sqlMapConfig该如何配置,以及jdbc.properties和log4j的作用。

贴出POJO中的三个实体(注意:以下的POJO都用了lombok来快速生成setter和getter等,lomok具体使用,请见此文):

Position.java

package com.pojo;

import java.io.Serializable;

import lombok.Data;

@Data
public class Position implements Serializable {
	private int id;
	private String name;
	
	private Teacher teacher;

}

Student.java

package com.pojo;

import java.io.Serializable;
import java.util.List;

import lombok.Data;

@Data
public class Student implements Serializable {
	private String id;
	private String name;
	
	private List list;
}

Teacher.java

package com.pojo;

import java.io.Serializable;
import java.util.List;

import lombok.Data;

@Data
public class Teacher implements Serializable {
	private int id;
	
	private String no;
	private String name;
	private List studentList;
	
	private Position pos;
}

注意:关系表不用以实体表示出来,表示外键关系的ID也不用写在实体中(一般我们也不使用外键)

 

再贴另一个MybatisUtil.java工具类

package com.util;

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 MyBatisUtil {
	private static SqlSessionFactory sqlSessionFactory = null;
	
	static {
		String resource = "sqlMapConfig.xml";
		// 首先要加载核心配置文件:从classpath下开始找。
		InputStream in;
		try {
			in = Resources.getResourceAsStream(resource);
			
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		} catch (IOException e) {
			throw new RuntimeException(e.getMessage());
		}	
	}
	
	public static SqlSession getSqlSession() {
		
		return sqlSessionFactory.openSession();
	}
	
	public static SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}
}

一对一:老师对职位

TeacherMapper.xml




	
		
		
		
		
		
		
			
			
		
	
	
	
	
	

	 

TeacherMapper.java接口

package com.mapper;

import java.util.List;

import com.pojo.Teacher;

public interface TeacherMapper {
	public List queryTeacherPositionResultMap();
	
	public Teacher queryTeacherPositionResultMapById(Integer id);
}

测试一对一:

package com.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.mapper.TeacherMapper;
import com.pojo.Teacher;
import com.util.MyBatisUtil;

public class TestOneToOne {
	@Test
	public void testOneToOne() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		System.err.println(sqlSession);
		
		TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);
		
		List list = teacherMapper.queryTeacherPositionResultMap();
		
		System.out.println(list);
		
		Teacher teacher = teacherMapper.queryTeacherPositionResultMapById(1);
		System.out.println(teacher);
	}
}

 

一对多:职位对老师

PositionMapper.xml



 
	
		
		 
		
		
			
			
			
				
		
	
	
	
	
	


TeacherMapper.java接口

package com.mapper;

import java.util.List;

import com.pojo.Position;

public interface PositionMapper {
	public Position queryPositionTeacherResultMapById(Integer id);
	
	public List queryPositionTeacherResultMap();
}

测试一对多:

package com.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.mapper.PositionMapper;
import com.pojo.Position;
import com.util.MyBatisUtil;

public class TestOneToMany {
	
	@Test
	public void testOneToMany() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		PositionMapper positionMapper = sqlSession.getMapper(PositionMapper.class);
		List list = positionMapper.queryPositionTeacherResultMap();
		
		System.out.println(list);
		
		Position pos = positionMapper.queryPositionTeacherResultMapById(1);
		
		System.out.println(pos);
	}
}

多对多:职位是教授的老师教授的所有学生(一对多对多:只要你愿意可以一直对多下去...)

PositionMapper.xml



 
	
		
		
		
				
			
				
			
		
	
	
	


PositionMapper.java接口

package com.mapper;

import com.pojo.Position;

public interface PositionMapper {
	public Position selectPositionStudentByPosId(Integer id);
	
}

测试:

package com.test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.mapper.PositionMapper;
import com.pojo.Position;
import com.util.MyBatisUtil;

public class TestManyToMany {
	
	@Test
	public void testManyToMany() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		PositionMapper positionMapper = sqlSession.getMapper(PositionMapper.class);
		Position pos = positionMapper.selectPositionStudentByPosId(1);
		
		System.out.println(pos);
	}
}

 

转载于:https://www.cnblogs.com/mzywucai/p/11053358.html

你可能感兴趣的:(Mybatis一对一、一对多、多对多查询。+MYSQL)