MyBatis总结

一、MyBatis框架简介

MyBatis框架是一个基于ORM (Object Relational Mapping,对象/关系映射)的优秀的持久化框架。

MyBatis框架不是一个完整的 ORM实现,而是一种半自动化的ORM实现。

MyBatis 框架的主要特点是SQL映射器机制。


二、持久化和orm

1.持久化∶从瞬时到持久又从持久到瞬时的一个过程称为持久化

2.orm :定义:对象关系映射Object relatation mapper

mapper.xml ---->实体类mybatis核心mybatis

三、mybatis运行流程

配置:首先需要进行 MyBatis 的配置。这包括创建一个配置文件(通常为 mybatis-config.xml),指定数据库连接信息、映射器(Mapper)的位置等。配置文件一般会包含一些全局设置和类型处理器的配置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <plugins>
    <!--<plugin interceptor="com.github.pagehelper.PageInterceptor">
    <ugin>-->
    <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>
    <environments default="mybatis">
        <environment id="mybatis">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <environment id="myschool">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.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="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

SessionFactory 的创建:在启动时,MyBatis 会根据配置文件来创建一个 SqlSessionFactory 对象,它是 MyBatis 的核心对象。SqlSessionFactory 使用建造者模式来构建,它的主要作用是创建 SqlSession 对象。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSession 的获取:MyBatis 的应用程序通过 SqlSessionFactory 来获取 SqlSession 对象。SqlSession 提供了执行 SQL 语句的方法,开发者可以使用它来进行数据库操作。

SQL 映射文件的解析:当需要执行 SQL 语句时,MyBatis 会根据配置文件中的信息,找到对应的 SQL 映射文件(通常为 .xml 格式),并解析该文件。

SQL 的执行:SQL 映射文件被解析后,MyBatis 将根据解析结果来执行 SQL 语句。在执行之前,MyBatis 还会进行一些额外的处理,如参数的处理、动态 SQL 的拼装等。

结果集的映射:执行 SQL 语句后,MyBatis 将会把结果集映射到 Java 对象上。这个映射过程会根据配置文件和查询结果的列名来进行。

事务管理:MyBatis 支持事务管理,可以在配置文件中进行配置。开发者可以根据需要选择不同的事务管理方式,如 JDBC 的事务、Spring 的事务等。

 四、mybatis运行流程

动态 SQL 是指在 SQL 语句中根据不同条件动态生成 SQL 片段的技术。在 MyBatis 中,动态 SQL 是通过使用 <if>、<choose>、<when>、<otherwise>、<foreach> 等标签来实现的。

动态 SQL 的主要作用是根据不同的情况拼接 SQL 语句,以满足灵活的查询需求。以下是一些常用的动态 SQL 标签:

1.<if> 标签:可以根据给定的条件来判断是否包含某一段 SQL 语句。例如:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name LIKE #{name}
    </if>
    <if test="status != null">
      AND status = #{status}
    </if>
  </where>
</select>

2.<choose><when><otherwise> 标签:可以用于实现类似于 switch-case 的条件判断。<choose> 标签中包含多个 <when> 标签,每个 <when> 标签可以判断一个条件。当某个 <when> 条件为真时,执行对应的 SQL 语句块;如果所有 <when> 条件都为假,则执行 <otherwise> 语句块。例如:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <choose>
      <when test="name != null">
        AND name LIKE #{name}
      </when>
      <when test="status != null">
        AND status = #{status}
      </when>
      <otherwise>
        AND active = true
      </otherwise>
    </choose>
  </where>
</select>

3.<foreach> 标签:可以用于循环遍历集合,并将集合中的元素拼接到 SQL 语句中。例如:

<update id="batchUpdateUsers">
  UPDATE user SET
    <foreach collection="users" item="user" separator=",">
      name = #{user.name},
      status = #{user.status}
    </foreach>
  WHERE id IN
    <foreach collection="ids" item="id" open="(" close=")" separator=",">
      #{id}
    </foreach>
</update>

通过动态 SQL,我们可以根据不同的条件生成不同的 SQL 语句,使得查询更加灵活和可变。MyBatis 中还有其他一些动态 SQL 标签和用法,可以根据具体的需求选择合适的方式来实现动态 SQL。

五、mapper.xml映射文件 XML映射器

MyBatis的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95%的代码。MyBatis 致力于减少使用成本,让用户能更专注于SQL代码。SQL映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

cache-该命名空间的缓存配置。

cache-ref-引用其它命名空间的缓存配置。

resultMap-描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。

parameterMap -老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。sq1-可被其它语句引用的可重用语句块。

insert-映射插入语句。

update-映射更新语句。

delete-映射删除语句。

. select`-映射查询语句。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值