SELECT c.id cid,c.name cname,s.id sid,s.name sname,s.age sage FROM classes c,student s WHERE c.id=s.cid
- 在MyBatisConfig.xml中引入配置文件
- 测试类
@Test
public void selectAll() throws Exception{
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream(“MyBatisConfig.xml”);
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.获取OneToManyMapper接口的实现类对象
OneToManyMapper mapper = sqlSession.getMapper(OneToManyMapper.class);
//5.调用实现类的方法,接收结果
List classes = mapper.selectAll();
//6.处理结果
for (Classes cls : classes) {
System.out.println(cls.getId() + “,” + cls.getName());
List students = cls.getStudents();
for (Student student : students) {
System.out.println(“\t” + student);
}
}
//7.释放资源
sqlSession.close();
is.close();
}
- resultMap:用来自定义结果集和实体类的映射
-
id
属性:相当于这个resultMap的唯一标识 -
type
属性:用来指定映射到哪个实体类
- id 标签:用来指定主键列的映射规则
-
column
属性::数据库表的列名 -
property
属性:: 对应实体类的属性名
- result 标签:用来指定普通列的映射规则
-
column
属性::数据库表的列名 -
property
属性: : 对应实体类的属性名
- association标签:配置被包含对象的映射规则
-
property
属性:被包含对象的变量名 -
javaType
属性:被包含对象的数据类型
- collection标签:配置被包含集合对象的映射规则。
-
property
属性:被包含集合对象的变量名 -
ofType
属性:集合中保存的对象数据类型
-
多对多模型:学生和课程,一个学生可以选择多门课程、一个课程也可以被多个学生所选择。
-
代码实现
- 步骤一:sql语句准备
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO course VALUES (NULL,‘语文’);
INSERT INTO course VALUES (NULL,‘数学’);
CREATE TABLE stu_cr(
id INT PRIMARY KEY AUTO_INCREMENT,
sid INT,
cid INT,
– sid指向学生表的主键id
– cid指向课程表的主键id
CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id),
CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id)
);
INSERT INTO stu_cr VALUES (NULL,1,1);
INSERT INTO stu_cr VALUES (NULL,1,2);
INSERT INTO stu_cr VALUES (NULL,2,1);
INSERT INTO stu_cr VALUES (NULL,2,2);
- 步骤二:实体类和接口
public class Course {
private Integer id; //主键id
private String name; //课程名称
//省略get/set,有参/无参方法
}
//在学生Student实体类当中增添变量,表示当前学生选择了哪些课程
public class Student {
private Integer id; //主键id
private String name; //学生姓名
private Integer age; //学生年龄
private List courses;//学生所选择的课程集合
//省略get/set,有参/无参方法
}
public interface ManyToManyMapper {
//查询全部
public abstract List selectAll();
}
- 步骤三:配置文件
SELECT sc.sid,s.name sname,s.age sage,sc.cid,c.name cname FROM student s,course c,stu_cr sc WHERE sc.sid=s.id AND sc.cid=c.id
- 步骤四:在MyBatisConfig.xml中引入配置文件
- 步骤五:测试
@Test
public void selectAll() throws Exception{
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream(“MyBatisConfig.xml”);
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionF