关于mybatis多表联查返回null的问题

magic_nian 2016-05-12 11:13:15
上代码

实体类:Classes

package com.lnn.mybatis.entity;

public class Classes {

//定义实体类的属性,与class表中的字段对应
private int id; //id===>c_id
private String name; //name===>c_name

/**
* class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,
* 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的
*/
private Teacher teacher;

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 Teacher getTeacher() {
return teacher;
}

public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}

@Override
public String toString() {
return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher+ "]";
}
}



实体类:Teacher

package com.lnn.mybatis.entity;

public class Teacher {

//定义实体类的属性,与teacher表中的字段对应
private int id; //id===>t_id
private String name; //name===>t_name

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;
}

@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}



表结构:




映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lnn.mybatis.mapper.ClassMapper1">
<resultMap type="com.lnn.mybatis.entity.Classes" id="ClassResultMap">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" javaType="com.lnn.mybatis.entity.Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
</resultMap>


<select id="getClass" parameterType="int" resultMap="ClassResultMap">
select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
</select>

</mapper>


接口:


package com.lnn.mybatis.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.lnn.mybatis.entity.Classes;

public interface ClassMapper {

@Select("select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}")
public Classes getClass(@Param(value="id") int id);
}




测试类1:


package com.lnn.mybatis.test;

import java.io.InputStream;

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

import com.lnn.mybatis.entity.Classes;
import com.lnn.mybatis.mapper.ClassMapper;

public class TestCRUDAnnotationMapper {

@Test
public void test(){
String resource = "config.xml";
InputStream is = TestCRUDAnnotationMapper.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
// String statement = "com.lnn.mybatis.mapper.ClassMapper1.getClass";
// Classes clazz = session.selectOne(statement, 1);
ClassMapper mapper = session.getMapper(ClassMapper.class);
Classes clazz = mapper.getClass(1);
// HashMap<String,Object> map = mapper.getClass(1);
session.close();
System.out.println(clazz);
}

}




测试类2:

package com.lnn.mybatis.test;

import java.io.InputStream;

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

import com.lnn.mybatis.entity.Classes;
import com.lnn.mybatis.mapper.ClassMapper;

public class TestCRUDAnnotationMapper {

@Test
public void test(){
String resource = "config.xml";
InputStream is = TestCRUDAnnotationMapper.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
String statement = "com.lnn.mybatis.mapper.ClassMapper1.getClass";
Classes clazz = session.selectOne(statement, 1);
// ClassMapper mapper = session.getMapper(ClassMapper.class);
// Classes clazz = mapper.getClass(1);
// HashMap<String,Object> map = mapper.getClass(1);
session.close();
System.out.println(clazz);
}

}



问题:我用测试类1,打印出的结果是null,用测试类2打印出的结果是正确的,

用单表做测试的时候,测试类1和2返回相同的结果,我想问下mybatis多表联查时返回的值是不是有什么讲究,求解答。
...全文
301 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧