mybatis 关联表查询
这段时间由于项目上的需求:需要将数据库中两表关联的数据查询出来展示到前端(包含一对一,一对多);
(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 关联表查询的更多相关文章
- 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)
在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...
- MyBatis的学习总结四:实现关联表查询【参考】
一.一对一的表关联查询(edi_test_task 和 edi_task_detail) 例子:一条任务明细对一条任务记录 对应的sql的映射xml文件如下: <?xml version=& ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- SpringBoot Data JPA 关联表查询的方法
SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...
- Mybatis多表查询出现null字段
写在前面 今天使用mybatis实现多表查询,记录一下其中遇到的坑 mybatis多表查询简介 mybatis多表查询主要有两个方式,通俗易懂的来说就是一个是查询少量属性(association),一 ...
- MyBatis实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习总结(五)——实现关联表查询(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...
随机推荐
- dedecms模型类的引入
- 【Sikuli】Sikuli 文档
http://sikulix-2014.readthedocs.io/en/latest/index.html
- 【Linux】MySQL配置
安装环境/工具 Linux( centOS 版) MySQL(MySQL-5.6.28-1.el7.x86_64.rpm-bundle.tar版) MySQL的目录结构 安装已经说过了,这里不再说了 ...
- vue webkit-box-orient: vertical打包线上不显示
emmm……觉得不科学啊,写了几个vue的网站,限制超出行数省略号.结果发现放到线上,全都瓦特了.反复检查本地跑起来没错,代码没少,偏偏在线上的时候就是缺了vue -webkit-box-orient ...
- 20155213 2016-2017-2 《Java程序设计》第八周学习总结
20155213 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十四章NIO与NIO2 NIO NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你 ...
- JSP 介绍
Servlet进行逻辑处理效率高,但是页面响应效率低,不太方便. 问题: 在学习了Servlet之后,使用Servlet进行页面的展现,代码书写过于麻烦. 极大的影响了开发的效率,那么有没有一种方式可 ...
- 2018.07.22 洛谷P1967 货车运输(kruskal重构树)
传送门 这道题以前只会树剖和最小生成树+倍增. 而现在学习了一个叫做kruskal" role="presentation" style="position: ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
出处:http://www.cnblogs.com/jerehedu/p/7832808.html 前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...
- csdn的一次回答问题
#coding:utf8 import tushare as ts import pandas as pd import numpy as np import pymysql,datetime imp ...
- stark 增删改
优雅装饰器 import functools def wrapper(func): @functools.wraps(func) # 保留原函数的信息 def inner(*args, **kwarg ...