SSM之mybatis(2/2)

本文详细探讨了SSM中的Mybatis,涉及数据模型分析,如一对一、一对多和多对多查询,重点讲解了resultType和resultMap的使用场景和区别。此外,还介绍了Mybatis的延迟加载和查询缓存机制,并详述了Spring与Mybatis的整合过程,包括SqlSessionFactory配置、Mapper代理开发以及通过MapperFactoryBean和MapperScannerConfigurer创建和扫描Mapper。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节 SSM之mybatis(1/2)

目录

订单商品数据模型对mybatis进行分析

数据模型分析思路

一对一查询

一对多查询

多对多查询

resultType和resultMap的总结

resultType:

resultMap:

延迟加载

查询缓存

Spring和mybatis整合

整合思路

整合环境

SqlSessionFactory(applicationContext.xml)

mapper代理开发

mapper.xml和mapper.java

通过MapperFactoryBean创建代理对象

通过MapperScannerConfigurer进行mapper扫描

测试方法

逆向工程


订单商品数据模型对mybatis进行分析

数据模型分析思路

  • 每张表记录的数据内容

       分模块戳每张表记录的内容进行熟悉。

  • 每张表重要字段的设置

       非空字段、外键字段。

  • 数据库级别表与表之间的关系

       外键关系。

  • 表与表之间的业务关系

       在分析与表之间的业务关系时一定要建立在某个业务意义基础上去分析。

用户表:user

       记录了购买商品的用户信息

订单表:orders

       记录了用户所创建的订单(购买商品的订单)

订单明细表:orderdetail

       记录了订单的详细信息即购买商品的信息

商品表:items

       记录了商品信息

 

表与表之间的业务关系:

       在分析表与表之间的业务关系时需要建立在某个业务意义基础上去分析。

先分析数据级别之间有关系的表之间的业务关系。

 

User和orders:

User --> orders:一个用户可以创建多个订单,一对多

Orders --> user:一个订单只由一个用户创建,一对一

 

Orders和orderdetail:

Orders --> orderdetail:一个订单可以包括多个订单明细,因为一个订单可购买多个订单,每个商品的购买信息在orderdetail记录,一对多

Orderdetail --> orders:一个订单明细只能包括在一个订单中,一对一

 

Orderdetail和items:

Orderdetail --> items:以恶搞订单明细只对应一个商品信息,一对一

Items --> orderdetail:一个商品可以包括在多个订单明细,一对多

一对一查询

resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resultType。

 

resultMap:需单独定义resultMap,实现有点麻烦,如果对查询结果有特殊要求,使用resultMap可以完成将关联查询映射pojo的属性中。

 

resultMap可以实现延迟加载,resultType无法实现延迟加载。

一对多查询

Mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

使用resultType实现:

将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

多对多查询

需求:将查询用户购买的商品信息明细清单,(用户名、用户地址、购买商品名称、购买商品时间、购买商品数量)

 

针对上边的需求就使用resultType将查询到的记录映射到一个扩展的pojo’中,很简单实现明细清单的功能。

 

一对多是多对多的特例,如下需求:

查询用户购买的商品信息,用户和商品的关系是多对多关系。

需求1:

查询字段:用户账号、名称、性别,商品名称、价格(最常见)

企业开发中常见明细清单列表,用户购买商品明细清单列表,

使用resultType将上边查询列映射到pojo输出。

 

需求2:

查询字段:用户账号、名称,购买商品数量、商品明细(鼠标移上显示明细)

使用resultMap将用户购买的商品明细列表映射到user对象中。

 

总结

使用resultMap是针对那些对查询结果映射有特殊要求的功能,比如特殊要求映射成list中包括多个list。

resultType和resultMap的总结

resultType:

作用:

       将查询结果按照sql列名pojo属性名一致映射到pojo中。

场合:

       常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可以直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list是pojo)即可。

 

resultMap:

       使用association和collection完成一对一和一对多高级映射(对结果有特殊映射要求)。

 

Association:

作用:

       将关联查询信息映射到一个pojo对象中。

场合:

       为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。

       使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。

 

Collection:

作用:

       将关联查询信息映射到一个list集合中。

场合:

       为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块以下的菜单,可以使用collection将模块映射到模块list中,将菜单列表映射到模块对象的list属性中,这样做的目的也是方便对查询结果集进行遍历查询。

       如果使用resultType无法将查询结果映射到list集合中。

延迟加载

地址:https://blog.youkuaiyun.com/qq_40802448/article/details/88583745

查询缓存

地址:https://blog.youkuaiyun.com/qq_40802448/article/details/88583616

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值