版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50659993
中我们介绍了如何使用MyBatis创建一个简单的项目,我们已经看见了一些映射器配置文件中配置基本的映射语句,以及怎样使用SqlSession对象调用它们的例子。
1. 前景回顾
现在让我们看看在com.sjf.bean包中studnetMapper.xml配置文件内,如何配置id 为"getStudentByID"的SQL语句的:
xml version="1.0" encoding="UTF-8"?>
namespace="com.sjf.bean.studentMapper">
id="getStudentByID" parameterType="int" resultType="com.sjf.bean.Student">
select * from Student where ID = #{ID}
我们通过下面代码调用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"?>
namespace="com.sjf.mapper.StudentMapper">
id="getStudentByID" parameterType="int" resultType="com.sjf.bean.Student">
select * from Student where ID = #{ID}
我们把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》
下载:点击打开链接