5、MyBatis的关联查询
在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系。
(1)案例3:关联映射一对多
以国家和省份对应的一对多关系举例。
Student表
Teacher表
创建Student.java类如下:
创建Teacher类如下:
创建StuT.java接口如下:
创建IStudentDao.xml文件如下
在IStudentDao.xml文件中导入CountryMapper.xml文件
编写app测试程序:
package com.wdkseft.test;
import com.wdkseft.dao.Address_Sum;
import com.wdkseft.dao.ISmbmsRoleDao;
import com.wdkseft.dao.IStudentDao;
import com.wdkseft.entity.*;
import com.wdkseft.util.sqlSessionUtils;
import org.apache.ibatis.session.sqlSession;
import org.junit.Test;
import java.util.List;
public class Tester {
sqlSession session = sqlSessionUtils.getSession();
@Test
public void getAllPro(){
Address_Sum mapper = session.getMapper(Address_Sum.class);
List<ceishi> allPro = mapper.getAllPro("1", "2");
for (ceishi cs:allPro) {
System.out.println(cs.getName());
}
}
@Test
public void getProInData(){
Address_Sum mapper = session.getMapper(Address_Sum.class);
List<ceishi> proInData = mapper.getProInData(new String[]{"4", "6"});
for (ceishi cs:proInData) {
System.out.println(cs.getName());
}
}
@Test
public void AddallPro(){
Address_Sum mapper = session.getMapper(Address_Sum.class);
//添加
ceishi cs = new ceishi();
cs.setName("8");
cs.setPhone("1475");
cs.setEmail("114@ii.com");
mapper.addAddressById(cs);
session.commit();
}
@Test
public void getRoleAndUser(){
ISmbmsRoleDao mapper = session.getMapper(ISmbmsRoleDao.class);
SmbmsRole role = mapper.getRoleAndUser(3);
System.out.println("角色:"+role.getRoleName());
for (SmbmsUser user:role.getUserList()) {
System.out.print("\t用户:"+user.getUserName());
}
}
@Test
public void getUserList(){
ISmbmsRoleDao mapper = session.getMapper(ISmbmsRoleDao.class);
List<SmbmsUser> userList = mapper.getUserList();
for (SmbmsUser user:userList) {
System.out.println("用户:"+user.getUserName()+"\t角色:"+user.getRole().getRoleName());
}
}
@Test
public void getStudentInfo(){
IStudentDao mapper = session.getMapper(IStudentDao.class);
List<Student> studentInfo = mapper.getStudentInfo();
for (Student stu:studentInfo){
System.out.println("学员:"+stu.getStuname());
for (Teacher teacher:stu.getTeachers()){
System.out.print("\t教员:"+teacher.getTname());
}
System.out.println();
}
}
}
(2)案例4:自连接的一对多
所谓自连接:就是表与自己本身发生关联关系,举个栗子。在U2的结业项目易买网中,分类表(Category)就是自关联的一张表。即一个分类下存在多个子分类。
创建Category类如下
创建CategoryMapper.java如下
创建CategoryMapper.xml文件如下:
创建好对应的Mapper文件后,需要在configuration.xml文件中导入,但多次导入有些麻烦,我们可以使用包扫描(扫描对应包下的mapper.xml文件),之后就无需每次添加一个mapper.xml文件都要导入了(提升了效率)
编写测试代码
(3)案例5:关联映射多对一
多对一的例子,我们沿用案例3中对应一对多的关系。
数据表不变。
创建ProvincialMapper.java接口
创建ProvincialMapper.xml文件
创建测试代码
(4)案例6:关联映射多对多
案例:学生与老师间的关系。一个学生可以被多个老师教,一个老师可以教多个学生。
表结构如下:
学生表:
教师表:
中间表:
创建如下实体类:
学生实体
教师实体
创建TeacherMapper.java接口
编写TeacherMapper.xml文件
编写测试类代码:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。