概述
一对多查询语句:
select p.id,p.title,p.create_time,p.user_id,u.username from user u,post p where u.id=p.user_id
查询发帖的 id、标题、创建时间、用户id、用户名
其中用户名在 user 表中,其他字段在 post 表中
难点
如何配置下面的 resultType:
<select id="query" resultType="?">
select p.id,p.title,p.create_time,p.user_id,u.username from user u,post p where u.id=p.user_id
</select>
由于查询的字段分别在2个实体类中,所以此处配置哪个实体类,都不合理,所以此处配置的是 map
优点
配置简单
缺点
由于返回的是 map 类型,需要知道key,所以取值麻烦
修改 IPostMapper
public List<Map> query();
修改 postMapper.xml
<select id="query" resultType="map">
select p.id,p.title,p.create_time,p.user_id,u.username from user u,post p where u.id=p.user_id
</select>
测试
@Test
public void testSelect() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
IPostMapper mapper = sqlSession.getMapper(IPostMapper.class);
List<Map> list=mapper.query();
for(Map map:list) {
String info = String.format("id:%s,用户名:%s,标题:%s", map.get("id"), map.get("username"), map.get("title"));
System.out.println(info);
}
sqlSession.close();
inputStream.close();
}