【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件

 SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用 select * from Students INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(#{studId},#{name},#{email},#{dob}) UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, DOB=#{dob} WHERE STUD_ID=#{studId}

 

resultMap元素

resultMap元素是MyBatis对查询结果进行ORM的主要配置项,简单的说它类似于Hibernate的实体与POJO的映射配置,resultMap的属性和子配置项包括:

 

resultMap元素的属性

  • id:定义resultMap配置项的唯一ID,用于标示resultMap,在 select stud_id, name, email, dob from Students where stud_id=#{studId}
    • 当列名与POJO属性名一样时,MyBatis自动将列的取值设置到POJO字段上,比如
    • 当列名与POJO属性名不一样时,MyBatis不会将列的取值设置到POJO字段上,所以上面的例子中返回的Student对象,studId字段为null
    • 可以使用SQL的列名的as语法,将列名重命名为对应的POJO的属性名如 select stud_id as studId
    • 大多数的列名和POJO的字段名通常是不一致的,而且我们会写多个 select * from Students

       

       resultMap和resultType

      •  在一个select配置项中,select可以包含resultMap或者resultType,用于指定返回的类型,但是二者不能同时出现
      • resultMap和resultType的含义是select结果集的一行进行映射,不是说整个SQL的查询结果的类型是resultMap或者resultType类型
      • sqlSession.selectOne(",,,保持一致,方法名id属性,参数类型parameterType,返回结果类型resultType或者resultMap

         

        package com.mybatis3.mappers;
        
        import java.util.List;
        
        import com.mybatis3.domain.Student;
        
        
        public interface StudentMapper {
        
            List findAllStudents();
        
            Student findStudentById(Integer id);
        
            void insertStudent(Student student);
        
            void updateStudent(Student student);
        
            List findStudentById2();
        
        }

         

        注意:

        • Mapper的权限定类名跟mapper的namespace属性保持一致
        • 方法签名与配置文件中的