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”
例如下图:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论