本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

mybatis(1)

发布于2021-03-10 18:08     阅读(708)     评论(0)     点赞(17)     收藏(1)


 


1.mybatis简介

在说mybatis之前,我们先来说一下ORM框架。

ORM(object Relational Mapping)对象关系映射,将程序中的一个对象与表中的一行数据一一对应。

如果我们要使用JDBC来完成ORM的操作,想一想我们需要多少操作?

首先导入关于操作数据库的类,然后建立连接,输入sql语句对数据库进行操作,如果是查询操作,我们还需要建立对象去接受查到的数据,最后关闭连接,返回相应值。

听起来不麻烦,但是当数据特别多的时候,这样的操作就显得复杂,所以我们需要一个框架来帮我们简化一下工程。

mybatis就是这样的框架,他省略了很多底层的操作,我们只需要配置相应文件,写出sql语句,剩下的mybatis都会帮我们解决。

MyBatis 是一个基于 Java 的持久层框架。MyBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO),它消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。

MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

2.mybatis工作原理

2.1 读取配置文件

我们有一个mybatis-config.xml作配置文件,它配置了mybatis的运行环境信息以及相关的数据库连接信息/

下面是mybatis-cofig.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="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc.url"/>
                <property name="username" value="root"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--注册Mapper文件所在的位置-->
        <mapper resource="xxxMapper.xml"/>
    </mappers>
    </configuration>

2.2 加载映射文件

加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

即上述的Mapper.xml文件

下面是简略的Mapper.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.dao.daoInterface.UserDao">
     <select id="xxx(接口方法)"  resultType="com.bean.User(返回类型)">
             SELECT id,.....
             FROM  t_user
             WHERE id = #{arg0}(接口方法的参数,arg0代表第一个参数)
     </select>
    </mapper>

2.3构造会话工厂并创建会话对象

通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。

由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build("加载的配置文件的信息");
SqlSession sqlSession = sqlSessionFactory.openSession();

3.3SqlSession对象完成和数据库的交互

UserDao mapper = sqlSession.getiMapper(UserDao.class);
User user = mapper.xxx(接口中的方法)(参数);

a.用户程序调用mybatis接口层api(即Mapper接口中的方法)

b.SqlSession通过调用api的Statement ID找到对应的MappedStatement对象

c.通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象

d.JDBC执行sql。

e.借助 MappedStatement 中的结果映射关系,将返回结果转化成 HashMap、JavaBean 等存储结构并返回。

3.mybatis核心组件

3.1SqlSessionFactoryBuilder(构造器)

SqlSessionFactoryBuilder这个类的作用就是为了创建SqlSessionFactory的,它会根据配置或者代码来生成 SqlSessionFactory,采用的是分步构建的 Builder 模式。

3.2SqlSessionFactory(工厂接口)

SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像,依靠它来生成 SqlSession,使用的是工厂模式。

3.3SqlSession(会话)

一个既可以发送 SQL 执行返回结果,也可以获取 Mapper 的接口。

3.4SQL Mapper(映射器)

MyBatis 新设计存在的组件,它由一个 Java 接口和 XML 文件(或注解)构成,需要给出对应的 SQL 和映射规则。它负责发送 SQL 去执行,并返回结果。

文章参考于Mybatis以及大佬博客

原文链接:https://www.cnblogs.com/lisuhang/p/14449424.html



所属网站分类: 技术文章 > 博客

作者:小可爱们

链接:http://www.javaheidong.com/blog/article/112344/eab5082092fdcade044c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)