java mybtis关联查询,7.MyBatis 关联查询(一对一)
1 关联查询映射
1.1 分析数据模型
思路 :每张表记录的数据内容
每张表重要的字段(主键,外键,非空字段)
表与表之间的关系(外键关系)
表与表之间的业务关系(建立在某个业务意义基础上去分析)
如图:
1.2 一对一查询
有三种实现方法:
resultType
resultMap中的association嵌套查询
resultMap中的嵌套结果
需求:
进行订单查询,包括用户的姓名和地址信息
SQL语句:
SELECT
orders.id,orders.user_id,orders.number,orders.createtime,orders.note,user.username,user.address
FROM
orders, user
WHERE
orders.user_id = user.id;
方法一:resultType
复杂查询时,单表对应的domain类已不能满足输出结果集的映射。
所以要根据需求建立一个扩展类来作为resultType的类型。
创建domain类(OrdersExt.java):package cn.mybatis.mapper.domain;
/**
* 使用此类来映射订单和用户的查询结果,此类继承订单,所以是扩展的
* @author 刘泽栋
* @date 2015年6月21日 下午10:08:57
*/
public class OrdersExt extends Orders {
/**
* 添加用户的属性
*/
private String username;
private String sex;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
编写mapper接口(OrdersMapper.java)
public interface OrdersMapper {
// 进行订单查询,包括用户的姓名和地址信息
public List findOrders();
}
编写映射文件(OrdersMapper.xml)<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
orders.id,
orders.user_id,
orders.number,
orders.createtime,
orders.note
user.username,
user.address
SELECT
,
FROM orders, user
WHERE orders.user_id = user.id
加载配置文件(sqlMapConfig.xml)
编写测试代码(OrdersMapperTest.java)package cn.mybatis.mapper.mapper;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import cn.mybatis.mapper.domain.OrdersExt;
/**
* 测试mybatis的关联映射
* @author 刘泽栋
* @date 2015年6月21日 下午10:57:23
*/
public class OrdersMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 测试,进行订单查询,包括用户的姓名和地址信息
*/
@Test
public void testFindOrders() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
// 测试
List list = ordersMapper.findOrders();
System.out.println(list);
sqlSession.close();
}
}
方法二:resultMap的association嵌套查询
修改SQL:
SELECT orders.id,orders.user_id,orders.number,orders.createtime,orders.note FROM orders;
修改domain类(OrdersExt.java):package cn.mybatis.mapper.domain;
/**
* 使用此类来映射订单和用户的查询结果,此类继承订单,所以是扩展的
* @author 刘泽栋
* @date 2015年6月21日 下午10:08:57
*/
public class OrdersExt extends Orders {
/**
* 添加用户的属性
*/
private String username;
private String sex;
private String address;
// 用户信息
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "OrdersExt [username=" + username + ", sex=" + sex
+ ", address=" + address + "]";
}
}
编写mapper接口(OrdersMapper.java):// 进行订单查询,包括用户的姓名和地址信息(resultMap的嵌套查询)
public List findOrdersResultMapOfSelect();
编写映射文件(OrdersMapper.xml)
SELECT
FROM orders
加载配置文件(sqlMapConfig.xml)
编写测试代码(OrdersMapperTest.java)
/**
* 进行订单查询,包括用户的姓名和地址信息(resultMap的嵌套查询)
*/
@Test
public void testFindOrdersResultMapOfSelect() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
// 测试
List list = ordersMapper.findOrdersResultMapOfSelect();
System.out.println(list);
sqlSession.close();
}
方法三:resultMap的association嵌套结果
SQL语句:
SELECT
orders.id,orders.user_id,orders.number,orders.createtime,orders.note,user.username,user.address
FROM
orders, user
WHERE
orders.user_id = user.id;
编写mapper接口(OrdersMapper.java):// 进行订单信息查询,包括用户的名称和地址信息(resultMap之嵌套结果)
public List findOrdersResultMap();
编写映射文件(OrdersMapper.xml)
SELECT
,
FROM orders, user
WHERE orders.user_id = user.id
加载配置文件(sqlMapConfig.xml)
编写测试代码(OrdersMapperTest.java)
/**
* 进行订单信息查询,包括用户的名称和地址信息(resultMap之嵌套结果)
*/
@Test
public void testFindOrdersResultMap() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
// 测试
List list = ordersMapper.findOrdersResultMap();
System.out.println(list);
sqlSession.close();
}
java mybtis关联查询,7.MyBatis 关联查询(一对一)相关推荐
- 15、mybatis一对多关联查询 collection定义关联集合封装规则及懒加载
文章目录 1.collection定义关联集合封装规则单步查询 1).Dept增加集合属性 2).DeptMapper增加查询接口 3).DeptMapper.xml增加collection配置 4) ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- Mybatis的查询、关联查询
使用Mybatis进行查询 查询结果的映射 Mybatis通过<select>进行查询.通过<resultMap>将查询结果封装成实体类: <resultMap id=& ...
- mybatis动态查询(分页排序搜索)+分解关联查询+Logback 日志配置(打印sql到控制台)+mybatis新增记录后返回自增的id。批量=11/2~11/20
一.mybatis动态查询(分页排序搜索) mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和lim ...
- MyBatis关联查询、多条件查询
MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...
- MyBatis框架学习 DAY_03:如何解决无法封装问题 / 一对一关联查询 / 一对多关联查询
1. 通过查询时自定义别名的方式解决名称不一致而导致的无法封装数据的问题 假设,向用户组数据表(t_group)表中插入一些测试数据: INSERT INTO t_group (name) VALUE ...
- 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)
视频地址:http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实 ...
- java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...
- mybatis关联查询之一对多,多对一,以及多对多
一.使用IDEA新建maven工程 二.引入mybatis以及相关的jar <!--版本仅供参考--><dependencies><dependency><g ...
最新文章
- java中表示根号三_Java命名规范
- SQL 2005 全文索引
- 重温《数据库系统概论》【第一篇 基础篇】【第4章 数据库安全性】
- php fping,【Linux 命令】fping ping 包间隔时间详解
- sendmsg返回值_[求助]怎么处理sendmessage的返回值
- qpython3l使用手册_qpython3l怎么用
- web of science上查找相关会议和期刊的论文
- 通信技术专业技术人员考试 动力与环境_中级通信工程师动力与环境考试大纲...
- 海康大华网络录像机摄像机设备几种NTP校时方法
- Spring框架学习记录二:装配Bean
- php 串口 主板,图解主板插槽:教你选对串口卡
- 数学建模学习:因子分析
- C++核心准则T.10:为所有的模板参数定义概念
- python中plt.hist_关于python中plt.hist参数的使用详解
- [转]优秀程序设计的Kiss原则(keep it simple,stupid)
- 从VMware的vCenter中读取事件
- 单片机课程设计---篮球记分牌
- 1103 Integer Factorization (30分)
- 编译原理-语法制导翻译
- 移动端浏览器隐私模式/无痕模式使用本地存储localStorage/sessionStorage的问题
热门文章
- 函数遍历IOS中block的使用
- C#窗体控件-单选按钮控件RadioButton
- cacti 监控平台部署心得
- RabbitMQ(四) Work模式下的消息产生以及消费代码实现示例
- FileOutputStream 类 和 FileInputStream类的简单介绍,附代码演示。以及一个复制媒体文件的小程序。
- C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
- imagestring不支持中文,改用imagettftext
- 领域驱动DDD原理简介与实践
- 常见的几款JVM监控工具
- Kafka的架构设计