findStudentById”的 SQL 语句的,代码如下:
XML Code
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aming.training.mybatis.mappers.StudentMapper">
<resultMap type="Student" id="StudentResult">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="sex" column="sex" />
<result property="birthday" column="birthday" />
<result property="height" column="height" />
<result property="weight" column="weight" />
<result property="score" column="score" />
<result property="address" column="address" />
<result property="email" column="email" />
<result property="hobby" column="hobby" />
</resultMap>
<select id="findStudentById" parameterType="int" resultType="Student">
SELECT id,name,email,birthday,height,weight,score,address,email,hobby FROM Student WHERE id = #{id}
</select>
</mapper>
调用findStudentById映射的SQL语句
方法一:
@Test
- public void testSelect() {
SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
try{
String mapper = "com.aming.training.mybatis.mappers.StudentMapper.findStudentById";
int id = 1;
Student student = sqlSession.selectOne(mapper,id);
System.out.println(student);
}finally{
sqlSession.close();
}
}
我们可以通过字符串(字符串形式为:映射器配置文件所在的包名 namespace + 在文件内定义的语句 id,如上,即包
名 com.aming.training.mybatis.mappers.StudentMapper 和语句 id:findStudentById 组成)调用映射的 SQL 语句,但是这种方式
容易出错。你需要检查映射器配置文件中的定义,以保证你的输入参数类型和结果返回类型是有效的。
名 com.aming.training.mybatis.mappers.StudentMapper 和语句 id:findStudentById 组成)调用映射的 SQL 语句,但是这种方式
容易出错。你需要检查映射器配置文件中的定义,以保证你的输入参数类型和结果返回类型是有效的。
方法二:
第一步:创建一个映射器接口 StudentMapper.java
package com.aming.training.mybatis.mappers;
import java.util.List;
import com.aming.training.mybatis.pojo.Student;
public interface StudentMapper {
/**
* 根据id获取Student对象
* @param id id
* @return Student对象
*/
Student findStudentById(int id);
}
第二步:使用映射器接口我们可以以类型安全的形式调用调用映射语句
@Test
public void testSelect2(){
SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
try{
int id = 1;
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Student student = studentMapper.findStudentById(id);
System.out.println(student);
}finally{
sqlSession.close();
}
}
说明:
1.在 StudentMapper.xml 映射器配置文件中,其名空间 namespace 应该跟 StudentMapper 接口的完全限定名保持一
致。另外, StudentMapper.xml 中语句 id, parameterType, returnType 应该分别和 StudentMapper 接口中的方法名,参数类型,返回值相对应。
2.即使映射器 Mapper 接口可以以类型安全的方式调用映射语句,但是我们也应该负责书写正确的,匹配方法名、参数类型、 和返回值的映射器 Mapper 接口。
如果映射器 Mapper 接口中的方法和 XML 中的映射语句不能匹配,会在运行期抛出一个异常。实际上,指定 parameterType 是可选的;MyBatis 可以使用反射机制来决定 parameterType。
但是,从配置可读性的角度来看,最好指定parameterType 属性。
如果 parameterType 没有被提及,开发者必须查看Mapper XML 配置和 Java 代码了解传递给语句的输入参数的数据类型。