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

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50659993 前一篇文章([MyBatis日记](2)MyBatis创建一个简单项目)中我们介绍了如何使用MyBatis创建一个简单的项目,我们已经看见了一些映射器配置文件中配置基本的映射语句,以及怎样使用SqlSession对象调用它们的例子。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50659993
前一篇文章( [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》
下载: 点击打开链接


目录
相关文章
|
3天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
26天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
5月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
66 6
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
3月前
|
XML Java 数据库连接
MyBatis中的接口代理机制及其使用
【8月更文挑战第5天】MyBatis的接口代理机制是其核心功能之一,允许通过定义接口并在运行时生成代理对象来操作数据库。开发者声明一个带有`@Mapper`注解的接口,MyBatis则依据接口方法、映射配置(XML或注解)及数据库信息动态生成代理类。此机制分为四步:创建接口、配置映射文件或使用注解、最后在业务逻辑中注入并使用代理对象。这种方式简化了数据库操作,提高了代码的可读性和可维护性。例如,在电商系统中可通过`OrderMapper`处理订单数据,在社交应用中利用`MessageMapper`管理消息,实现高效且清晰的数据库交互。
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
87 3
|
4月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
70 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改