一、MappedStatement是什么?
MappedStatement是MyBatis中非常重要的一个核心对象,它表示一条语句的映射信息,包含SQL语句、输入参数映射规则、输出参数映射规则等。每一条语句在MyBatis中都必须由MappedStatement来描述。
MappedStatement的定义如下:
public final class MappedStatement { // ... private SqlCommandType sqlCommandType; private Configuration configuration; private String resource; private String fetchSize; private String id; // ... }
其中SqlCommandType是枚举类型,表示SQL语句的类型(SELECT、UPDATE、INSERT、DELETE);configuration是MyBatis全局的配置对象;resource表示XML映射文件的路径;fetchSize表示抓取大小;id是MappedStatement在全局配置中的唯一标识符。
二、MappedStatement的作用
MappedStatement是MyBatis中心,它的作用非常关键。主要体现在以下三个方面:
1、语句的解析和构建
MappedStatement解析XML映射文件中的语句,构建对应的PreparedStatement对象,并执行SQL语句,将查询结果映射成Java对象返回给应用程序。
例如,对于下面的SQL语句:
SELECT * FROM user WHERE id = #{id}
MyBatis会解析该语句,构建对应的PreparedStatement对象,并执行SQL语句。查询结果将映射成Java对象并返回给应用程序。
2、参数的映射和处理
MappedStatement解析XML映射文件中定义的参数映射规则,将传入的Java对象映射成SQL语句中需要的对象,并绑定到PreparedStatement对象的占位符上,从而执行对应的SQL语句。
例如,对于下面的Java对象:
public class User { private int id; private String name; // ... }
对应的XML映射文件语句为:
SELECT * FROM user WHERE id = #{id}
MyBatis会解析XML映射文件,将User对象中id属性的值映射到SQL语句中的#{id},并绑定到PreparedStatement对象的占位符上。
3、结果集的映射处理
MappedStatement解析XML映射文件中定义的输出结果的映射规则,将执行SQL语句返回的结果集映射成Java对象或Java集合,并返回给应用程序。
例如,对于下面的Java对象:
public class User { private int id; private String name; // ... }
对应的XML映射文件语句为:
SELECT * FROM user WHERE id = #{id}
MyBatis会解析XML映射文件,将查询结果映射成User对象,并返回给应用程序。
三、MappedStatement的使用
MappedStatement是MyBatis中心,是每一条语句的核心描述对象,因此,对于MyBatis开发者来说,熟悉MappedStatement的使用是非常重要的。
下面是MappedStatement使用的示例代码:
// 创建Configuration对象 Configuration configuration = new Configuration(); // 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 创建SqlSessionFactory对象 SqlSessionFactory factory = builder.build(configuration); // 获取SqlSession对象 SqlSession sqlSession = factory.openSession(); // 获取Mapper接口代理对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 调用Mapper接口中定义的方法查询数据 User user = mapper.selectById(1);
四、小结
MappedStatement是MyBatis中很重要的核心对象,它描述了一条语句的映射信息,并负责解析和构建PreparedStatement对象、参数的映射和处理、结果集的映射处理等工作。对于MyBatis开发者来说,理解并熟悉MappedStatement的使用,可以帮助我们更好的使用MyBatis实现我们的业务需求。
原创文章,作者:OISYB,如若转载,请注明出处:https://www.506064.com/n/333772.html