[MyBatis日记](3)映射器配置文件与映射器接口

前一篇文章( [MyBatis日记](2)MyBatis创建一个简单项目)中我们介绍了如何使用MyBatis创建一个简单的项目,我们已经看见了一些映射器配置文件中配置基本的映射语句,以及怎样使用SqlSession对象调用它们的例子。

1. 前景回顾


现在让我们看看在com.sjf.bean包中studnetMapper.xml配置文件内,如何配置id 为"getStudentByID"的SQL语句的:
    
    
    
    
<?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.sjf.bean.studentMapper">
<select id="getStudentByID" parameterType="int" resultType="com.sjf.bean.Student">
select * from Student where ID = #{ID}
</select>
</mapper>
我们通过下面代码调用getStudentByID映射的SQL语句:
    
    
    
    
package com.sjf.service;
 
import org.apache.ibatis.session.SqlSession;
 
import com.sjf.bean.MyBatisSqlSessionFactory;
import com.sjf.bean.Student;
 
/**
* Student服务类
* @author sjf0115
*
*/
public class StudentService {
/**
* 根据ID获取学生信息
* @return
*/
public Student getStudentByID(int ID){
SqlSession session = MyBatisSqlSessionFactory.getSqlSession();
try{
String statement = "com.sjf.bean.studentMapper.getStudentByID";
Student stu = session.selectOne(statement, ID);
return stu;
}
finally{
if(session != null){
session.close();
}//if
}//finally
}
}
我们可以通过字符串形式: 映射器(Mapper)的 namespace + 在文件内定义的语句 id 调用映射的SQL语句。在本例子中,namespace为 com.sjf.bean.studentMapper 和 语句id 为 getStudentByID,所以调用字符串形式为: com.sjf.bean.studentMapper. getStudentByID 。但是这种方式容易出错。我们需要检查映射器配置文件中的定义,来保证我们输入的参数类型和结果返回类型是有效的。

2. 映射器接口


我们对之前的结构略作了些调整:

StudentMapper.xml:
    
    
    
    
<?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.sjf.mapper.StudentMapper">
<select id="getStudentByID" parameterType="int" resultType="com.sjf.bean.Student">
select * from Student where ID = #{ID}
</select>
</mapper>

我们把StudentMapper.xml放在com.sjf.mapper包下,相应的,namespace改为com.sjf.mapper.StudentMapper。

MyBatis通过使用 映射器Mapper接口提供了更好的调用映射语句的方法。一旦我们通过映射器配置文件配置了映射语句,我们可以创建一个完全对象的一个映射器接口, 接口名跟配置文件名相同接口所在的包名也跟配置文件所在包名完全一样(入StudentMapper.xml所在包名是com.sjf.mapper,对应的接口名就是com.sjf.mapper.StudentMapper.java)。 映射器接口中的方法也跟映射器配置文件中完全对应 :方法名为配置文件中id值,方法参数类型为parameterType对应值;方法返回值类型为returnType对应值

根据上面的StudentMapper.xml文件,我们可以创建一个映射器接口StudentMapper.java:
    
    
    
    
package com.sjf.mapper;
 
import com.sjf.bean.Student;
 
/**
* Student映射器接口
* @author sjf0115
*
*/
public interface StudentMapper {
/**
* 根据学生ID获取学生信息
* @param ID
* @return
*/
Student getStudentByID(int ID);
}
从上我们可以看出StudentMapper.xml中语句id,parameterType,returnType分别对应StudentMapper接口中的方法名,参数类型,返回值类型相对应。

从而我们使用映射器接口来安全的调用映射语句:
    
    
    
    
package com.sjf.service;
 
import org.apache.ibatis.session.SqlSession;
 
import com.sjf.bean.MyBatisSqlSessionFactory;
import com.sjf.bean.Student;
import com.sjf.mapper.StudentMapper;
 
/**
* Student服务类
* @author sjf0115
*
*/
public class StudentService {
/**
* 根据ID获取学生信息
* @return
*/
public Student getStudentByID(int ID){
SqlSession session = MyBatisSqlSessionFactory.getSqlSession();
try{
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
Student stu = studentMapper.getStudentByID(ID);
return stu;
}
finally{
if(session != null){
session.close();
}//if
}//finally
}
}

如果映射器Mapper接口中的方法和XML中的银蛇语句不能匹配,会在运行期抛出一个异常。


参考:《Java Persistence with MyBatis 3》
下载: 点击打开链接


你可能感兴趣的:(MyBatis日记)