好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

基于新信息技术的Java-EE应用开发实训教程课件:MyBatis关联查询.pptx

32页
  • 卖家[上传人]:第***
  • 文档编号:612667212
  • 上传时间:2025-08-04
  • 文档格式:PPTX
  • 文档大小:123.59KB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MyBatis关联查询,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MyBatis关联查询,12.1 商品订单数据模型,12.2 一对一查询,12.3 一对多查询,12.4 多对多查询,12.5 延迟加载,12.1 商品订单数据模型,商品订单数据模型,包括订单表、订单明细表、用户表、商品信息表等,具体如下:,订单表(orders):记录用户创建的订单,字段有user_id(外键)、订单id、创建时间、订单状态等订单明细表(orderdetail):记录用户购买信息,字段有订单id(外键)、商品id(外键)、商品数量、商品购买价格等用户表(user):记录购买商品的用户信息,字段有user_id(唯一标识一个用户)、用户名、联系等商品信息表(items):记录所有商品信息,字段有商品id(主键)、商品名称、商品介绍、商品价格等12.2 一 对 一 查 询,12.2.1 方法一:使用resultType,使用resultType定义订单信息po类该po类中包括了订单信息和用户信息。

      1)sql语句:,SELECT,orders.*,user.username,userss.address,FROM,orders,user,WHERE orders.user_id=user.id,(2)定义po类po类中应该包括上边sql查询出来的所有字段,代码如下:,public class OrdersCustom extends Orders,private String username;/用户名称,private String address;/用户地址,get/set.,OrdersCustom类继承Orders类后,OrdersCustom类中包括了Orders类的所有字段,因此只需要定义用户的信息字段3)Mapper.xml:,SELECT,orders.*,user.username,user.address,FROM,orders,user,WHERE orders.user_id=user.id,(4)Mapper接口:,public List findOrdersList()throws Exception;,(5)测试:,Public void testfindOrdersList()throws Exception,/获取session,SqlSession session=sqlSessionFactory.openSession();,/获取Mapper接口实例,UserMapper userMapper=session.getMapper(UserMapper.class);,/查询订单信息,List list=userMapper.findOrdersList();,System.out.println(list);,/关闭session,session.close();,(6)总结:,定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。

      此方法较为简单,企业中使用普遍12.2.2 方法二:使用resultMap,使用resultMap定义专门的resultMap用于映射一对一查询结果1)sql语句:,SELECT,orders.*,user.username,user.address,FROM,orders,user,WHERE orders.user_id=user.id,(2)定义po类在Orders类中加入user属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个user对象存储关联查询的用户信息3)Mapper.xml:,SELECT,orders.*,user.username,user.address,FROM,orders,user,WHERE orders.user_id=user.id,这里resultMap指定userordermap4)定义resultMap需要关联查询映射的是用户信息,使用association将用户信息映射到订单对象的用户属性中association:关联查询单条记录property:关联查询的结果存储在cn.itcast.mybatis.po.Orders的user属性中。

      javaType:关联查询的结果类型查询结果的user_id列对应关联对象的id属性,这里是表示user_id是关联查询对象的唯一标识查询结果的username列对应关联对象的username属性5)Mapper接口:,public List findOrdersListResultMap()throws Exception;,(6)测试:,Public void testfindOrdersListResultMap()throws Exception,/获取session,SqlSession session=sqlSessionFactory.openSession();,/获取mapper接口实例,UserMapper userMapper=session.getMapper(UserMapper.class);,/查询订单信息,List list=userMapper.findOrdersList2();,System.out.println(list);,/关闭session,session.close();,(7)小结:,使用association完成关联查询,将关联查询信息映射到pojo对象中。

      12.3 一对多查询,案例:查询所有订单信息及订单下的订单明细信息订单信息与订单明细为一对多关系使用resultMap实现1)sql语句:,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,(2)定义po类在Orders类中加入user属性在Orders类中加入List orderdetails属性3)Mapper.xml:,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,(4)定义resultMap。

      collection:关联查询结果集,定义查询订单明细信息property=orderdetails:关联查询的结果集存储在cn.itcast.mybatis.po.Orders的哪个属性中ofType=cn.itcast.mybatis.po.Orderdetail:指定关联查询的结果集中的对象类型,即list中的对象类型及的意义同“一对一查询”resultMap使用继承上述代码的resultmap定义与“一对一查询”相同,这里使用继承可以不再填写重复的内容,其他如下:,使用extends继承订单信息userordermap5)Mapper接口:,public ListfindOrdersDetailList()throws Exception;,(6)测试:,Public void testfindOrdersDetailList()throws Exception,/获取session,SqlSession session=sqlSessionFactory.openSession();,/获取Mapper接口实例,UserMapper userMapper=session.getMapper(UserMapper.class);,/查询订单信息,List list=userMapper.findOrdersDetailList();,System.out.println(list);,/关闭session,session.close();,(7)小结:,使用collection完成关联查询,将关联查询信息映射到集合对象。

      12.4 多对多查询,案例:查询用户购买的商品信息1)sql需要查询所有用户信息,关联查询订单及订单明细信息,订单明细信息中关联查询商品信息SELECT,orders.*,USER.username,USER.address,orderdetail.id orderdetail_id,orderdetail.items_id,orderdetail.items_num,items.name items_name,items.detail items_detail,FROM,orders,USER,orderdetail,items,WHERE,orders.user_id=USER.id,AND orders.id=orderdetail.orders_id,AND orderdetail.items_id=items.id,(2)po定义在user中添加List orders 属性,在Orders类中加入List orderdetails属性3)resultMap需要关联查询映射的信息是:订单、订单明细、商品信息订单:一个用户对应多个订单,使用collection映射到用户对象的订单列表属性中。

      订单明细:一个订单对应多个明细,使用collection映射到订单对象中的明细属性中商品信息:一个订单明细对应一个商品,使用association映射到订单明细对象的商品属性中4)小结一对多是多对多的特例,如下需求:,查询用户购买的商品信息,用户和商品的关系是多对多关系需求1:,查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见),企业开发中常见明细列表,用户购买商品明细列表,使用resultType将上边查询列映射到POJO输出需求2:,查询字段:用户账号、用户名称、购买商品数量、商品明细(鼠标移上显示明细),使用resultMap将用户购买的商品明细列表映射到user对象中12.5 延 迟 加 载,12.5.1 打开延迟加载开关,在MyBatis核心配置文件中有两个配置:lazyLoadingEnabled、aggressiveLazyLoading,其设置如表12-1所示12.5.2 一对一查询延迟加载,(1)需求:,查询订单信息,关联查询用户信息默认只查询订单信息,当需要查询用户信息时再去查询用户信息2)sql语句:,SELECT,orders.*,FROM,orders,(3)定义po类。

      在Orders类中加入user属性4)Mapper.xml:,SELECT,orders.*,FROM,orders,(5)定义resultMapssociation:,select=findUserById:指定关联查询sql为findUserByIdcolumn=user_id:关联查询时将users_id列的值传入findUserById最后将关联查询结果映射至cn.itcast.mybatis.po.User6)Mapper接口:,public List findOrdersList3()t。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.