Java框架MyBatis工作流程是怎样的?

如题所述

一、Mybatis介绍


MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对 象)到数据库中的记录。


二、MyBatis工作流程


(1)加载配置并初始化


触发条件:加载配置文件


配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。


(2)接收调用请求


触发条件:调用Mybatis提供的API


传入参数:为SQL的ID和传入参数对象


处理过程:将请求传递给下层的请求处理层进行处理。


(3)处理操作请求 触发条件:API接口层传递请求过来


传入参数:为SQL的ID和传入参数对象


处理过程:


(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。


(4)返回处理结果将最终的处理结果返回。


orm工具的基本思想


无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:


从配置文件(通常是XML配置文件中)得到 sessionfactory.


由sessionfactory  产生 session


在session 中完成对数据的增删改查和事务提交等.


在用完之后关闭session 。


在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。


功能架构

Java框架篇---Mybatis 入门


Mybatis的功能架构分为三层:


API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。


数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。


基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。


多需要添加的驱动包:

Java框架篇---Mybatis 入门


下面进行快速入门:


目录如下:

Java框架篇---Mybatis 入门


实体类User


package com.oumyye.model;


public class User {

    private String id;

    private String name;

    private  int age;

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";

    }


}


映射文件UserMapping.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.oumyye.mapping.UserMapping">

    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复

    使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型

    resultType="com.oumyye.model.User"就表示将查询结果封装成一个User类的对象返回

    User类就是users表所对应的实体类

    -->

    <!-- 

        根据id查询得到一个user对象

     -->

    <select id="getUser" parameterType="String" 

        resultType="com.oumyye.model.User">

        select * from user where id=#{id}

    </select>

</mapper>


资源文件mybatis.xml


<?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.jdbc.Driver" />

                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />

                <property name="username" value="root" />

                <property name="password" value="root" />

            </dataSource>

        </environment>

    </environments>

    <mappers>


<mapper resource="com/oumyye/mapping/userMapping.xml"/>

     </mappers>

</configuration>


测试类:


package test;


import java.io.InputStream;


import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;


import com.oumyye.model.User;


public class Tests {

@Test

public void test(){

  String resource = "mybatis.xml";

        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)

        InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

        //构建sqlSession的工厂

        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);


SqlSession session = sessionFactory.openSession();

        /**

         * 映射sql的标识字符串,

         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper标签的namespace属性的值,

         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

         */

        String statement = "com.oumyye.mapping.UserMapping.getUser";//映射sql的标识字符串

        //执行查询返回一个唯一user对象的sql

        User user = session.selectOne(statement, "1123");

        System.out.println(user.toString());

}

}


结果:

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-11-16

mybatis主要通过两个配置文件(sqlMapConfig.xml和Mapper.xml),来配置数据库和对象的关系

sqlMapConfig.xml:

Mybatis的全局配置文件,主要配置mybatis的环境参数、映射对象运行参数。
mybatis的环境参数:数据源配置、事务控制
映射对象运行参数:映射对象的别名设置、映射对象配置文件加载

案例:

本回答被网友采纳
第2个回答  2015-09-18
1、加载配置并初始化;
2、接收调用请求;
3、处理操作请求触发条件:API接口层传递请求过来;
4、返回处理结果将最终的处理结果返回。
第3个回答  2018-03-30

(1)加载配置并初始化:触发条件:加载配置文件.配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求:触发条件:调用Mybatis提供的API。传入参数:为SQL的ID和传入参数对象。处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求 触发条件:API接口层传递请求过来。传入参数:为SQL的ID和传入参数对象

(4)返回处理结果将最终的处理结果返回。

MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对 象)到数据库中的记录。

本回答被网友采纳

Java框架MyBatis工作流程是怎样的?
(1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。(2)接收调用请求 触发条件:调用Mybatis提供的API 传入参数:为SQL的I...

MyBatis的执行流程
在深入理解MyBatis的执行流程之前,我们先从加载配置文件开始。通过MyBatis自己的Resources类调用getResourceAsStream()方法加载核心配置文件,得到流对象。此操作实际依赖于Java.lang包下的ClassLoader类加载器。接着,我们利用这个流对象创建SqlSessionFactoryBuilder对象,并调用其build()方法。在此过程中,MyBa...

深入详解 Mybatis 的架构原理与 6 大核心流程
MyBatis 根据接口声明的信息生成 Mapper 实例,通过 SqlSession 方法执行数据库操作。数据处理层:是 MyBatis 的核心,负责 SQL 查询、解析、执行及结果映射。它完成的主要任务是根据请求完成数据库操作。在操作中,动态生成 SQL 语句,实现 SQL 的灵活性和扩展性。参数映射涉及 Java 和 JDBC 数据类型之间...

Java学习路线是怎样的?
第三阶段,Java高级框架-SSH:Struts2异常处理、Struts2+Log4j集成、Struts2和JSON实例、Hibernate5、Hibernate集合映射、Hibernate组件映射、Spring4.0、SpringAOP+ AspectJ框架、Spring 与其它Web框架集成、Spring Hibernate支持等。第四阶段,Java高级框架-SSM:SpringMVC、Spring MVC生成JSON数据、MyBatis、My...

《深入理解mybatis原理四》 MyBatis事务管理机制
深入理解mybatis原理四:MyBatis事务管理机制 MyBatis作为Java语言的数据库框架,事务管理是其重要组成部分。本文将详细介绍MyBatis的事务管理实现机制。MyBatis的事务管理分为两种形式:JdbcTransaction 和 ManagedTransaction。它们的类图如上所示。在MyBatis的XML配置文件中,我们可以通过节点定义事务配置信息,...

java 怎么使用注解操作mybatis
mybatis是orm框架 java操作它就是执行sql, 貌似没有用注解的吧。 最多就是 事务控制, 可以spring AOP 找一个cut point 全局设定 或者 @Transactional 这个也要在spring文件里面配置 网上有例子。 mybatis的话 直接config文件里面 mapping一些 mapper 然后做resultMap 直接写mybatis标准的可执行sql就ok...

MyBatis事务管理机制
MyBatis作为Java数据库框架,其事务管理机制至关重要。本文将深入解析事务分类、配置与实现,揭示MyBatis如何处理事务的创建、提交、回滚和关闭过程。MyBatis事务管理分为两大类别:一是基于JDBC的手动事务管理,通过java.sql.Connection进行提交(commit)、回滚(rollback)和关闭(close)操作;二是利用程序...

Mybatis面试题
需要的可以访问: Java小白求职之路 1、MyBatis的工作原理 1)读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置...

java框架:教你如何使用MybatisPlus
在使用MP时,需要引入相应的依赖,定义实体类,使用Lombok插件简化getter和setter方法的编写。在mapper层,可以使用@Repository注解标记DAO,进行数据操作。启动类中需要注入MybatisPlus的相关配置。对于快速开始,从导入依赖、实体类定义、mapper层操作、到启动类配置,以及后期的测试和功能扩展,MP提供了全面的...

浅谈Java的三大框架,各自有什么作用?
Spring Cloud:基于Spring Boot的微服务架构开发框架。它提供了一套完整的微服务解决方案,包括服务发现、配置中心、API网关、负载均衡、熔断降级等功能,帮助开发者快速构建可扩展的微服务应用。MyBatis:用于Java应用的持久层框架,提供了简化的SQL映射和事务管理。MyBatis支持自定义SQL、存储过程以及高级映射,...

相似回答