【Mybatis】我抄袭了Mybatis,手写一套MyMybatis框架:编写一个引入MyMybatis框架的正常项目

上一篇文章中,我们学习了使用mybatis框架连接mysql。在这篇文章中,我们将聚焦于我们的调用方,即相应的实际项目,其中包含了对mymybatis框架的引用。以一个常见而又典型的例子来说明这一点------制作一款学生管理系统()。这个所谓的"项目"显然无法像之前那样,依靠创建jdbc连接并且一条一条地编写SQL语句来解决问题,因为任何一项正常的开发流程都不应该如此生硬。

我们需要根据实际情况,创造性地制定并设置一份含有相关内容的文档文件(也被称为"配置文件 ")。其中,包含了各种数据库的具体参数信息。接下来,我们只需专注于编写具体的功能性代码以及正确传递所需的参数,并在这个基础上编写适当的SQL语句即可,与我们平常使用mybatis框架的场景无异,即和上一篇文章无太大的差别。

首先我们需要创建一个正常的maven项目。这里我们就叫做:my-mybatis-demo

正常的项目都会像我们这样引入一个jar包在pom文件中。

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>com.masiyi</groupId>
        <artifactId>my-mybatis</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>


    <groupId>com.masiyi</groupId>
    <artifactId>my-mybatis-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.masiyi</groupId>
            <artifactId>my-mybatis-core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

这里面我们先暂且取名叫做my-mybatis-core,最基础的我们要有一个对应表数据结构的一个实体类。就是我们在上一篇中的user表。这里我们使用驼峰命名法。

java 复制代码
package com.masiyi.entity;

import lombok.Data;

@Data
public class User {

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

}

这里的@Data是lombok中的注解,待会我们会在我们框架中引入,我们先不管。

之后我们需要有一个接口去定义我们的方法以实现SQL的编写。这里我们就叫userdao,里面定义了两个方法,一个是findAll()查询全部,一个是findById(Integer id)根据id查询。返回值则全是 List<User>

java 复制代码
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);

}

用过mybatis框架的同学肯定知道每一个dao接口肯定是有一个xml文件去对应的。而xml文件里面就是写我们sql的地方,这里面我们取名叫做UserMapper.xml。其中我们可以自定义一个类似mybatis中的标签,叫什么都无所谓,但是方别大家与mybatis相比较,我们还是使用mybatis的命名方式取名叫mapper namespace="com.masiyi.dao.UserDao"这里就是对应着UserDao接口的类全路径。

java 复制代码
<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>

这里面的 <select>标签也是可以自定义比如叫myselect都行,最后我们在自定义框架中解析就行了,里面也和mybatis一样使用一个id属性来对应着里面的方法,最后写一个resultType返回值和parameterType传进来的参数值。

在对应的select标签中我们写上我们的sql,就像上面我们的代码里面的sql一样就行了。

除了写sql的xml文件,我们还需要一个写我们数据库信息的配置文件。这里我们就叫他myMybatisConfig.xml

java 复制代码
<configuration>

    <!--1.配置数据库信息-->
    <dataSource>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test_ob"></property>
        <property name="username" value="rootmsy"></property>
        <property name="password" value="root"></property>
    </dataSource>

    <!--2.引入映射配置文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
        <mapper resource="mapper/UserMapperCopy.xml"></mapper>
    </mappers>


</configuration>

配置数据库信息 ,里面我们主要写的也是和mybatis一模一样的:驱动类,url地址,用户名,密码.注意这里的名字和里面的标签也可以随便写,我们也使用name和value值做一个区分。到时候我们自己再写框架的时候,取对应的数据就行了,这里只是做一个示范,我们暂时就叫我们上面的名字。

引入映射配置文件 ,这里我们把我们上面装sql的xml文件给拿过来,假如我们的框架有很多的mapper文件,我都将他们引入进来,注意这里都是写在resource目录下面。就像我们现在的项目架构一样:

最后我们可以编写一个测试文件,来测试我们的自己写的框架。

java 复制代码
package com.masiyi;

import com.masiyi.dao.UserDao;
import com.masiyi.entity.Configuration;
import com.masiyi.entity.User;
import com.masiyi.executor.SimpleSqlSession;
import com.masiyi.io.Resources;
import com.masiyi.parse.ConfigParse;
import com.masiyi.util.MyMybatisUtil;

import java.io.InputStream;
import java.util.List;

/**
 * @Author masiyi
 * @Date 2023/11/10
 * @PackageName:com.masiyi
 * @ClassName: MybatisTest
 * @Description: TODO
 * @Version 1.0
 */
public class MybatisTest {

    public static void main(String[] args) {

        InputStream resourceAsSteam = Resources.getResourceAsStream("myMybatisConfig.xml");

        Configuration configuration = new ConfigParse().parse(resourceAsSteam);

        SimpleSqlSession simpleSqlSession = new SimpleSqlSession(configuration);

        UserDao userDao = simpleSqlSession.newProxyClass(UserDao.class);

        userDao.findAll().forEach(System.out::println);

        // 释放资源
        simpleSqlSession.close();
    }


}

这里是使用MyMybatis框架进行数据库操作,给大家做一个解释。

首先,通过Resources.getResourceAsStream("myMybatisConfig.xml")方法获取了一个名为myMybatisConfig.xml的配置文件的输入流。这个配置文件包含了MyMybatis框架的相关配置信息,比如数据库连接信息、映射文件等。

java 复制代码
  InputStream resourceAsSteam = Resources.getResourceAsStream("myMybatisConfig.xml");

接下来,通过ConfigParse().parse(resourceAsSteam)方法将配置文件的输入流解析成一个Configuration对象。Configuration对象包含了框架的配置信息,比如数据库连接信息、映射文件等。

java 复制代码
  Configuration configuration = new ConfigParse().parse(resourceAsSteam);

然后,创建了一个SimpleSqlSession对象,将上一步解析得到的Configuration对象传入。SimpleSqlSession是MyMybatis框架中的核心类,它负责管理数据库连接和执行SQL语句。

java 复制代码
  SimpleSqlSession simpleSqlSession = new SimpleSqlSession(configuration);

接着,通过simpleSqlSession.newProxyClass(UserDao.class)方法创建了一个UserDao接口的代理类。代理类是MyMybatis框架根据接口定义和映射文件自动生成的,它封装了数据库操作的具体实现。

java 复制代码
 UserDao userDao = simpleSqlSession.newProxyClass(UserDao.class);

最后,通过调用userDao.findAll()方法执行数据库查询操作,并使用forEach(System.out::println)打印查询结果。

java 复制代码
 userDao.findAll().forEach(System.out::println);

最后,调用simpleSqlSession.close()方法释放资源,关闭数据库连接。

java 复制代码
  simpleSqlSession.close();

编写几个重要的文件完成之后,我们项目的情况结构大体就是这样:

今天这篇文章我们就先写到这里。下一篇文章我们开始根据测试类里面的方法去构建我们的自定义框架MyMybatis,最后给大家看一下我们这个框架实现的效果:

findById() 方法

数据库里面的数据:

可以看到和我们上一篇文章里面达到的效果是一样的。如果说大家对这篇文章有兴趣的话,大家可以先点一波关注,最后我们在下一篇文章与大家再见。

相关推荐
向阳12181 分钟前
mybatis 动态 SQL
数据库·sql·mybatis
秋意钟2 分钟前
Spring新版本
java·后端·spring
小蜗牛慢慢爬行22 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
A小白590844 分钟前
Docker部署实践:构建可扩展的AI图像/视频分析平台 (脱敏版)
后端
新手小袁_J1 小时前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
goTsHgo1 小时前
在 Spring Boot 的 MVC 框架中 路径匹配的实现 详解
spring boot·后端·mvc
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Q_19284999061 小时前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
良许Linux1 小时前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
求知若饥1 小时前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs