【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:学会使用mybatis框架

发布时间:2023年12月27日

上一篇文章中,我们学习了通过JDBC与MySQL进行交互。如果我们平常在项目中使用mybatis框架作为我们的orm框架。这一次我们就来学习如何使用框架。我们项目中使用到maven。我们直接通过pom文件的方式给他引入进来。

MyBatis是一个简单而强大的持久层框架,它提供了灵活的SQL映射、强大的参数处理、动态SQL、缓存支持和插件扩展等功能,使得开发人员能够更方便地进行数据库访问和操作。我们既然要“抄袭”mybatis框架。那么我们肯定要学会使用这个框架。所以我们先了解它怎么使用。

第一步,创建一个main项目

我们给他取名叫mybatis-demo,结构大致如下:

在这里插入图片描述

和我们上一篇一样,我们需要使用一个JAVA的实体类去接收我们sql查询到的内容。以前我们用到的是这三个字段id,name,age,所以说我们也需要创建对应的字段。

实体类里面的字段以驼峰命名法的方式一一对应数据库数据表里面的字段。我们把它放在entity这个软件包里面。创建好有仓构造和午餐构造,并且给它设置get set方法。为了方便打印出来,我们也给他重写tostring方法。

package com.masiyi.entity;



public class User {

    private Integer id;
    private String name;
    private Integer age;

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public User() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

第二步,编写dao接口

DAO接口是用于定义数据库操作方法的接口,在MyBatis框架中,它与映射文件相对应,通过DAO接口我们可以将数据库操作与业务逻辑分离,所以这里我们创建一个userdao接口,里面实现了两个方法,一个是findall,一个是findById。我们把它放在dao的软件包下。

package com.masiyi.dao;

import com.masiyi.entity.User;

import java.util.List;

public interface UserDao {

    /**
     * 查询全部
     * @return
     */
    List<User> findAll();

    /**
     * 根据id查询
     * @param id
     * @return
     */
    List<User> findById(Integer id);

}

第三步,编写dao接口对应的xml文件

编写了dao接口其实并不够,我们在mybatis中。还要编写与接口一一对应的xml文件。也就是我们存放并且编写SQL的地方。我们取一个名字叫做UserMapper.xml,他放在我们resource的maple这个软件包的下面。其实在mybatis中与dao接口对应的xml文件都可以随便取名。也可以放置在项目中任何的位置。但是我们一般做的规范一点都是放在resource/mapper的下面。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.masiyi.dao.UserDao">


    <select id="findAll" resultType="com.masiyi.entity.User">
        select * from user
    </select>

    <select id="findById" resultType="com.masiyi.entity.User" parameterType="java.lang.Integer">
        select * from user where id = #{id}
    </select>

</mapper>

第四步,编写配置文件

我们使用和官方一样的配置文件。里面的信息都是My balance是规定好的。我们直接拿来用,把里面的参数改一下。取名一个叫mybatis-config.xml的xml文件,内容如下:

<?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>
    <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://masiyi.obmtj0gc1rgs0ho0-mi.oceanbase.aliyuncs.com:3306/test_ob"/>
                <property name="username" value="rootmsy"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

这里面四个信息是需要我们改的。第一个信息是驱动类的全限定类名,第二个信息是url,也就是我们数据库的地址,但是前面jdbc:mysql://这个是不能变的。第三个信息就是我们所联数据库的用户名。第四个信息就是密码。我们只需要改value里面的值就行,其他的所有的值都不要动。

mappers下面就是存了我们第三部写的配置文件。注意resource里面的内容。由于我们刚刚写在mapper包下面,我们只需要像代码里面这样写就行。如果有多个xml文件在这里引入就行了,mybatis就可以知道我们的mapper在哪。注意这个类是直接在resource的目录下面。

第五步,编写测试方法

好了,基本的环境我们已经搭完了,现在我们开始来写一个测试的类。这个类里面的内容如下:

package com.masiyi;

import com.masiyi.dao.UserDao;
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;

/**
 * @Author masiyi
 * @Version 1.0
 */
public class Main {
     public static void main(String[] args) throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserDao mapper = session.getMapper(UserDao.class);
            mapper.findById(1).forEach(System.out::println);
            System.out.println("----------------------------");
            mapper.findAll().forEach(System.out::println);

        }
    }
}
  1. 首先,通过Resources.getResourceAsStream("mybatis-config.xml")方法获取mybatis-config.xml配置文件的输入流。这个就是我们刚刚写的。我们如果写在resource下面就可以直接这么得引用。

  2. 然后,使用SqlSessionFactoryBuilder().build(inputStream)方法根据配置文件的输入流创建一个SqlSessionFactory对象。SqlSessionFactory是MyBatis框架的核心类之一,用于创建SqlSession对象。

  3. 接下来,使用sqlSessionFactory.openSession()方法打开一个SqlSession对象。SqlSession是MyBatis框架中用于执行SQL语句的类。

  4. 通过session.getMapper(UserDao.class)方法获取一个UserDao接口的实现类的代理对象。这个代理对象由MyBatis框架自动生成,用于执行数据库操作。

  5. 使用mapper.findById(1)方法查询ID为1的用户,并通过forEach(System.out::println)方法打印查询结果。

  6. 使用mapper.findAll()方法查询所有用户,并通过forEach(System.out::println)方法打印查询结果。

  7. 最后,使用try-with-resources语句块来自动关闭SqlSession对象,释放资源。

最后打印出来的结果如下:

在这里插入图片描述

可以看到,就是我们表里面的数据

在这里插入图片描述

在这篇文章中,我们详细介绍了如何使用MyBatis框架进行数据库操作,包括如何配置MyBatis,如何定义DAO接口,以及如何在代码中使用MyBatis进行数据库操作。通过学习和理解MyBatis的使用方式,我们为下一步“抄袭”MyBatis,手写一套MyMybatis框架打下了坚实的基础。

在接下来的文章中,我们将深入探讨MyBatis的内部实现机制,并尝试手写一套属于我们自己的MyMybatis框架。我们将从MyBatis的核心组件开始,逐步实现其主要功能,最终构建出一套完整的持久层框架。

希望你能通过这个系列的学习,不仅能掌握MyBatis的使用,更能理解其背后的设计理念和实现原理,提升你的编程技能和架构设计能力。敬请期待我们下一篇文章,如果对你有帮助,如你感兴趣,请给富贵同学点一个赞和关注。。

在这里插入图片描述

另外如果对Elastic Search感兴趣的话,推荐一下我的专栏,这篇专栏介绍了Elasticsearch的Restful API的入门指南。学习如何使用API进行索引、搜索和分析,包括创建索引、定义映射、添加文档、执行查询等。通过实例和代码片段,快速上手Elasticsearch的Restful API,构建强大的搜索功能。感谢大家支持:

Elastic Search的RestFul API入门

在这里插入图片描述

文章来源:https://blog.csdn.net/csdnerM/article/details/134428915
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。