MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)
2016-01-25 15:21
316 查看
这篇博文介绍的是多表中的一对多表关联查询
还是按照上一篇的步骤,先做一些准备工作;创建两张表:一张是用户,一张是用户所对应的移动手机,一户用户可以有部移动手机。
这是用户t_user表
![](http://img.my.csdn.net/uploads/201304/07/1365316028_1546.png)
这是移动电话t_mobile表
![](http://img.my.csdn.net/uploads/201304/07/1365316028_3109.png)
在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合使用,稍后会做详细配置介绍
创建表对应的JavaBean对象
Mobile Bean
[java] view plain copy
public class Mobile {
private int id;
private String telnumber;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTelnumber() {
return telnumber;
}
public void setTelnumber(String telnumber) {
this.telnumber = telnumber;
}
}
User Bean
[java] view plain copy
package com.jefry;
import java.util.List;
public class User {
private int id;
private String userName;
private String password;
private List<Mobile> mobiles; //这里也可以是Set集合
public List<Mobile> getMobiles() {
return mobiles;
}
public void setMobiles(List<Mobile> mobiles) {
this.mobiles = mobiles;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
在上一篇的基础上改写映射文件:
[html] view plain copy
<?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="user">
<resultMap id="userResultMap" type="User">
<id property="id" column="id" javaType="int" jdbcType="INTEGER" />
<result property="userName" column="name" javaType="string" jdbcType="VARCHAR"/>
<result property="password" column="pass" javaType="string" jdbcType="VARCHAR"/>
<collection property="mobiles" column="userid" ofType="Mobile">
<id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
<result property="telnumber" column="telnumber" javaType="string" jdbcType="VARCHAR"/>
</collection>
</resultMap>
<!--多表查询操作-->
<select id="selectUser" parameterType="int" resultMap="userResultMap" >
<!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->
select m.id m_id,m.telnumber,u.id u_id,u.name,u.pass from t_mobile m,t_user u where m.userid = u.id and u.id = #{id}
</select>
</mapper>
最后,通过测试OK
[java] view plain copy
public class Test {
static String resource = "mybatis-config.xml";
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
User user = session.selectOne("user.selectUser", 1);
List<Mobile> mobiles = user.getMobiles();
for(Mobile mobile : mobiles) {
System.out.println("user:" + user.getUserName() + ",tel:" + mobile.getTelnumber());
}
} finally {
session.close();
}
}
}
相关文章推荐
- 学生信息管理系统v1.0
- TortoiseSVN中分支和合并实践
- Notepad++配置Python开发环境
- hook模板x86/x64通用版(1)--x64下的jmp远跳、远call指令
- 内部类
- Spfile、Pfile的修改相关
- OTA和Recovery系统升级流程介绍
- 【慕课笔记】U1 类和对象 第1节 什么是类和对象
- OS
- JavaScript:函数
- AFNetworking 的请求方法
- Linux学习笔记:MySQL主从复制的风险与防范
- 经典opengl
- ios runtime之深入浅出 Cocoa 消息
- Cacti图形数据自动导出脚本(二)
- 磁盘与文件系统管理之二
- 回显是什么鬼?浅谈
- memerched+tomcat 缓存浏览器的session
- 关于viewpoint的疑惑
- 动态添加js文件.