详解MyBatis resultType与resultMap中的几种返回类型

网友投稿 1142 2022-12-08

详解MyBatis resultType与resultMap中的几种返回类型

详解MyBatis resultType与resultMap中的几种返回类型

目录一、返回集合1.返回javaBean集合2.返回 Map 集合二、返回 Map1.一条记录2.多条记录,需要指定 Map 的 Key 和 Value 的类型三、返回 resultMap 自定义结果集封装1.自定义 JavaBean 的封装2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean3.关联查询的封装,一对多,JavaBean 属性包含 JavaBean 的集合4.鉴别器discriminator

一、返回集合

1.返回JavaBean集合

public List selectMyUserByNameLike(String name);

select * from myuser where name like #{name}

测试方法

public static void main(String[] args) {

SqlSession session = null;

try {

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

session = sqlSessionFactory.openSession();

MyUserMapper mapper = session.getMapper(MyUserMapper.class);

List myUsers = mapper.selectMyUserByNameLike("%a%");

System.out.println(myUsers);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (session != null) {

session.close();

}

}

}

2.返回 Map 集合

select * from myuser

二、返回 Map

1.一条记录

public Map selectMyUserById(Integer id);

select * from myuser where id = #{id}

2.多条记录,需要指定 Map 的 Key 和 Value 的类型

// 指定 Map 的 Key 从记录中的 id 列获取

@MapKey("id")

public Map selectMyUserByGtId(Integer id);

select * from myuser where id > #{id}

三、返回 resultMap 自定义结果集封装

关于自动映射封装的配置

默认数据库字段与 JavaBean 对应不上时可开启驼峰命名或查询时使用别名http://mybatis.org/mybatis-3/zh/sqlmap-xml.html

1.自定义 JavaBean 的封装

确认是否成功可以关掉 MyBatis 的自动映射

kSBzNOMo

public MyUser selectMyUserById(Integer id);

select * from myuser where id = #{id}

2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean

public MyUser selectMyUserById(Integer id);

直接调用属性赋值

&lkSBzNOMot;result column="dname" property="dept.name"/>

SELECT m.id, m.name, m.age, m.did, d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND m.id = #{id}

使用association

SELECT m.id, m.name, m.age, m.did, d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND m.id = #{id}

使用association 二次查询,即有两条 SQL

SELECT * FROM myuser WHERE id = #{id}

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from dept where id = #{id}

开启懒加载:在没有使用 Dept 的属性时,则只会加载 MyUser 的属性。即只会发送一条 SQL 语句,要使用Dept 属性时才会发送第二条 SQL。不会一次性发送两条 SQL

3.关联查询的封装,一对多,JavaBean 属性包含 JavaBean 的集合

使用association

public Dept getDeptById(Integer id);

SELECT m.id,m.name,m.age,m.did,d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND d.id = #{id}

关闭懒加载,使用二次查询

public Dept getDeptByIdStep(Integer did);

column="{did=id}" fetchType="eager"/>

select * from dept where id = #{id}

public List selectMyUserByDid(Integer dId);

select * from myuser where dId = #{did}

4.鉴别器discriminator

SELECT * FROM myuser WHERE id = #{id}

select * from dept where id = #{id}

上面测试中使用的实体类与数据

public class Dept {

private Integer id;

private String name;

private List myUsers;

public class MyUser {

private Integer id;

private String name;

private Integer age;

private Dept dept;

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

column="{did=id}" fetchType="eager"/>

select * from dept where id = #{id}

public List selectMyUserByDid(Integer dId);

select * from myuser where dId = #{did}

4.鉴别器discriminator

SELECT * FROM myuser WHERE id = #{id}

select * from dept where id = #{id}

上面测试中使用的实体类与数据

public class Dept {

private Integer id;

private String name;

private List myUsers;

public class MyUser {

private Integer id;

private String name;

private Integer age;

private Dept dept;

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于Spring的@Autowired依赖注入常见错误的总结
下一篇:源码解析带你了解LinkedHashMap
相关文章

 发表评论

暂时没有评论,来抢沙发吧~