验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

MyBatis如何自定义映射resultMap

阅读:1062 来源:乙速云 作者:代码code

MyBatis如何自定义映射resultMap

      1 准备工作

      1.1 建表

      t_emp

      MyBatis如何自定义映射resultMap

      MyBatis如何自定义映射resultMap

      添加测试数据:

      MyBatis如何自定义映射resultMap

      1.2 创建实体类

      在src/main/java/com/rqs/mybatis/pojo下创建Emp类:

      Emp类:

      package com.rqs.mybatis.pojo;
      
      public class Emp {
          private Integer eid;
          private String empName;
          private Integer age;
          private String sex;
          private String email;
      
          public Integer getEid() {
              return eid;
          }
      
          public void setEid(Integer eid) {
              this.eid = eid;
          }
      
          public String getEmpName() {
              return empName;
          }
      
          public void setEmpName(String empName) {
              this.empName = empName;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          public String getSex() {
              return sex;
          }
      
          public void setSex(String sex) {
              this.sex = sex;
          }
      
          public String getEmail() {
              return email;
          }
      
          public void setEmail(String email) {
              this.email = email;
          }
      
          public Emp() {
          }
      
          public Emp(Integer eid, String empName, Integer age, String sex, String email) {
              this.eid = eid;
              this.empName = empName;
              this.age = age;
              this.sex = sex;
              this.email = email;
          }
      
          @Override
          public String toString() {
              return "Emp{" +
                      "eid=" + eid +
                      ", empName='" + empName + ''' +
                      ", age=" + age +
                      ", sex='" + sex + ''' +
                      ", email='" + email + ''' +
                      '}';
          }
      }

      1.3 引出一个问题

      MyBatis如何自定义映射resultMap

      在之前实现查询功能的时候,用到的都是resultType来设置默认的映射关系,要求字段名(数据库表中的字段名)和属性名(java类中的属性名)保持一致,例如下图所示,字段名和属性名是一致的。

      字段名:

      MyBatis如何自定义映射resultMap

      属性名:

      MyBatis如何自定义映射resultMap

      但是,在本例中,出现了字段名和属性名不一致的情况,如下图

      字段名要求单词与单词之间使用下划线连接:

      MyBatis如何自定义映射resultMap

      属性名,单词与单词之间命名遵循驼峰原则:

      MyBatis如何自定义映射resultMap

      如下所示,在进行查询操作的时候,由于无法映射,导致empName的查询结果为空

      MyBatis如何自定义映射resultMap

      既然字段名和属性名不一致了,那么该如何处理映射关系呢?

      方案1

      在EmpMapper.xml的SQL语句中为字段起别名,保持和属性名的一致

      MyBatis如何自定义映射resultMap

      结果如下所示:

      MyBatis如何自定义映射resultMap

      方案2

      在核心配置文件mybatis-config.xml中设置全局配置,将_自动映射为驼峰

          
          
          
              
          

      注意:MyBatis核心配置文件标签的设置顺序,要把settings放在properties和typeAlliases中间

          properties?,settings?,typeAliases?,typeHandlers?,
          objectFactory?,objectWrapperFactory?,reflectorFactory?,
          plugins?,environments?,databaseIdProvider?,mappers?

      测试结果:

      MyBatis如何自定义映射resultMap

      方案3

      在核心配置文件mybatis-config.xml中,通过resultMap逐一设置自定义的映射关系

          
          
              
              
              
              
              
          
      
          
          
              select * from t_emp
          

      测试结果:

      MyBatis如何自定义映射resultMap

      2.完整代码

      项目结构

      MyBatis如何自定义映射resultMap

      EmpMapper接口

      package com.rqs.mybatis.mapper;
      
      import com.rqs.mybatis.pojo.Emp;
      import org.apache.ibatis.annotations.Param;
      
      import java.util.List;
      
      
      public interface EmpMapper {
      
          /**
           * 查询所有的员工信息
           */
          List getAllEmp();
          
      }

      Emp类

      package com.rqs.mybatis.pojo;
      
      public class Emp {
          private Integer eid;
          private String empName;
          private Integer age;
          private String sex;
          private String email;
      
      
          public Integer getEid() {
              return eid;
          }
      
          public void setEid(Integer eid) {
              this.eid = eid;
          }
      
          public String getEmpName() {
              return empName;
          }
      
          public void setEmpName(String empName) {
              this.empName = empName;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          public String getSex() {
              return sex;
          }
      
          public void setSex(String sex) {
              this.sex = sex;
          }
      
          public String getEmail() {
              return email;
          }
      
          public void setEmail(String email) {
              this.email = email;
          }
      
          public Emp() {
          }
      
          public Emp(Integer eid, String empName, Integer age, String sex, String email) {
              this.eid = eid;
              this.empName = empName;
              this.age = age;
              this.sex = sex;
              this.email = email;
          }
      
          @Override
          public String toString() {
              return "Emp{" +
                      "eid=" + eid +
                      ", empName='" + empName + ''' +
                      ", age=" + age +
                      ", sex='" + sex + ''' +
                      ", email='" + email + ''' +
                      '}';
          }
      }

      SqlSessionUtils工具类

      package com.rqs.mybatis.utils;
      
      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 java.io.IOException;
      import java.io.InputStream;
      
      public class SqlSessionUtils {
          public static SqlSession getSqlSession() {
              SqlSession sqlSession = null;
              try {
                  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                  sqlSession = sqlSessionFactory.openSession(true);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return sqlSession;
          }
      }

      EmpMapper.xml

      
      
      
      
          
          
              
              
              
              
              
          
      
          
          
              select * from t_emp
          
      
      
          
              
              select * from t_emp
          
      
      
      

      jdbc.properties

      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/mybatis
      jdbc.username=root
      jdbc.password=root

      log4j.xml

      
      
      
          
              
              
                  
              
          
          
              
          
          
              
          
          
              
              
          
      

      mybatis-config.xml

      
      
      
      
      
      
          
      
          
      
      
      
      
      
          
          
              
              
      
              
              
          
      
      
      
          
          
          
          
              
              
                  
                  
                  
                      
                      
                      
                      
                      
                      
                      
                      
                  
              
          
      
      
          
          
              
              
              
          
      
      
      

      ResultMapTest

      package com.rqs.mybatis.test;
      
      import com.rqs.mybatis.mapper.EmpMapper;
      import com.rqs.mybatis.pojo.Emp;
      import com.rqs.mybatis.utils.SqlSessionUtils;
      import org.apache.ibatis.session.SqlSession;
      import org.junit.Test;
      
      import java.util.List;
      
      
      public class ResultMapTest {
      
          /**
           * 解决字段名和属性名不一致的情况:
           * a>为字段起别名,保持和属性名的一致
           * b>设置全局配置,将_自动映射为驼峰
           * 
           * c>通过resultMap设置自定义的映射关系
           * 
           *     
           *     
           *     
           *     
           *     
           * 
           */
      
      
          @Test
          public void testGetAllEmp(){
              SqlSession sqlSession = SqlSessionUtils.getSqlSession();
              EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
              List list = mapper.getAllEmp();
              list.forEach(emp -> System.out.println(emp));
          }
      
      
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>