Mybatis是一款使用Java对象与数据库之间的映射配置来处理原始SQL的轻量级ORM框架。它可以通过接口实现 SQL 执行原理,实现原理如下:
-
在Mybatis中,每个mapper接口都对应了一个mapper xml文件。在mapper xml文件中涵盖了众多的SQL语句。
-
当应用程序访问mapper接口中的方法时,Mybatis会根据方法名去查询mapper xml文件中对应的SQL语句。
-
Mybatis会解析mapper xml文件中的SQL语句,并将SQL语句封装成Statement或PreparedStatement对象。
-
Mybatis还会从连接池中获取一个连接,然后将SQL语句传递给这个连接对象,以便执行SQL语句。
-
执行SQL语句之后,Mybatis会将查询结果封装成JavaBean或List等Java对象返回给应用程序。
下面给出两个示例来阐述上述Mybatis通过接口实现SQL执行的原理。
- 首先,我们先定义一个Mapper接口:
public interface UserMapper {
@Select("select * from user where id=#{id}")
User getUser(int id);
@Insert("insert into user(name, age, gender) values(#{name}, #{age}, #{gender})")
void addUser(User user);
@Update("update user set name=#{name}, age=#{age}, gender=#{gender} where id=#{id}")
void updateUser(User user);
@Delete("delete from user where id=#{id}")
void deleteUser(int id);
}
这个接口定义了4个方法,分别用于查询用户信息、添加用户信息、更新用户信息、删除用户信息。
- 我们此时定义相关的Mapper xml文件:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUser" parameterType="int" resultMap="UserResultMap">
select * from user where id=#{id}
</select>
<insert id="addUser" parameterType="com.example.entity.User">
insert into user(name, age, gender)
values(#{name}, #{age}, #{gender})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
update user set name=#{name}, age=#{age}, gender=#{gender} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<resultMap id="UserResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="gender" column="gender"/>
</resultMap>
</mapper>
-
当应用程序执行UserMapper接口中的getUser方法时,Mybatis会查询mapper xml文件中名称为getUser的SQL语句,这个SQL语句中只有一个参数id,所以Mybatis会调用Statement.setObject方法来设置参数,并将语句转化为Statement对象。此后Mybatis会从连接池中获取一个连接,然后将Statement对象传递给这个连接对象,调用Statement.executeQuery方法执行SQL语句。
-
执行完SQL语句之后,Mybatis会将结果封装为一个Java对象,并返回给应用程序。如果查询结果是一个记录集,则Mybatis会将每一行记录都封装为一个Java对象,并放入一个List中返回。
-
应用程序可以通过调用UserMapper接口的方法来访问数据库,并获取查询结果。
总之,Mybatis使用接口来实现SQL执行时的原理是,根据接口方法名称,分析mapper xml文件中对应的SQL语句,生成一个Statement或PreparedStatement对象,从连接池中获取一个连接,将SQL语句传递给这个连接对象,执行SQL语句,并将查询结果封装成Java对象,返回给应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis如何通过接口实现sql执行原理解析 - Python技术站