首页 > 代码库 > 内连接association 左外连接collection
内连接association 左外连接collection
前提条件:
学生表 (多 子表) 年级表(一 主表)
1,第一种情况:先查子表所有
student.sql.xml文件如何配
由于有多表连接,无法把查询结果直接封装成一个实体对象--------> 结果转换规则:自己手动指定
内连接 返回单个association
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.bdqn.mybatis.mapper.StudentMapper"><!-- 把查询结果自动的封装成一个对象 ,哪些列是可以自动对应到属性中,连接的外表没法对应到啊,复杂的结果转换resultType没法处理,需要手动指定--> <select id="findStudent" resultMap="studentMap"> SELECT s.id, s.gradeId, s.name, g.name as gradeName FROM Student s INNER JOIN Grade g ON s.gradeId=g.id ORDER BY s.id </select><!-- 结果转换规则,当查询结果无法直接转换成我们想要的,就需编写转换规则,明确表示结果如何转换id随便起名,type是你想把结果转换成什么类的对象根据转换规则,查出来的每一行数据都会自动new一个student对象出来 --><resultMap id="studentMap" type="Student" > <!-- 这个是主键特殊 column是我想生成的列名不区分大小写; property是原本实体类中的属性名 必须得一样--> <id column="id" property="id"/> <result column="gradeId" property="gradeId"/> <result column="name" property="name"/> <!-- 指定单个关联对象的转换规则 property是student类中的grade属性 后边是哪个类 --> <association property="grade" javaType="Grade"> <!-- column是student类中的gradeId属性 property是原本属于grade类中叫id --> <id column="gradeId" property="id"/> <result column="gradeName" property="name"/> </association></resultMap></mapper>
package cn.bdqn.mybatis.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import cn.bdqn.mybatis.entity.Student;
import cn.bdqn.mybatis.mapper.StudentMapper;
import cn.bdqn.mybatis.util.MyBatisUtil;
public class StudentTest {
//先声明返回值
List<Student> students=null;
SqlSession session=null;
//只写了个方法执行查询语句
@Test
public void TestFindStudent() {
try {
//先拿到sql session
session=MyBatisUtil.getSqlSession();
//通过sqlsession拿到mapper对象
StudentMapper mapper=session.getMapper(StudentMapper.class);
students=mapper.findStudent();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
session.close();
}
for (Student student : students) {
System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getGrade().getName()+"\t"+student.getGradeId());
}
}
}
左外连接 返回集合collection
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.bdqn.mybatis.mapper.GradeMapper"> <select id="findGrade" resultMap="gradeMap"> SELECT g.id, g.name, s.id AS stuId, s.gradeId, s.name AS stuName FROM Grade g LEFT JOIN Student s ON g.id=s.gradeId ORDER BY g.id </select> <resultMap id="gradeMap" type="Grade"> <id column="id" property="id"/> <result column="name" property="name"/> <!--集合转换规则 property:对应的是grade类中哪儿一列;javaType:返回类型;ofType:表示集合中包含的是Student实体类对象。 notNullColumn:根据这一列来创建学生对象,班级得有学生了我才创建一个学生对象,没有学生就不创建了 根据查询结果中的 gradeId列判断学生对象要加入到这个集合中--> <collection property="students" javaType="list" ofType="Student" notNullColumn="gradeId"> <id column="stuId" property="id"/> <result column="gradeId" property="gradeId"/> <result column="stuName" property="name"/> </collection> </resultMap></mapper>
package cn.bdqn.mybatis.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import cn.bdqn.mybatis.entity.Grade;import cn.bdqn.mybatis.entity.Student;import cn.bdqn.mybatis.mapper.GradeMapper;import cn.bdqn.mybatis.mapper.StudentMapper;import cn.bdqn.mybatis.util.MyBatisUtil;public class GradeTest { //先声明返回值 List<Grade> grades=null; SqlSession session=null; //只写了个方法执行查询语句 @Test public void TestFindGrade() { try { //先拿到sql session session=MyBatisUtil.getSqlSession(); //通过sqlsession拿到mapper对象 GradeMapper mapper=session.getMapper(GradeMapper.class); grades=mapper.findGrade(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ session.close(); } for (Grade grade : grades) { System.out.println(grade.getId()+"\t"+grade.getName()); System.out.println("------------------"); for (Student student : grade.getStudents()) { System.out.println(student.getName()); } System.out.println(); } } }
内连接association 左外连接collection
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。