mybatis调用sql语句

本文详细介绍了MyBatis调用sql语句的过程,包括从配置文件解析、创建sqlSessionFactory、查找mapper标签、解析sql语句、打开会话、执行语句到处理结果集的各个步骤,并指出在执行过程中可能存在的线程安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis调用sql语句过程

过程如图

根据Configuration配置文件创建
创建
getmapper方法
调用
结果
SqlSessionFactoryBuilder
SqlSessionFactory实例
SqlSession
Mapper实例
Executor
StatementHandler
ResultSetHandler
利用mybatis源码执行sql语句
	//配置文件
	String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource)
    //根据配置文件生成 SqlSessionFactory ------------A ------ ----
    SqlSessionFactory sqlSessionFactory =
      new SqlSessionFactoryBuilder().build(inputStream);
	//通过opensession()获得session ------------B ------ ----
    SqlSession Session = sqlSessionFactory.openSession();
    //通过Mapper接口找到映射MApper.xml语句 ------------C ------ ---
    Student student = sqlSession.selectOne(
      "pojo.StudentMapper.getStudents");

mybats源码

mybatis主要作用

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 作用
1.用简单的 XML 或注解来配置和映射原生信息
2.将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/taotao?serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="Changeme_123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mybatis/StudentMapper.xml"/>
    </mappers>
</configuration>
A-1 sqlSessionFactoryBuilder 创建sqlsessionFactory
public class SqlSessionFactoryBuilder {
   
   
 //省略
  public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
   
   
    try {
   
   
      XMLConfigBuilder parser = new 
### MyBatis 执行 SQL 语句的工作机制及流程 MyBatis 是一个优秀的持久层框架,它通过动态代理和反射机制将 SQL 映射到 Java 对象中。以下是 MyBatis 执行 SQL 语句的工作机制及详细流程[^1]。 #### 1. 配置解析 在 MyBatis 启动时,会加载 `mybatis-config.xml` 文件以及 Mapper XML 文件。这些文件定义了数据库连接信息、SQL 映射规则等。MyBatis 会将这些配置解析为内存中的对象结构,例如 `Configuration` 和 `MappedStatement`[^2]。 ```java SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); ``` #### 2. 创建 SqlSession 用户通过 `SqlSessionFactory` 创建 `SqlSession` 对象。`SqlSession` 是 MyBatis 的核心接口,提供了执行 SQL、管理事务等功能。每次操作数据库都需要通过 `SqlSession` 实现[^3]。 ```java try (SqlSession session = factory.openSession()) { // 使用 SqlSession 进行数据库操作 } ``` #### 3. 动态代理生成 Mapper 接口实现 当调用 Mapper 接口方法时,MyBatis 会通过动态代理技术生成该接口的实现类。代理对象会在方法调用时拦截请求,并将其转换为对应的 SQL 执行逻辑[^4]。 ```java UserMapper mapper = session.getMapper(UserMapper.class); ``` #### 4. 构建 SQL 语句 根据 Mapper XML 文件或注解定义的 SQL 模板,MyBatis 会解析并生成最终的 SQL 语句。如果使用了动态 SQL(如 `<if>` 标签),则会根据参数值进行条件拼接[^5]。 ```xml <select id="selectUser" parameterType="int" resultType="User"> SELECT * FROM users WHERE id = #{userId} </select> ``` #### 5. 参数处理 MyBatis 会将传入的方法参数(如 `Integer` 或 `Map`)映射为 SQL 中的占位符值。例如,`#{userId}` 会被替换为实际的参数值[^6]。 #### 6. 执行 SQL 通过 JDBC,MyBatis 将生成的 SQL 语句发送到数据库执行。在此过程中,MyBatis 会管理数据库连接、预编译 SQL 语句(PreparedStatement)、设置参数等操作[^7]。 ```java PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, userId); ResultSet rs = ps.executeQuery(); ``` #### 7. 结果集映射 执行完 SQL 后,MyBatis 会将结果集(`ResultSet`)映射为 Java 对象。这一步依赖于 Mapper XML 文件中的 `resultMap` 定义或注解中的返回类型声明[^8]。 ```xml <resultMap id="userResultMap" type="User"> <id property="id" column="user_id"/> <result property="username" column="user_name"/> </resultMap> ``` #### 8. 返回结果 最后,MyBatis 将映射后的 Java 对象返回给调用方。整个过程对开发者透明,只需关注业务逻辑即可[^9]。 ```java User user = mapper.selectUserById(1); ``` ### 总结 MyBatis 的工作机制涵盖了配置解析、动态代理生成、SQL 构建、参数处理、SQL 执行以及结果集映射等多个环节。每个步骤都经过精心设计,以确保灵活性和高性能[^10]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值