Mybatis学习第四天——一对一&&一对多
两表关系:
1.Mybatis中一对一关系
<!-- 两表联查,通过相同属性user_id
left join 表示以左边的表为主表
-->
<select id="findOrdersByUser" parameterType="User" resultMap="orders_user">
select
o.id,
o.number,
o.createtime,
o.user_id,
u.username,
u.address
from orders o
left join user u
on o.user_id = u.id
</select>
一对一查询的sql代码,这里采用的是resultMap方式查询,即在Orders类中定义一对一的User对象 private User user;
<!-- (均采用别名方式)
type:返回类型,同时也是主要依照的表
注意:在一对一关联中不能省略属性
association:一对一标签
property:在Orders类中对应User的属性名,Orders与type中的类型需一致
javaType:该一对一关系,对应的pojo类 -->
<resultMap type="Orders" id="orders_user">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="user_id" property="userId"/> <association property="user" javaType="User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/>
</association>
</resultMap>
注意:id标签表示唯一性,一般是选取该表的id字段,当出现一对一、一对多关系时涉及2个id,那么可以选取表中(能访问的任意属性)能够表示该表唯一性的属性放在id标签中,上面代码此时order表中user_id字段与user表中id一致,故可以作为唯一性标志,若只能找到该表的id为唯一性属性,同时另一张表中已采用id为唯一标签,此时可以对id进行别名区别。别名操作在sql语句中执行。
2.Mybatis中一对多关系
一对多关系与一对一相似,主要在标签方面有些区别
<!-- 此次将user表作为主表,主表中不可能出现重复id -->
<select id="findUserByOrders" parameterType="Orders" resultMap="user_orders">
select
o.id,
o.number,
o.createtime,
u.id uid,
u.username,
u.address
from user u
left join orders o
on o.user_id = u.id
</select>
<resultMap type="User" id="user_orders">
<id column="uid" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/> <!-- 一对多中不能简单地将javaType赋为Orders类型
此时Mybatis不能自动区别是否为集合属性,此时须通过ofType设置属性类型
-->
<collection property="order" ofType="Orders">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
</collection>
</resultMap>
Mybatis学习第四天——一对一&&一对多的更多相关文章
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- Mybatis学习(四)————— 高级映射,一对一,一对多,多对多映射
一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部 ...
- MyBatis学习(四)MyBatis一对一关联查询
一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...
- mybatis学习 十四 resultMap标签 一对一(联合查询)
1.使用 resultMap 实现关联单个对象(联合查询方式) <resultMap type="Student" id="stuMap1"> &l ...
- Mybatis学习总结四(关联查询)
一.一对一查询 实例:查询所有订单信息,关联查询下单用户信息. Method1:使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息. public class Order ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- MyBatis学习(四)、MyBatis配置文件
四.MyBatis主配置文件 在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" clas ...
随机推荐
- linux安装oracle 报错[INS-20802] Oracle Net Configuration Assistant failed 解决办法
[INS-20802] Oracle Net Configuration Assistant failed 首先从LinuxIDC.com下载这个补丁包,然后用 unzip p8670579_1120 ...
- Django中-事务操作
如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...
- 003javascript语句
javascript语句和java差不多,注意==和===区别 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " ...
- 使用单体模式设计原生js插件
----------基于上次写的jquery插件进行改造 http://www.cnblogs.com/GerryOfZhong/p/5533773.html 背景:jQuery插件依赖jQuery ...
- 在Linux上使用C语言编程获取IPv4地址及子网掩码
在Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令. $ ifcon ...
- 【Echo】实验 -- 实现 C/C++下UDP, 服务器/客户端 通讯
本次实验利用UDP协议, 语言环境为 C/C++ 利用套接字Socket编程,实现Server/CLient 之间简单的通讯. 结果应为类似所示: 下面贴上代码(参考参考...) Server 部分: ...
- 相对布局--RelativeLayout
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- shell脚本:行列转换
Mybatis中写sql,如select,会涉及到一长串列名. `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) COLLATE ut ...
- mysql索引对单表查询的影响
索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行.表越大,花费时间越多. 如果表对于查询的列有一个索引,MySQL能快速到达 ...
- BTREE索引和HASH索引的区别
从本质上理解,BTREE是一种有序树,而hash是无序的.所以最关键的区别在于: 1,BTREE可以用来做范围查询,比如大于,小于,而HASH索引仅在"=","IN&qu ...