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

(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. msys2 命令行添加镜像地址

    sed -i "1iServer = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686" /etc/pacman.d/mi ...

  2. cuda使用

    import torchx = torch.randn(2, 3)x = x.cuda() print (x)#最简单的cuda使用,但是感觉好慢啊

  3. java日期正则表达式精准校验

      function checkDate(obj) {       var date=obj.value;     var re = new RegExp("(([0-9]{3}[1-9]| ...

  4. DB2 字符串的字段转为整形时的问题

    正确语句: select int(cast(substr(dpt_leader_ids,4,posstr(dpt_leader_ids,',0)')-4) as varchar(8))), d.* f ...

  5. DataStage 九、数据交换到MySQL以及乱码问题

    DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 DataStage 三.配置ODBC Da ...

  6. Linux Vim替换字符串的一些方法小结

    使用Linux环境 进行开发工作的程序猿经常有编辑器之争,是vim牛还是emacs棒.二者都是程序猿的开发神器,不管用好哪一个都会使你的工作事半功倍. 本文重点介绍 Vim的替换字符串方法技巧,这些方 ...

  7. HDU 2561 第二小整数 (排序)

    题意:中文题. 析:输入后,排一下序就好. 代码如下: #include <iostream> #include <cstdio> #include <algorithm ...

  8. 用Git将项目发布在GitHub里

    转载自http://blog.csdn.net/u011572517/article/details/50537407,个人加了一些注意事项和解释. githud是一个程序员以后成长都会使用到的,先不 ...

  9. modelsim读写TXT文件

    //open the file Initial Begin step_file = $fopen("F:/Company/Src/txt/step.v","r" ...

  10. Business Cards

    Problem Description Running a paper shop is not an easy job, especially with harsh customers. Today ...