springboot + mybatis 一对多查询 + 懒加载

springboot + mybatis 一对多查询 + 懒加载

                                 直接上图

父表
在这里插入图片描述
子表
在这里插入图片描述

parent相关代码

entity

public class ParentMessage implements Serializable {

    private Integer id;

    private String value;

    private List<ChildMessage> childMessages;

    get set ......
}

mapper


@Repository
public interface ParentMessageMapper {

     List<ParentMessage> findAll();

     ParentMessage findById(Integer id);
}

service


@Service
public class ParentMessageService {

    @Autowired
    ParentMessageMapper parentMessageMapper;

    public List<ParentMessage> findAll(){

        return parentMessageMapper.findAll();
    }
}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.ParentMessageMapper">

    <resultMap id="parentMessageMap" type="parentMessage">
        <id column="id" property="id"/>
        <result column="value" property="value" javaType="String"/>
        <collection fetchType="eager" property="childMessages" column="id" select="com.demo.mapper.ChildMessageMapper.findByOtherId" javaType="List" typeHandler="com.demo.mybatistypehandler.ListTypeHandler"/>
    </resultMap>

    <select id="findAll" resultMap="parentMessageMap">
        select id , value from mk_parentmessage
    </select>

    <select id="findById" resultType="parentMessage">
        select * from mk_parentmessage;
    </select>
</mapper>

child 相关代码

entity

public class ChildMessage implements Serializable {

    private Integer id;

    private String value;

    private ParentMessage parentMessage;

}

mapper

@Repository
public interface ChildMessageMapper {

    List<ChildMessage> findByOtherId(Integer id);

    List<ChildMessage> findAll();
}

service

@Service
public class ChildMessagService {

    @Autowired
    ChildMessageMapper childMessageMapper;

    public List<ChildMessage> findAll(){

        return childMessageMapper.findAll();
    }
}

mapper.xlm

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.ChildMessageMapper">

    <resultMap id="childMessageMap" type="childMessage">
        <id column="id" property="id"/>
        <result column="value" property="value"/>
        <association property="parentMessage" column="parent_id" select="com.demo.mapper.ParentMessageMapper.findById" javaType="ParentMessage"/>
    </resultMap>

    <select id="findByOtherId" resultType="childMessage">
        select id id, value value from mk_childmessage;
    </select>

    <select id="findAll" resultMap="childMessageMap">
        select * from mk_childmessage;
    </select>
</mapper>

Controller测试

@RestController
@RequestMapping("message")
public class MessageController {

    @Autowired
    ParentMessageService parentMessageService;

    @Autowired
    ChildMessagService childMessagService;

    @GetMapping("findAll")
    public ResponseEntity getParentMessage(){

        return ResponseEntity.ok(parentMessageService.findAll(););
    }

}

返回结果:
在这里插入图片描述
懒加载

配置属性

mybatis.configuration.lazy-loading-enabled=true
#false 为按需加载
mybatis.configuration.aggressive-lazy-loading=false

这样就实现了全局懒加载,若个别需要关闭,可用 fetchType=“eager”,例如下图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值