Mybatis入门

一、关于MyBatis

持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏(大部分的重要数据都会有相关的备份机制),在断电或者其他情况下,重新开启系统仍然可以读取这些数据。

Mybatis 是一个优秀的持久层框架,它对 jdbc 的操作数据库的过程进行封装,使得开发者只需要专注 于 SQL 语句本身,而不用去关心注册驱动,创建 connection 等 Mybatis 通过 xml 文件配置或者注解的方式将要执行的各种 statement 配置起来,并通过 java 对象 和statement中的sql进行映射成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映射成java 对象并返回。

不屏蔽 SQL 意味着可以更为精确地定位 SQL 语句,可以对其进行优化和改造, 这有利于互联网系统性能的提高,符合互联网需要性能优化的特点。

并且它提供强大、灵活的映射机制 ,方便 Java 开发者使用 。提供动态 SQL 的功能,允许 我们根据不同条件组装 SQL ,这个功能远比其他工具或者 Java 编码的可读性和可维 护性高得多,满足各种应用系统的同时也满足了需求经常变化的互联网应用的要 求。

在MyBatis 中,提供了使用 Mapper 的接口编程,只要 个接口和 XML 就能创 建映射器,进一步简化我们的工作,使得很多框架 API MyBatis 中消失,开发者 能更集中于业务逻辑 。

二、MyBatis的核心组件

MyBatis的核心组件分为四个部分:

1.SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory采用的是分布构建的Builder模式。

2.SqlSessionFactory (工厂接口):依靠它来生成 SqlSession,使用的是工厂模式。

3.SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取 Mapper 的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper 接口编程技术,它能提高代码的可读性和可维护性。

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

三、使用XML构建SQLSessionFactory

在MyBatis中的XML文件分为两类,一类是基础配置文件,通常只有一个,主要是配置一些最基本的上下文参数和运行环境;另一类是映射文件,它可以配置映射关系、SQL、参数等信息。

​ 配置文件名可自定义

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 引入xml的约束文件:约束当前xml文档中能使用什么标签
      xml:可以扩展标记语言,描述信息的方式是标签
      xml的约束文件分两种
      dtd: Mybatis使用的就是这种
      schema:spring使用的就是这种-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <typeAliases>
        <!--
            指定包下的所有类都有别名:类的全限定类名去掉包名,剩下的部分不区分大小写
        -->
        <package name="com.dyh.pojo"/>
    </typeAliases>


<!--  enviroments标签配置多种数据库环境  -->
    <environments default="dev">

        <environment id="dev">
            <!-- transactionManager 事务管理器 -->
            <!-- JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
                MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期
            (比如 Spring 或 JEE 应用服务器的上下文)。默认情况下它会关闭连接。
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 连接数据库 -->
            <!-- POOLED 连接池(数据源),其实就是一个容器(集合),存放数据库连接的容器 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/d_movie"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>

        </environment>

    </environments>

    <!--将映射文件加载到mybatis的配置文件中
       mappers会扫描指定的包,Mybatis会为指定包下所有映射器
     -->
    <mappers>
        <package name="com.dyh.dao"/>
    </mappers>
    
</configuration>

四、SqlSession

​ 在MyBatis 中, SqISession是其核心接口。在MyBatis中有两个实现类, DefaultSqlSession和SqlSessionManager。DefaultSqlSession是单线程使用的,而SqlSessionManager在多线程环境下使用。SqlSession的作用类似于一个 JDBC 中的 Connection对象,代表着一个连接资源的启用。具体而言,它的作用有3个:获取Mapper接口,发送SQL给数据库,控制数据库事务。

有了SqlSessionFactory创建SqlSession是非常简单的,注意SqlSession只是一个门面接口,真正执行业务语句的是底层的Executor!

​ 我这里编写了一个工具类用来加载配置文件

package com.dyh.uilt;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @BelongsProject: Mybatis_02
 * @BelongsPackage: com.dyh.pojo
 * @Description:
 * @Author: Lucky
 * @Date: 2022/4/11 19:42
 */
public class Uilts {

    private Uilts() {

    }

    private static SqlSessionFactory factory;

    public static synchronized SqlSessionFactory getSqlSessionFactory() {
        if(factory == null) {
            try {
                InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
                factory = new SqlSessionFactoryBuilder().build(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return factory;
    }

    public static SqlSession getSqlSession() {
        if(factory == null) {
            getSqlSessionFactory();
        }
        return factory.openSession();
    }
}

五、映射器

映射器是MyBatis中最重要也是最复杂的组件,它由一个接口和一个对应的XML文件组成。

它可以配置以下内容:

  • 描述映射规则

  • 提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息

  • 配置缓存

  • 提供动态SQL

    定义一个映射器接口:

    package com.dyh.dao;
    
    import com.dyh.pojo.User;
    /**
     * @BelongsProject: Mybatis_02
     * @BelongsPackage: com.dyh.dao
     * @Description:
     * @Author: Lucky
     * @Date: 2022/4/11 19:43
     */
    public interface UserMapper {
    
        User getById(int id);
    }
    
    

    配置映射文件

    <?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.dyh.dao.UserMapper">
        <!--
           使用resultMap标签来手动映射:定义字段和属性的映射规则
           id属性:一套映射规则的标识符,名称任意
           type属性: 封装的对象类型(可以使用全限定类名或别名)
       -->
        <resultMap id="UserMap" type="User">
            <id column="m_id" property="id"></id>
            <result column="m_name" property="name"></result>
            <result column="m_picse" property="picse"></result>
            <result column="m_author" property="author"></result>
            <result column="m_date" property="sqlDate"></result>
        </resultMap>
    
    
        <!--更具id查询数据-->
        <select id="getById" resultMap="UserMap">
            select * from movie where m_id = #{id}
        </select>
    </mapper>
    

    在这里面我使用了是自定义映射(resultMap),将我们从数据库获取的数据封装到我们自定义的属性中去(进行手动映射)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值