Mybatis进阶学习笔记——关系查询——一对一查询
用户和订单的需求
通过查询订单,查询用户,就是一对一查询
(1)自定义JavaBean(常用,推荐使用)
<select id="queryOrderUser" resultType="OrderUser">
SELECT o.id,o.user_id,u.name,o.productname
FROM t_order o LEFT JOIN t_user u ON o.user_id= u.id
</select>
OrderUser.java:
package cn.sm1234.domain;
public class OrderUser extends Order {
//Order中没有name
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
public void test1() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
OrderDao dao = sqlSession.getMapper(OrderDao.class);
List<OrderUser> list = dao.queryOrderUser();
for (OrderUser orderUser : list) {
System.out.println(orderUser.getName()+"-"+orderUser.getProductname());
}
sqlSession.commit();
sqlSession.close();
}
OrderDao.java:
public interface OrderDao {
/**
* 查询订单,并且关联查询用户信息
*/
public List<OrderUser> queryOrderUser();
}
(2)ResultMap封装
<!-- type="实体类" -->
<resultMap type="Order" id="OrderUserResultMap">
<id column="id" property="id"/>
<result column="productname" property="productname"/>
<result column="orderno" property="orderno"/>
<!-- user_id封装到User中 -->
<!-- 关联属性
property:关联属性名称(Order类中的user)
javaType:类型(User (即User user))
-->
<association property="user" javaType="User">
<!-- column中的字段名称应该为当前查询结果的字段名称 -->
<id column="user_id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="password"/>
</association> </resultMap> <select id="queryOrderUserResultMap" resultMap="OrderUserResultMap">
SELECT o.id,o.user_id,u.name,o.productname
FROM t_order o LEFT JOIN t_user u ON o.user_id= u.id
</select>
Order.java:
package cn.sm1234.domain;
public class Order {
private Integer id;
private String productname;
private String orderno;
private Integer userId;
private User user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProductname() {
return productname;
}
public void setProductname(String productname) {
this.productname = productname;
}
public String getOrderno() {
return orderno;
}
public void setOrderno(String orderno) {
this.orderno = orderno;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
/**
* 查询订单,查询用户(ResultMap)
* @return
*/
public List<Order> queryOrderUserResultMap();
@Test
public void test2() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
OrderDao dao = sqlSession.getMapper(OrderDao.class);
List<Order> list = dao.queryOrderUserResultMap();
for (Order order : list) {
System.out.println(order.getProductname()+"-"+order.getUser().getName());
}
sqlSession.commit();
sqlSession.close();
}
Mybatis进阶学习笔记——关系查询——一对一查询的更多相关文章
- Mybatis进阶学习笔记——关系查询——一对多查询
一个客户拥有多个订单 <resultMap type="User" id="UserOrderResultMap"> <id column=& ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- Mybatis进阶学习笔记——动态sql
1.if标签 <select id="queryByNameAndTelephone" parameterType="Customer" resultTy ...
- Mybatis进阶学习笔记——输出映射
输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...
- Mybatis进阶学习笔记——输入映射
1.输入映射 输入映射支持的类型: 1) 基本的类型,int,String,double 等(*)2) JavaBean 类型(*)3) 包装JavaBean 类型(对象里面包含另一个对象) 1.1基 ...
- IBatis.Net学习笔记六--再谈查询
在IBatis.Net学习笔记五--常用的查询方式 中我提到了一些IBatis.Net中的查询,特别是配置文件的写法. 后来通过大家的讨论,特别是Anders Cui 的提醒,又发现了其他的多表查询的 ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- 数据库学习笔记3 基本的查询流 2 select lastname+','+firstname as fullname order by lastname+','+firstname len() left() stuff() percent , select top(3) with ties
数据库学习笔记3 基本的查询流 2 order by子句对查询结果集进行排序 多列和拼接 多列的方式就很简单了 select firstname,lastname from person.pers ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
随机推荐
- ZOJ2836-Number Puzzle-容斥原理
依次考虑一个数的倍数,两个数的倍数(lcm),三个数的倍数(lcm)... 会发现有这么一个规律,奇数个数时要加上情况数,偶数个数时要减去情况数. 一种只有10个数,用二进制枚举所有情况即可. #in ...
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...
- wechat 网页版通信全过程
想要记录总结一下自己在这个小项目中所遇到的坑,以及解决问题的思路. 首先我觉得这个小项目挺有实际市场的,市场上有一定的需求量,这个就是驱动力吧.这个小项目的关键点是wechat网页版通信全过程,讲真挺 ...
- SpringBoot集成RocketMQ
实战,用案例来说话 前面已经说了JMS和RocketMQ一些概念和安装,下面使用SpringBoot来亲身操作一下. 生产者的操作 SpringBoot项目创建完成,引入依赖是第一步: <dep ...
- Android微信数据导出
在Nexus 5(Android 4.4)+WeChat 5.4,和Nexus 5(Android 5.0)+Wechat 6.0上测试可用. 获取加密的sqlite3数据库EnMicroMsg.db ...
- js的append拼接html丢失css样式解决
htmlApp += "<li id='leftli"+lunci+"'>"; htmlApp += "<span id='left ...
- Linux下JDK+Eclipse安装
Ubuntu版本14.04 JDK8_144 eclipse最新下载 注:原本安装JDK7配置好环境后报错,原来是最新eclipse的一个功能只有JDK8支持,若想使用JDK7需要注释某条代码 JDK ...
- Celery配置实践笔记
说点什么: 整理下工作中配置celery的一些实践,写在这里,一方面是备忘,另外一方面是整理成文档给其他同事使用. 演示用的项目,同时也发布在Github上: https://github.com/b ...
- python中的位运算符
按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下,下表中变量 a 为 60,b 为 13,二进制格式如下: a = 0011 1100 b = 0000 1101 ----- ...
- Hadoop生态圈-CDH与HUE使用案例
Hadoop生态圈-CDH与HUE使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HUE的介绍 1>.HUE的由来 HUE全称是HadoopUser Experi ...