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

目录

  • 一、返回集合
    • 1.返回JavaBean集合
    • 2.返回 Map 集合
  • 二、返回 Map
    • 1.一条记录
    • 2.多条记录,需要指定 Map 的 Key 和 Value 的类型
  • 三、返回 resultMap 自定义结果集封装
    • 1.自定义 JavaBean 的封装
    • 2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean
    • 3.关联查询的封装,一对多,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(); }}}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


2.返回 Map 集合
select * from myuser

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


二、返回 Map
1.一条记录
public Map selectMyUserById(Integer id);

select * from myuser where id = #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


2.多条记录,需要指定 Map 的 Key 和 Value 的类型
// 指定 Map 的 Key 从记录中的 id 列获取@MapKey("id")public Map selectMyUserByGtId(Integer id);

select * from myuser where id > #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


三、返回 resultMap 自定义结果集封装 关于自动映射封装的配置

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

1.自定义 JavaBean 的封装
确认是否成功可以关掉 MyBatis 的自动映射

public MyUser selectMyUserById(Integer id);

select * from myuser where id = #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean
详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

public MyUser selectMyUserById(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 m.id = #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

使用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}

select * from dept where id = #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

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


3.关联查询的封装,一对多,JavaBean 属性包含 JavaBean 的集合
详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

使用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}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

关闭懒加载,使用二次查询
public Dept getDeptByIdStep(Integer did);

select * from dept where id = #{id}

public List selectMyUserByDid(Integer dId);

select * from myuser where dId = #{did}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片


4.鉴别器discriminator
SELECT * FROM myuser WHERE id = #{id}

select * from dept where id = #{id}

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

上面测试中使用的实体类与数据
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;

详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型
文章图片

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html
【详解MyBatis|详解MyBatis resultType与resultMap中的几种返回类型】到此这篇关于详解MyBatis resultType与resultMap中的几种返回类型的文章就介绍到这了,更多相关MyBatis resultType与resultMap返回类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读