“进阶:高级映射”的版本间差异
跳到导航
跳到搜索
(建立内容为“category:Mybatis __TOC__ == 关于 == == 一对一 == == 一对多 == == 多对多 == == 延迟加载 ==”的新页面) |
(→一对一) |
||
第5行: | 第5行: | ||
== 一对一 == | == 一对一 == | ||
示例:查询所有订单信息,关联查询下单用户信息。<br/> | |||
note: | |||
# 订单->用户:一对一 | |||
# 用户->订单:一对多 | |||
=== 使用resultType === | |||
使用resultType,专门的po类作为输出类型,此po类中包括了订单信息和用户信息:<br/> | |||
OrdersCustom.java: | |||
<syntaxhighlight lang="java" line highlight="3,4"> | |||
public class OrdersCustom extends Orders { | |||
private String username;// 用户名称 | |||
private String address;// 用户地址 | |||
// get/set | |||
} | |||
</syntaxhighlight> | |||
UserMapper.xml: | |||
<syntaxhighlight lang="xml" line highlight="2"> | |||
<!-- 查询所有订单信息 --> | |||
<select id="findOrdersList" resultType="OrdersCustom"> | |||
SELECT orders.*, user.username, user.address | |||
FROM orders, user | |||
WHERE orders.user_id = user.id | |||
</select> | |||
</syntaxhighlight> | |||
UserMapper.java: | |||
<syntaxhighlight lang="java" line highlight="1"> | |||
public List<OrdersCustom> findOrdersList() throws Exception; | |||
</syntaxhighlight> | |||
UserMapperTest.java: | |||
<syntaxhighlight lang="java" line highlight="8"> | |||
Public void testfindOrdersList()throws Exception{ | |||
//获取session | |||
SqlSession session = sqlSessionFactory.openSession(); | |||
//获限mapper接口实例 | |||
UserMapper userMapper = session.getMapper(UserMapper.class); | |||
//查询订单信息 | |||
List<OrdersCustom> list = userMapper.findOrdersList(); | |||
System.out.println(list); | |||
//关闭session | |||
session.close(); | |||
} | |||
</syntaxhighlight> | |||
=== 使用resultMap === | |||
使用resultMap,定义专门的resultMap用于映射一对一查询结果:<br/> | |||
* 在resultMap中使用'''association'''完成关联查询,将关联查询信息映射到pojo对象中。<br/> | |||
Orders.java: | |||
<syntaxhighlight lang="java" line highlight="13"> | |||
public class Orders { | |||
private Integer id; | |||
private Integer userId; | |||
private String number; | |||
private Date createtime; | |||
private String note; | |||
//用户信息 | |||
private User user; | |||
... | |||
} | |||
</syntaxhighlight> | |||
UserMapper.xml: | |||
<syntaxhighlight lang="xml" line highlight="2,8,17"> | |||
<!-- 订单信息resultmap --> | |||
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap"> | |||
<!-- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用,必须写 --> | |||
<id property="id" column="id"/> | |||
<result property="user_id" column="user_id"/> | |||
<result property="number" column="number"/> | |||
<!-- 使用association进行一对一关联查询 --> | |||
<association property="user" javaType="cn.itcast.mybatis.po.User"> | |||
<!-- 这里的id为user的id,如果写上表示给user的id属性赋值 --> | |||
<id property="id" column="user_id"/> | |||
<result property="username" column="username"/> | |||
<result property="address" column="address"/> | |||
</association> | |||
</resultMap> | |||
<!-- 查询所有订单信息 --> | |||
<select id="findOrdersListResultMap" resultType="userordermap"> | |||
SELECT orders.*, user.username, user.address | |||
FROM orders, user | |||
WHERE orders.user_id = user.id | |||
</select> | |||
</syntaxhighlight> | |||
UserMapper.java: | |||
<syntaxhighlight lang="java" line highlight="1"> | |||
public List<Orders> findOrdersListResultMap() throws Exception; | |||
</syntaxhighlight> | |||
UserMapperTest.java: | |||
<syntaxhighlight lang="java" line highlight="8"> | |||
Public void testfindOrdersListResultMap()throws Exception{ | |||
//获取session | |||
SqlSession session = sqlSessionFactory.openSession(); | |||
//获限mapper接口实例 | |||
UserMapper userMapper = session.getMapper(UserMapper.class); | |||
//查询订单信息 | |||
List<Orders> list = userMapper.findOrdersListResultMap(); | |||
System.out.println(list); | |||
//关闭session | |||
session.close(); | |||
} | |||
</syntaxhighlight> | |||
== 一对多 == | == 一对多 == | ||
== 多对多 == | == 多对多 == | ||
== 延迟加载 == | == 延迟加载 == |
2020年10月11日 (日) 02:09的版本
关于
一对一
示例:查询所有订单信息,关联查询下单用户信息。
note:
- 订单->用户:一对一
- 用户->订单:一对多
使用resultType
使用resultType,专门的po类作为输出类型,此po类中包括了订单信息和用户信息:
OrdersCustom.java:
public class OrdersCustom extends Orders {
private String username;// 用户名称
private String address;// 用户地址
// get/set
}
UserMapper.xml:
<!-- 查询所有订单信息 -->
<select id="findOrdersList" resultType="OrdersCustom">
SELECT orders.*, user.username, user.address
FROM orders, user
WHERE orders.user_id = user.id
</select>
UserMapper.java:
public List<OrdersCustom> findOrdersList() throws Exception;
UserMapperTest.java:
Public void testfindOrdersList()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//查询订单信息
List<OrdersCustom> list = userMapper.findOrdersList();
System.out.println(list);
//关闭session
session.close();
}
使用resultMap
使用resultMap,定义专门的resultMap用于映射一对一查询结果:
- 在resultMap中使用association完成关联查询,将关联查询信息映射到pojo对象中。
Orders.java:
public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
//用户信息
private User user;
...
}
UserMapper.xml:
<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap">
<!-- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用,必须写 -->
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<!-- 使用association进行一对一关联查询 -->
<association property="user" javaType="cn.itcast.mybatis.po.User">
<!-- 这里的id为user的id,如果写上表示给user的id属性赋值 -->
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
<!-- 查询所有订单信息 -->
<select id="findOrdersListResultMap" resultType="userordermap">
SELECT orders.*, user.username, user.address
FROM orders, user
WHERE orders.user_id = user.id
</select>
UserMapper.java:
public List<Orders> findOrdersListResultMap() throws Exception;
UserMapperTest.java:
Public void testfindOrdersListResultMap()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//查询订单信息
List<Orders> list = userMapper.findOrdersListResultMap();
System.out.println(list);
//关闭session
session.close();
}