您的位置:首页 > 其它

MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

2016-01-25 15:21 316 查看

这篇博文介绍的是多表中的一对多表关联查询
还是按照上一篇的步骤,先做一些准备工作;创建两张表:一张是用户,一张是用户所对应的移动手机,一户用户可以有部移动手机。
这是用户t_user表



这是移动电话t_mobile表



在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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: