本文主要是介绍springboot+mybatis一对多查询+懒加载实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《springboot+mybatis一对多查询+懒加载实例》文章介绍了如何在SpringBoot和MyBatis中实现一对多查询的懒加载,通过配置MyBatis的`fetchType`属性,可以全局...
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 ParentMpythonessageService { @Autowired ParentMessageMapper parentMessageMapper; public List<ParentMessage> findAll(){ return parentMessageMapper.findAll(); } }
mapper.XML
<?xml versihttp://www.chinasem.cnon=python"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"> selandroidect 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;
pr编程ivate 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”
例如下图:

总结
这篇关于springboot+mybatis一对多查询+懒加载实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!