MyBatis笔记

您所在的位置:网站首页 resultmap的id和result区别 MyBatis笔记

MyBatis笔记

2024-07-13 07:22| 来源: 网络整理| 查看: 265

目录

一、resultType

1、select返回List

2、select记录封装Map

3、返回单个实体类的Map

4、返回多个实体类的Map

二、resultMap

1、通过resultMap实现高级结果映射集

2、使用resultMap进行关联查询

3、使用级联属性封装结果来进行关联查询

4、使用association定义关联对象封装规则

5、使用association进行分步查询

6、使用collection定义关联的集合类型元素的封装规则

7、使用collection定义关联的集合元素分步查询

8、使用discriminator鉴别器

一、resultType

从这条语句中返回的期望类型的类的完全限定名或别名,注意如果是集合,那应该是集合可以包含的类型,而不能是集合本身。 下面我们来讨论其返回List和Map的情况:

1、select返回List

在select元素中,如果返回的是一个集合,要在sql映射中写集合中元素的类型。

我们想实现通过名字来进行模糊查询,返回Employee类型的List集合。

public List getEmpsByLastNameLike(String lastName);

然后我们在sql映射文件中配置如下:

select * from tb1_employee where last_name like #{lastName}

注意resultType填入的是Employee的类型而不是List类型。

测试方法,查询名字带有e的:

package com.cerr.mybatis; import com.cerr.mybatis.dao.EmployeeMapper; import com.cerr.mybatis.dao.EmployeeMapperAnnotation; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.*; public class MyBatisTest { //获取SQLSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test9() throws IOException { //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { //获取接口的实现类对象:会为接口自动的创建一个代理对象,代理对象去执行增删改查 EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); //调用方法 List list = employeeMapper.getEmpsByLastNameLike("%e%"); for (Employee employee : list){ System.out.println(employee); } }finally { //关闭 sqlSession.close(); } } }

结果:

 

  13424350-328f8e186678575c.png  

 

2、select记录封装Map

有两种情况,一种是返回单个实体类的Map;另一种是返回多个实体类的Map。

3、返回单个实体类的Map

如果返回的是单个实体类的Map,那么在select元素中的resultType的值就是map。

我们想返回的Map是key为记录的列名,值为记录的值。我们首先在接口中定义一个方法:

public Map getEmpByIdReturnMap(Integer id);

然后在sql映射文件中给予配置,注意resultType的值是map:

package com.cerr.mybatis; import com.cerr.mybatis.dao.EmployeeMapper; import com.cerr.mybatis.dao.EmployeeMapperAnnotation; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.*; public class MyBatisTest { //获取SQLSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test8() throws IOException { //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { //获取接口的实现类对象:会为接口自动的创建一个代理对象,代理对象去执行增删改查 EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Map map = employeeMapper.getEmpByIdReturnMap(1); System.out.println(map); }finally { //关闭 sqlSession.close(); } } } 4、返回多个实体类的Map

我们想返回多个实体类的Map的话,那么resultType的值应该是实体类,而不是map本身。

我们想返回多个Employee组成的Map,key为Employee中的id顺序,在这里我们需要使用到@MapKey注解来指明我们要封装哪个属性为Map的key,值是Employee对象,我们先在接口中定义方法:

//告诉MyBatis封装这个Map的时候使用哪个属性作为Map的key @MapKey("id") public Map getEmpByLastNameReturnMap(String lastName);

SQL 映射文件:

select * from tb1_employee where last_name like #{lastName}

测试方法:

public class MyBatisTest { //获取SQLSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test9() throws IOException { //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); try { //获取接口的实现类对象:会为接口自动的创建一个代理对象,代理对象去执行增删改查 EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Map map = employeeMapper.getEmpByLastNameReturnMap("%e%"); System.out.println(map); }finally { //关闭 sqlSession.close(); } } }

结果:

 

  13424350-8450543c4d9ec890.png  

 

二、resultMap 1、通过resultMap实现高级结果映射集

其属性如下:

type:自定义规则的Java类型 id:唯一id方便引用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3