这段时间由于项目上的需求:需要将数据库中两表关联的数据查询出来展示到前端(包含一对一,一对多);

(1)一对一:

在实体类中维护了另一个类的对象:

这里我以用户(User)和产品(Product)为例:其中get和set的方法我就没有生成了,请自行生成;

实体类:

public class User {

private String id;

private String name;

private String password;

private Product product;

}

public class Product {

private String id;

private String name;

private String code;

private String userId;

private String userName;

}

查询方式:

联表查询:

sql语句:

<select id="selectAll" resultMap="allResultMap" parameterType="java.lang.String" >

select

u.*,p.id p_id,p.name p_name,p.*

from user u,product p

where p.user_id=u.id and u.id=#{id}

</select>

表和实体的映射关系

<resultMap id="allResultMap" type="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

<id column="id" property="id" jdbcType="VARCHAR" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="password" property="password" jdbcType="VARCHAR" />

<association property="product"  javaType="bz.sunlight.entity.Product">

<id column="p_id" property="id" jdbcType="VARCHAR" />

<result column="p_name" property="name" jdbcType="VARCHAR" />

<result column="code" property="code" jdbcType="VARCHAR" />

<result column="user_id" property="userId" jdbcType="VARCHAR" />

<result column="user_name" property="userName" jdbcType="VARCHAR" />

</association>

</resultMap>

这里是将查询出来的结果嵌套到实体对象中:

需要说明一点:这里user表和product表都用了id,name作为column名称,所以需要在sql语句中指定别名;否则同名的字段会出现封装到实体类上出错;

还有一种方式是嵌套查询:需要执行两次查询达到我们预期的效果,这里就不做介绍了;

(2)一对多:

需要在实体类的“一”方中维护多方的数组:

需要将User类中维护product类更改为:

private List<Product> products;

sql:

<select id="selectAll" resultMap="allResultMap" parameterType="java.lang.String" >

select

u.*,p.id p_id,p.name p_name,p.*

from user u,product p

where p.user_id=u.id and u.id=#{id}

</select>

表和实体的映射关系

<resultMap id="allResultMap" type="bz.sunlight.entity.User" >

<!--

WARNING - @mbggenerated

This element is automatically generated by MyBatis Generator, do not modify.

This element was generated on Sat Aug 27 23:42:15 CST 2016.

-->

<id column="id" property="id" jdbcType="VARCHAR" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="password" property="password" jdbcType="VARCHAR" />

<collection property="products"  ofType="bz.sunlight.entity.Product">

<id column="p_id" property="id" jdbcType="VARCHAR" />

<result column="p_name" property="name" jdbcType="VARCHAR" />

<result column="code" property="code" jdbcType="VARCHAR" />

<result column="user_id" property="userId" jdbcType="VARCHAR" />

<result column="user_name" property="userName" jdbcType="VARCHAR" />

</collection>

</resultMap>

这里的collection标签来映射一对多的关系,ofType:指定封装类型;

同样的:如果你的两个表中的column名称有重复,则通过起别名来处理;

到这里:联表查询就Ok了;

mybatis 关联表查询的更多相关文章

  1. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...

  2. MyBatis的学习总结四:实现关联表查询【参考】

    一.一对一的表关联查询(edi_test_task  和  edi_task_detail) 例子:一条任务明细对一条任务记录 对应的sql的映射xml文件如下: <?xml version=& ...

  3. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  4. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

  5. .NetCore中EFCore的使用整理(二)-关联表查询

    EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core  1.1 1.当前的版本,还不支持延迟加载(Lazy ...

  6. SpringBoot Data JPA 关联表查询的方法

    SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...

  7. Mybatis多表查询出现null字段

    写在前面 今天使用mybatis实现多表查询,记录一下其中遇到的坑 mybatis多表查询简介 mybatis多表查询主要有两个方式,通俗易懂的来说就是一个是查询少量属性(association),一 ...

  8. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  9. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

随机推荐

  1. 用Fiddler抓到的报文Content-Type: application/x-www-form-urlencoded,怎样解析?

    抓到的HTTPS请求报文,在报文头中Content-Type: application/x-www-form-urlencoded 报文体为: entrypoint=clientmanagement& ...

  2. Bootstrap验证

    <div class="modal fade" id="myModal" tabindex="-1" role="dialo ...

  3. javascript札记

    bind和unbind对应,live和die对应,千万别用bind绑定,用die解除.还有bind可以多次绑定同一个函数,可能会被执行多次同一个函数 正则表达式的使用 var email_reg = ...

  4. 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)

    -----------------------JDBC---------- 0.      db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...

  5. hdu-1107(模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1107 注意:1.路线是要反向的,走不通就反向: 2.输入输出全部是整形 3.攻击力不断变化 #incl ...

  6. 动态渲染的input怎么取消记忆功能

    方法1 :自定义去除记忆功能属性: $('#index_table_filter > label > input[type="search"]').attr('auto ...

  7. 可视化iOS应用程序开发的6个Xcode小技巧

    FIXME 该标签用来提醒你代码中存在稍后某个时间需要修改的部分.(编辑注:网络上有一些可以用来收集项目中`TODO`和`FIXME`标签的辅助插件,比如XToDo https://github.co ...

  8. Ubuntu安装教程(双系统)

    经常要重装还不如写个安装教程省的每次都要查 Ubuntu安装教程: win7下安装Linux实现双系统全攻略:https://jingyan.baidu.com/article/c275f6bacc3 ...

  9. Oracle实现递归查询

    前几天在开发的过程中遇到一个递归查询的问题,java代码大致是这样的: // 递归得到四级机构对象 public UserManagerDept getuserManagerDeptBy(String ...

  10. java基础-day4

    第04天 java基础语法 今日内容介绍 u Random u 数组 第1章   Random 1.1      产生整数随机数 1.1.1    Random的使用步骤 我们想产生1~100(包含1 ...