MyBatis笔记 |
您所在的位置:网站首页 › resultmap的id和result区别 › MyBatis笔记 |
目录 一、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(); } } }结果:
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(); } } }结果:
二、resultMap 1、通过resultMap实现高级结果映射集 其属性如下: type:自定义规则的Java类型 id:唯一id方便引用 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |