查看“进阶:高级映射”的源代码
←
进阶:高级映射
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Mybatis]] __TOC__ == 关于 == {| class="wikitable" ! 标签 !! 说明 |- | association | 用于映射关联单个对象的信息 # property:表示关联查询的结果,对应于类的属性; # javaType:表示关联查询的结果类型(所映射的pojo类型); |- | collection | 用于关联查询到多条记录映射到集合对象中 # # # # # # # |} == 一对一 == 示例:查询所有订单信息,关联查询下单用户信息。<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> # association:表示进行关联查询单条记录; # property:表示关联查询的结果存储在cn.itcast.mybatis.po.Orders的user属性中; # javaType:表示关联查询的结果类型; # <id property="id" column="user_id"/>:查询结果的user_id列对应关联对象的id属性,这里是<id />表示user_id是关联查询对象的唯一标识; # <result property="username" column="username"/>:查询结果的username列对应关联对象的username属性; 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> == 一对多 == 示例:查询所有订单信息及订单下的订单明细信息。<br/> * 使用resultMap实现 <br/> note: # 订单->订单明细:一对多 <br/> Orders.java: # 在Orders类中加入List<Orderdetail> orderdetails属性; <syntaxhighlight lang="java" line highlight="13,16"> public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //用户信息 private User user; //订单明细 private List<Orderdetail> orderdetails; </syntaxhighlight> UserMapper.xml: # 不使用继承时: #: <syntaxhighlight lang="xml" line> <!-- 订单信息resultmap --> <resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap"> <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 property="id" column="user_id"/> <result property="username" column="username"/> <result property="address" column="address"/> </association> <!-- 使用collection进行一对多关联查询 --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <id property="id" column="orderdetail_id"/> <result property="items_id" column="items_id"/> <result property="items_num" column="items_num"/> </collection> </resultMap> <!-- 查询所有订单详情 --> <select id="findOrdersDetailList" resultMap="userorderdetailmap"> SELECT orders.*, user.username, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num FROM orders,user,orderdetail WHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id </select> </syntaxhighlight> # 使用继承,将collection写在单独的resultMap: #: <syntaxhighlight lang="xml" line highlight="2,15,24"> <!-- 订单信息resultmap:使用继承 --> <resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap"> <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 property="id" column="user_id"/> <result property="username" column="username"/> <result property="address" column="address"/> </association> </resultMap> <!-- 使用collection进行一对多关联查询 --> <!-- 继承自:"userordermap" --> <resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap" extends="userordermap"> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <id property="id" column="orderdetail_id"/> <result property="items_id" column="items_id"/> <result property="items_num" column="items_num"/> </collection> </resultMap> <!-- 查询所有订单详情 --> <select id="findOrdersDetailList" resultMap="userorderdetailmap"> SELECT orders.*, user.username, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num FROM orders,user,orderdetail WHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id </select> </syntaxhighlight> ## '''extends''':继承resultMap信息自userordermap; ## '''collection''':表示关联查询结果集; ## '''property''':关联查询的结果集存储在cn.itcast.mybatis.po.Orders上哪个属性。 ## '''ofType''':指定关联查询的结果集中的对象类型即List中的对象类型。 UserMapper.java: <syntaxhighlight lang="java" line highlight="1"> public List<Orders>findOrdersDetailList () throws Exception; </syntaxhighlight> UserMapperTest.java: <syntaxhighlight lang="java" line highlight="8"> Public void testfindOrdersDetailList()throws Exception{ //获取session SqlSession session = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapper userMapper = session.getMapper(UserMapper.class); //查询订单信息 List<Orders> list = userMapper.findOrdersDetailList(); System.out.println(list); //关闭session session.close(); } </syntaxhighlight> == 多对多 == == 延迟加载 ==
返回至“
进阶:高级映射
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息