mybatis整体架构

mybatis架构

  本文将对mybatis的架构进行介绍

一、mybatis架构图

在这里插入图片描述

二、Mybatis入门程序代码实现

  为了更好的理解上面的mybatis的架构图,我们通过一个mybatis的入门程序来加深理解

1.导入相关依赖

2.创建Mybatis的主配置文件

  Mybatis主配置文件:SqlMappingConfig.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>
  

    <!--配置sql打印-->
    <!--只需要做这样一个配置 你以后的SQL信息就会自动给你打印-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--定义别名-->
    <typeAliases>
        <!--单个别名定义-->
        <!-- <typeAlias alias="Customer" type="com.itlike.domain.Customer"/>-->
        <!--批量定义别名, 别名为类名-->
        <package name="com.itlike.domain"/>
    </typeAliases>


    <!-- spring整合后 environments配置将废除 使用spring中的连接池 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8" />
                <property name="username" value="root" />
                <property name="password" value="9527"/>
            </dataSource>
        </environment>

    </environments>


    <!--加载映射文件-->
    <mappers>
        <mapper resource="com/itlike/domain/Customer.xml"></mapper>
        <!--
        1.名称必须得要和接口名称一致
        2.必须得要和mapper接口在同一目录
        -->
        <!-- <mapper class="com.itlike.mapper.CustomerMapper"/>-->
        <!--<package name="com.itlike.mapper"/>-->

    </mappers>

</configuration>

3.POJO类

  Customer类

package com.itlike.domain;

public class Customer {
    private  Integer cust_id;
    private String cust_name;
    private String cust_profession;
    private String cust_phone;
    private String cust_email;

    public Integer getCust_id() {
        return cust_id;
    }

    public void setCust_id(Integer cust_id) {
        this.cust_id = cust_id;
    }

    public String getCust_name() {
        return cust_name;
    }

    public void setCust_name(String cust_name) {
        this.cust_name = cust_name;
    }

    public String getCust_profession() {
        return cust_profession;
    }

    public void setCust_profession(String cust_profession) {
        this.cust_profession = cust_profession;
    }

    public String getCust_phone() {
        return cust_phone;
    }

    public void setCust_phone(String cust_phone) {
        this.cust_phone = cust_phone;
    }

    public String getEmail() {
        return cust_email;
    }

    public void setEmail(String email) {
        this.cust_email = email;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "cust_id=" + cust_id +
                ", cust_name='" + cust_name + '\'' +
                ", cust_profession='" + cust_profession + '\'' +
                ", cust_phone='" + cust_phone + '\'' +
                ", email='" + cust_email + '\'' +
                '}';
    }
}

4.创建一个mybatis工具类

  由于每次使用mybatis对数据库进行操作都需要获取sqlSession对象,这将造成大量的代码冗余,所以我们把这些冗余的步骤写到工具类中,以后用到的时候直接调用工具类中的方法即可。

  MybatisUtils 工具类

package com.itlike.utils;

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;


public class MybatisUtils {
    public static final SqlSessionFactory sessionFactory ;
    //静态代码块 只执行一次
    static {
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //读取配置文件
        InputStream resourceAsStream=null;
        try {
            resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");

        } catch (IOException e) {
            e.printStackTrace();
        }
        sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);


    }
    public static SqlSession openSession(){
        return sessionFactory.openSession();
    }
}

5.xml配置文件–SQL语句书写

  Customer.xml
  里面写了增删查改的SQL语句

<?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="test">
        <!--查询单个数据-->
        <select  id="queryCustomerById" parameterType="Int" resultType="com.itlike.domain.Customer">
            /*编写SQL语句*/
            SELECT * FROM customer WHERE cust_id=#{cust_id}
        </select>
        <!--查询所有数据-->
    <select  id="queryAllCustomers" resultType="com.itlike.domain.Customer">
            /*编写SQL语句*/
            SELECT * FROM customer
        </select>
            <!--模糊查找-->
    <select  id="queryCustomerByName" parameterType="String" resultType="com.itlike.domain.Customer">
            /*编写SQL语句*/
            SELECT * FROM customer WHERE cust_name LIKE #{name }
        </select>
    <!--插入数据-->
    <insert id="insert" parameterType="com.itlike.domain.Customer">
        insert into customer value (#{cust_id},#{cust_name},#{cust_profession},#{email},#{cust_phone})
    </insert>
    
    <!--更新数据-->
    <update id="update" parameterType="com.itlike.domain.Customer">
        update  customer set cust_name=#{cust_name} where cust_id=#{cust_id}
    </update>
    <!--删除数据-->
    <delete id="delete" parameterType="com.itlike.domain.Customer">
        delete from customer where cust_id=#{cust_id}
    </delete>
</mapper>

6.测试程序

  单元测试代码

    //查询所有数据
    @Test
    public void test3() {
        SqlSession sqlSession = MybatisUtils.openSession();
        //遍历快捷方式 iter
        List<Customer> queryAllCustomers = sqlSession.selectList("queryAllCustomers");
        for (Customer customer : queryAllCustomers) {
            System.out.println(customer);
        }
        sqlSession.close();
    }

  运行结果如图:

在这里插入图片描述

7.再次回到mybatis整体架构

在这里插入图片描述

  mybatis首先通过SqlSessionFactoryBuilder加载配置文件SqlMapConfig.xml 并给你一个工厂sessionFactory
  代码如下:

  static {
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //读取配置文件
        InputStream resourceAsStream=null;
        try {
            resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");

        } catch (IOException e) {
            e.printStackTrace();
        }
        sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);


    }

sessionFactory 可以给你一个sqlSession 你拿到这个sqlSession之后就可以针对数据库进行操作了。

   @Test
    public void test3() {
        SqlSession sqlSession = MybatisUtils.openSession();
        //遍历快捷方式 iter
        List<Customer> queryAllCustomers = sqlSession.selectList("queryAllCustomers");
        for (Customer customer : queryAllCustomers) {
            System.out.println(customer);
        }
        sqlSession.close();
    }

你在上面代码里面调用方法,比如
List queryAllCustomers = sqlSession.selectList(“queryAllCustomers”);
里面会有专门的执行器来帮你执行这些方法,执行器会到对应的映射xml文件中去给你找对应的语句,找到后把对应语句的参数传给这个语句(如果这个语句需要参数的话)。这些步骤都完成之后再到数据库中去执行这个语句,执行完之后还有输出映射返回给你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值