mybatis怎么配置一对多
⑴ spring boot + MyBatisPlus 一对多、多对一、多对多的解决方案
在学习MyBatisPlus 时念穗,简单的查询非常简单,只需继承了相关类,就能够进行增删改。但是在实旅高冲际运用时,对象之间的关系非常复杂,一对多、多对一、多对多。网上查询了大量资料都无法解决此问题。
难道要把所有的用Mybatis的重写一次?
重写一次Plus的方法还能不能用?
实在没办只能查看官网https://mp.baomidou.com/guide/在注解处找到了可能的解决拆歼方案
@TableName注解可以设置对应的resultMap 看到这里我想是不是,在Mapper中设置好resultMap,map中使用association、或者collection就能解决了。结果是可以的,上图:
实体类
mapper
rest效果
完美解决!!!
⑵ MyBatis一对多和一对一xml文件的配置
在使用mybatis的时候我们经常要用到联合查询,现在就对一表对多表和一对一表的xml文件配置进行说明
Student.xml
StudentBean
一对一在Bean中我们可以将其对象作为自身实体类的一个成员变量,一对多返回的结果是一个集合所以将其集合作为成员变量。
CourseBean
TeacherBean
Course.xml
teacher.xml
association标签是用来配置一对一表判局查询的,collection是配置一对多表查询的。
一对一查询中mybatis会将查询结哪冲慎果封装到相应的对象中,如teacher对象,李敬而一对多将返回一个List集合如List<courseList>.
⑶ mybatis一对多分页查询
例如 一个门店 对应多张图片 可正常使用PageHelper分页
PageHelper.startPage(page, size);
select
*
from cms_store
limit 10,10 //正常单表查分页即可
</select>
<resultMap id="BaseResultMap" type="com.bear.sh.cloud.service.somhec.domain.CmsStore">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="enable_status" jdbcType="INTEGER" property="enableStatus" />
<result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
<select id="queryImagesList" resultType="com.bear.sh.cloud.service.somhec.domain.CmsStoreImage">
select<include refid="Base_Image_Column_List">
from cms_store_image csi
where csi.store_id = #{id}
</select>
即1条主表记录 然后封装resultMap 里的cmsStoreImages属性时,会拿这条记录的id(不限于id y要拿什么值 输什么column)(所以column的值很重要!!) 来到select里去查对应的多条记录
如果使用left join 一对多查询 则会产生多条记录 例如一个门店有3条图片记录
则本来要查的门物裤档店应该是一条不重复记录 结果统计数据的时候罩乱却统计了3条 虽然最后mybatis会封装到1条主表数据里
这会造成纯并两个问题: 1:总条数不准 2查询10条主表数据 mybatis组合封装后只返回了 三四条主表数据
解决:先对主表进行分页查询 然后left join 从表
select * from
(select * from cms_store limit 10) cs
left join cms_store_image csi on cs.id = csi.store_id 即可查询一对多且 一的条数为10条
总记录数需要另外统计
⑷ mybatis怎么配置一对多的映射关系
MyBatis详解 与配置MyBatis+Spring+MysqlMyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。MyBatis简介 MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。
⑸ MyBatis一对多查询及延迟加载
查询所有订单信息,关联查询下单用户信息。
主信息段核:订单信息
从信息:用户信息
使用resultMap进行结果映射,雹中定义专门的resultMap用于映射一对一查源燃山询结果。
property:Order对象的user属性。
javaType:user属性对应 的类型。
association:表示进行一对一关联查询映射。
使用resultMap进行结果映射时,具体是使用association完成关联查询的映射,将关联查询信息映射到pojo对象中。
查询所有用户信息及用户关联的订单信息。
主信息:用户信息
从信息:订单信息
在一对多的使用中,只能使用resultMap进行结果映射
Collection标签:定义了一对多关联的结果映射。
property="orders":关联查询的结果集存储在User对象的上哪个属性。
ofType="com.demo.mybatis.po.Order":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。
MyBatis根据关联对象查询的select的语句的执行时机,分为三种类型: 直接加载、侵入式加载和深度延迟加载 。
延迟加载策略需要在Mybatis的全局配置文件中,通过标签进行设置。
执行完对主加载对象的select语句,马上执行对关联对象的select查询。
执行对主加载对象的select查询时,不会执行对关联对象的查询。但当要访问主加载对象的某个属性(该属性不是关联对象的属性)时,就会马上执行关联对象的select查询。
执行对主加载对象的select查询时,不会执行对关联对象的查询。当要访问主加载对象的详情时也不会执行对关联对象的查询。当访问到关联对象的详情时才执行对关联对象的查询。
⑹ mybatis一对多查询怎么配置两个表没有建立外键关系
用这个设置外键试猛御樱试
<association property="" column="枝丛" javaType="" resultMap=""/拆宴>
⑺ mybatis中怎么实现一对多
可以使用rapid-generator生成吵轿链模板 写个baseVO 包括你需要的插入的属性帆链 直接把base当变量升孙传给sqlmap
⑻ mybatis中一对多怎么设置
id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌拍坦念入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。顾客和订单的信宽例子做说明:一个顾客可以有多个订单, 一个订单只对应一个顾客
1、代码结构图: