Mybatis高级查询(一)

来源:互联网 发布:新代数控车床编程实例 编辑:程序博客网 时间:2024/05/18 03:57

联合查询:association
模拟业务场景:一个学生应该在一个班级里,模拟一对一关系。

改造之前的Student类,增加一个属性Class。

package com.hbk.pojo;public class Student {    private int id;    private String name;    private int age;    private Class classId;    public Class getClassId() {        return classId;    }    public void setClassId(Class classId) {        this.classId = classId;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

Class类就id,name属性,以及get set方法,代码略。
在mybatis-config.xml文件中加入class的别名

<typeAliases>        <typeAlias type="com.hbk.pojo.Student" alias="Student"/>        <typeAlias type="com.hbk.pojo.Class" alias="Class"/></typeAliases>

在student.xml文件中加入查询SQL

<resultMap type="Student" id="StudentMapOne">        <id column="id" property="id"/>        <result column="name" property="name"/>        <result column="age" property="age"/>        <association property="classId" javaType="Class" column="classid">            <id column="classId" property="id"/>            <result column="className" property="name"/>        </association>    </resultMap>    <select id="findOneToOne" resultMap="StudentMapOne" >        select stu.id,stu.name,c.id as classId,c.name as className from student stu inner join class c on stu.classid = c.id    </select>

测试及结果:

package com.hbk.test;import java.io.IOException;import java.io.Reader;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.hbk.pojo.Student;public class StudentTest {    public static void main(String[] args) {        String resource = "com/hbk/map/mybatis-config.xml";        try {            Reader reader = Resources.getResourceAsReader(resource);            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);            SqlSession sqlSession = sqlSessionFactory.openSession();            List<Student> lists = sqlSession.selectList("findOneToOne");            for(Student stu : lists){                System.out.println(stu.getName()+" 班级名称="+stu.getClassId().getName());            }            sqlSession.commit();            sqlSession.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

这里写图片描述

数据库student表增加classid列,并增加class表。

这里写图片描述

之前测试的时候踩过一个坑,sql语句里一定要使用别名,要不然会出现问题,因为我设计表当中,student(id,name,age,classid)跟class(id,name)有同名的列。

原创粉丝点击