MyBitis(iBitis)系列随笔之一:MyBitis入门实例

MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

MyBitis(iBitis)系列随笔之三:简单实现CRUD

MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

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

MyBitis(iBitis)系列随笔之六:mybitis与spring集成

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


        这是移动电话t_mobile表
              
           在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合使用,稍后会做详细配置介绍

创建表对应的JavaBean对象

Mobile  Bean

  1. public class Mobile {
  2. private int id;
  3. private String telnumber;
  4. public int getId() {
  5. return id;
  6. }
  7. public void setId(int id) {
  8. this.id = id;
  9. }
  10. public String getTelnumber() {
  11. return telnumber;
  12. }
  13. public void setTelnumber(String telnumber) {
  14. this.telnumber = telnumber;
  15. }
  16. }

User Bean

  1. package com.jefry;
  2. import java.util.List;
  3. public class User {
  4. private int id;
  5. private String userName;
  6. private String password;
  7. private List<Mobile> mobiles; //这里也可以是Set集合
  8. public List<Mobile> getMobiles() {
  9. return mobiles;
  10. }
  11. public void setMobiles(List<Mobile> mobiles) {
  12. this.mobiles = mobiles;
  13. }
  14. public String getUserName() {
  15. return userName;
  16. }
  17. public void setUserName(String userName) {
  18. this.userName = userName;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. public int getId() {
  27. return id;
  28. }
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32. }

在上一篇的基础上改写映射文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="user">
  6. <resultMap id="userResultMap" type="User">
  7. <id property="id" column="id" javaType="int" jdbcType="INTEGER" />
  8. <result property="userName" column="name" javaType="string" jdbcType="VARCHAR"/>
  9. <result property="password" column="pass" javaType="string" jdbcType="VARCHAR"/>
  10. <collection property="mobiles" column="userid" ofType="Mobile">
  11. <id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
  12. <result property="telnumber" column="telnumber" javaType="string" jdbcType="VARCHAR"/>
  13. </collection>
  14. </resultMap>
  15. <!--多表查询操作-->
  16. <select id="selectUser" parameterType="int"  resultMap="userResultMap" >
  17. <!--分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段名称相同而注入到对应对象名称冲突-->
  18. 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}
  19. </select>
  20. </mapper>

最后,通过测试OK

  1. public class Test {
  2. static String resource = "mybatis-config.xml";
  3. public static void main(String[] args) throws IOException {
  4. InputStream inputStream = Resources.getResourceAsStream(resource);
  5. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  6. SqlSession session = sqlSessionFactory.openSession();
  7. try {
  8. User user = session.selectOne("user.selectUser", 1);
  9. List<Mobile> mobiles = user.getMobiles();
  10. for(Mobile mobile : mobiles) {
  11. System.out.println("user:" + user.getUserName() + ",tel:" + mobile.getTelnumber());
  12. }
  13. } finally {
  14. session.close();
  15. }
  16. }
  17. }

源码下载:http://download.csdn.net/detail/jefry_xdz/5229451

http://blog.csdn.net/jefry_xdz/article/details/8767358

http://www.cnblogs.com/yinkh/p/5564033.html

MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)的更多相关文章

  1. MyBitis(iBitis)系列随笔之四:多表(多对一查询操作)

      前面几篇博客介绍的都是单表映射的一些操作,然而在我们的实际项目中往往是用到多表映射.至于多表映射的关键要用到mybitis的association来加以实现.          这篇介绍的是多表中 ...

  2. MyBitis(iBitis)系列随笔之三:简单实现CRUD

    Mybitis(iBitis)实现对对象增删改查操作要借助<select/>查询,<insert/>增加,<update/>更新,<delete/>删除 ...

  3. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

    类型别名(typeAliases):     作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度.    类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...

  4. MyBitis(iBitis)系列随笔之六:mybitis与spring集成

    目前Spring官方还没有出整合Mybatis的特性,但是mybitis比较给力,开发了一个mybatis-spring插件,达到与Spring的完美整合目的. 在与Spring集成前,一方面我们需要 ...

  5. MyBitis(iBitis)系列随笔之一:MyBitis入门实例

        MyBits前身是iBitis,相对于Hibernate而言,它是半自动化ORM框架.本着分享和学习的目的,笔者将陆续把学习笔记与代码贴出,希望对想学习mybitis的同窗们有所帮助.     ...

  6. MyBatis初级实战之六:一对多关联查询

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. 7.mybatis一对多关联查询

    和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...

  8. [转]NHibernate之旅(10):探索父子(一对多)关联查询

    本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...

  9. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

随机推荐

  1. [Oracle]ocilib绑定数组实现批量写入

    #include "ocilib.h" #define INSERT_SQL_00 MT("INSERT INTO C_PICRECORD_00 (ID, DEV_ID) ...

  2. C#句柄使用

    原文:C#句柄使用 调用 API 函数 SendMessage 发送 WM_CLOSE 消息. DllImport("User32.dll",EntryPoint="Se ...

  3. AJP协议总结与分析

    Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户.默认情况下,Tomcat在server.x ...

  4. yii post delete request more safe

    常规的delete方法如下: /**  * Deletes a particular model. * If deletion is successful, the browser will be r ...

  5. 关于css中使用ul li的一些体会

    参考网址:http://hi.baidu.com/july_leo/item/5237cd612070ae2668105b40 如何修改ul li的显示 ----------------------- ...

  6. Linux下查找最大文件

    当我们应用一段时间以后,Linux可能会变得臃肿了,那么,怎么找出一个“path”下的最大文件呢? 可以使用du命令,如: du -sh [dirname|filename] 如:当前目录的大小: d ...

  7. POJ——位查询

    3:位查询 查看 提交 统计 提问 总时间限制:  5000ms  内存限制:  65536kB 描述 给出N个范围在[0, 65535]的整数,编程支持以下的操作: (1)修改操作:C d,所有的数 ...

  8. 在JavaScript的数组中进行数组元素查找和替换(JS的indexOf等)

    <html> <head> <title> Extend JavaScript Array Method </title> <script lan ...

  9. BOOST_PP_INC_I(x)实现

    这个比较有意思,# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x 连接在一起以后,然后定义为x+1 实现了inc功能,不过最多也就到255 # /* Copy ...

  10. MFC网络编程

    一.概念1.同步方式与异步方式同步方式:发送方不等接收方响应,便接着发送下一个数据包的通信方式异步方式:发送方发出数据,等收到接收方发回的响应后,才发送下一个数据包的通信方式2.阻塞与非阻塞方式阻塞套 ...