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. ...
随机推荐
- vmware错误汇总
[问题来源] 因为虚拟机过大,所以直接在本地磁盘直接复制,启动的时候,换好IP重新启动网卡报错. device eth0 does not seem to be present.. ifconfig查 ...
- (转)二分图匹配匈牙利算法与KM算法
匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...
- Powershell script to install Windows Updates (msu) from folder
######################################################### # # Name: InstallWindowsUpdates.ps1 # Auth ...
- MD5 SHA1 CRC32
md5: import hashlib md5 = hashlib.md5() md5.update(bytes('http://www.baidu.com',encoding="utf-8 ...
- Android在初始化时弹出popwindow的方法
http://blog.csdn.net/sxsboat/article/details/7340759 Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但 ...
- ASP.NET服务器端控件原理分析
服务器端控件触发事件分两种: 1.服务器端控件Button被渲染成客户端的 <input type="submit" name="Button1" val ...
- 解决TypeError: __init__() missing 1 required positional argument: 'on_delete'
试用Djiango的时候发现执行mange.py makemigrations 和 migrate是会报错,少位置参数on_delete,查了一下是因为指定外键的方式不对,改一下就OK了. 代码如下: ...
- 外显子分析报错解决方案bin field of BAM record does not equal value computed based on alignment start and end, and length of sequence to which read is aligned
以下链接给出了解决方案:https://gatkforums.broadinstitute.org/gatk/discussion/4290/sam-bin-field-error-for-the-g ...
- R语言:多个因变量时,如何在plot函数中画多条曲线(plot,points,lines,legend函数)
最近阅读一篇文献<Regional and individual variations in the function of the human eccrine sweat gland>, ...
- 项目管理工具Maven的安装
首先下载maven http://maven.apache.org/download.cgi 然后解压到不含中文和空格的目录,我直接解压到了D盘 然后添加环境变量: MAVEN_HOME:D:\apa ...