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

(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. sublime的坑

  2. Java数据结构和算法(一)线性结构之单链表

    Java数据结构和算法(一)线性结构之单链表 prev current next -------------- -------------- -------------- | value | next ...

  3. mybatis 传参为 Integer 时 ,Mapper 文件 中判断 条件 问题。

    <if test="valiStatus==null || valiStatus=='' || valiStatus==4 "> b.work_permit_card_ ...

  4. devexpress v14.2.3 发布

    补丁而已. New Major Features in 14.2 What's New in VCL Products 14.2 Breaking Changes To learn about bre ...

  5. Devexpress VCL Build v2013 vol 14.1.5 发布

    What's New in 14.1.5 (VCL Product Line)   New Major Features in 14.1 What's New in VCL Products 14.1 ...

  6. 2018.08.05 bzoj3223: Tyvj 1729 文艺平衡树(非旋treap)

    传送门 经典的平衡树问题,之前已经用splay写过一次了,今天我突发奇想,写了一发非旋treap的版本,发现挺好写的(虽然跑不过splay). 代码: #include<bits/stdc++. ...

  7. IP之NCO仿真

    NCO仿真要用.vo仿真模型,不能用.v文件 /**************************************************************************** ...

  8. 仿iPhone滑屏操作

    <!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <m ...

  9. crosss compile VLC with OpenMAX on ARM board(RockChip RK3399),in order to use Hard Acceleration when decode video

    reference:http://www.x90x90x90.com/en/raspberry-pi-3-howto-compile-vlc-with-hardware-acceleration/ 1 ...

  10. js 面向对象 继承机制

    根据w3cschool上的描述:共有3种继承方法(对象冒充,原型链,混合) 1.对象冒充:构造函数ClassA使用this关键字给所有属性和方法赋值,使ClassA构造函数成为ClassB的方法,调用 ...