这是一对一,即一夫一妻式的数据关联关系的查询
1,准备实体类C1和C2,数据库D1和D2,准备好Mybatis配置文件等相关条件
2,写注解接口
@Results用于包含多个@Result,
@Result用于指定类-表属性字段对应,
其中column = "xx"表示将C2中的xx字段内容用作调用@One中selectC2ByX的参数,
property = "C1"表示@One返回的类型是C1,
@One用于调用第二个查询语句,
package com.xxx.dao;
import com.xxx.xxx.C2;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
public interface xxx {
public interface C2Mapper {
@Select("select * from D2 where x=#{x}")
@Results({@Result(column = "xx",property = "C1",
one = @One(select = "com.xxx.dao.C2Mapper.selectC2ByX"))})
C2 selectC2ByX(int x);
}
}
第二个查询语句
package com.xxx.dao;
import com.xxx.xxx.C1;
import org.apache.ibatis.annotations.Select;
public interface C1Mapper {
@Select("select * from D1 where x=#{x}")
C1 selectC2ByX(int x);
}
3,写Mybtis配置文件
<mapper class="com.xxx.dao.C1Mapper"/>
<mapper class="com.xxx.dao.C2Mapper"/>
4,调用
@Test
public void selectC2ByXTest(){
String resources = "mybatis-config.xml";
Reader reader=null;
try{
reader= Resources.getResourceAsReader(resources);
} catch (IOException e){
e.printStackTrace();
}
SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
C2aMapper mapper = session.getMapper(C2Mapper.class);
C2 c2 = C2.selectC2ByX(x);
System.out.println(c2.toString());
session.close();
}
5,实际调用结果的形式
C2{ x , C2{}}
即C2中包含C1
C1{x=x, xx='xx', c2=C2{x=x, xx='xxxx'}}