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

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

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

文章目录

    • 第一步,创建一个main项目
    • 第二步,编写dao接口
    • 第三步,编写dao接口对应的xml文件
    • 第四步,编写配置文件
    • 第五步,编写测试方法

第一步,创建一个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;}@Overridepublic 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 mapperPUBLIC "-//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 configurationPUBLIC "-//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入门

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SParC数据集介绍

导语 SParC是Text-to-SQL领域的一个多轮查询数据集。本篇博客将对该数据集论文和数据格式进行简要介绍。 SParC数据集概述 SParC是一个跨领域的多轮Text-to-SQL数据集。它包含有4298个问题轮次&#xff0c;大约有12k的自然语言问句到SQL标注的Question-SQL对。这些问题来自于…

JavaWeb的Servlet的入门和使用方法

1 什么是Servlet Servlet是Server Applet的简称&#xff0c;是用Java编写的是运行在 Web 服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#xff0c;可以收集来自网页表单的用户输…

提升FTP上传速度的方法(提升FTP下载速度的技巧)

在企业日常经营中&#xff0c;快速上传和下载文件至关重要。然而&#xff0c;在使用FTP&#xff08;文件传输协议&#xff09;进行文件传输时&#xff0c;速度可能成为瓶颈。为了提升工作效率&#xff0c;以下是一些建议&#xff0c;可以帮助企业提高FTP上传下载速度。 1、确保…

BERT的学习

BERT 1.前言 self-supervised learning是一种无监督学习的特殊形式&#xff0c;算法从数据本身生成标签或者目标&#xff0c;然后利用这些生成的目标来进行学习。&#xff08;也就是说数据集的标签是模型自动生成的&#xff0c;不是由人为提供的。&#xff09;例如&#xff0…

万能刷题小程序源码系统:功能强大+试题管理+题库分类+用户列表 附带完整的搭建教程

随着互联网技术的不断进步&#xff0c;线上学习已成为越来越多人的选择。刷题作为提高学习效果的重要方式&#xff0c;一直受到广大学生的喜爱。然而&#xff0c;市面上的刷题软件虽然繁多&#xff0c;但功能各异&#xff0c;质量参差不齐&#xff0c;使得很多用户在选择时感到…

STM32F4系列单片机库函数模板工程创建

目录 一、工程配置 1、新建工程 2、芯片选择 3、工程子文件夹创建 &#xff08;1&#xff09;FWLIB文件夹添加文件 &#xff08;2&#xff09;CORE文件夹添加文件 &#xff08;3&#xff09;USER文件夹添加文件 4、工程设置 &#xff08;1&#xff09;工程中添加文件夹…

【前端技术】Vite vs Webpack

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

Banana Pi BPI-M4 Berry 全志H618开发板快速使用手册

介绍 BPI-M4 Berry 开发板是一款功能强大的单板计算机 (SBC)&#xff0c;利用 Allwinner H618 片上系统 (SoC) 的功能为开发人员提供令人印象深刻的性能和丰富的功能。与 Raspberry Pi 4b 类似&#xff0c;BPI-M4 Berry 拥有可比的 CPU 性能、LPDDR4 内存支持、集成 WiFi 和蓝…

人机验证码生成与验证:提升系统安全性

一、前言 为了防止机器人或脚本程序自动化攻击和滥用系统资源&#xff0c;很多网站和应用程序需要使用验证码来判断用户是否为真人。 一般登录都要求用户手动输入以验证身份的安全措施。验证码是一种通过生成包含随机字符的图像或文本&#xff0c;通常包含了不同大小写字母、数…

内网穿透的应用-Ubuntu安装XRDP远程桌面结合内网穿透实现远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

工业4.0、 工业互联网、智能制造与设备通信协议 Modbus OPC MQTT

工业4.0是指第四次工业革命的核心概念&#xff0c;它代表了制造业的一种转型趋势&#xff0c;即通过深度整合数字化、互联和智能化技术&#xff0c;实现生产方式的革新。以下是对工业4.0主要特点的概述&#xff1a; 数字化&#xff1a;将物理世界与虚拟世界紧密连接&#xff0c…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了&#xff1a; Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测 目录 多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多…

Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步

一、前言 多屏渲染就是一个解码线程对应多个渲染界面&#xff0c;通过addrender这种方式添加多个绘制窗体&#xff0c;我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面&#xff0c;原理应该类似&#xff0c;一个地方负责打开解码播放&#xff0c;将画面…

谷歌 SGE 和生成式 AI 在搜索中:2024 年会发生什么

2024 年&#xff0c;Google 的搜索生成体验将如何影响营销&#xff1f;探索 AI 驱动的搜索趋势、SERP 中的 SGE、自然流量影响等。 最初&#xff0c;Labs 中的 Google 搜索生成体验 &#xff08;SGE&#xff09; 实验预计将于 2023 年 12 月“结束”。但随着谷歌实验室网站的最…

nodejs+vue+微信小程序+python+PHP的勤工俭学系统-计算机毕业设计推荐

微信小程序端 &#xff08;1&#xff09;首页。顶部展示公告&#xff0c;下方展示兼职信息详情&#xff0c;按时间倒序&#xff0c;求职者可以根据兼职内容信息和行业进行模糊筛选用人单位的招聘信息&#xff0c;点击某条信息可查看其信息内容和用人单位的信息&#xff08;包括…

用C语言找最大值最小值极值问题---------(C每日一编程)

一&#xff0c;输入十个数&#xff0c;输出其中的最大值 采用打擂台的方法 void main() {int i, max, a[10];for (i 0; i < 10; i)scanf("%d", &a[i]);max a[0];for (i 1; i < 10; i)if (a[i] > max)max a[i];printf("%d\n", max); } 二…

蓝牙物联网在汽车领域的应用

I、蓝牙的技术特点 ​ 1998 年 5 月&#xff0c;瑞典爱立信、芬兰诺基亚、日本东芝、美国IBM 和英特尔公司五家著名厂商&#xff0c;在联合拓展短离线通信技术的标准化活动时提出了蓝牙技术的概念。蓝牙工作在无需许可的 2.4GHz 工业频段 (SIM)之上(我国的频段范围为2400.0~248…

Text-to-SQL小白入门(十)RLHF在Text2SQL领域的探索实践

本文内容主要基于以下开源项目探索实践&#xff0c; Awesome-Text2SQL:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2SQL, Text2DSL、Text2API、Text2Vis and more.DB-GPT-Hub&#xff1a;GitHub - eosphoros-ai…

关于“Python”的核心知识点整理大全41

目录 scoreboard.py game_functions.py game_functions.py 14.3.8 显示等级 game_stats.py scoreboard.py scoreboard.py scoreboard.py game_functions.py game_functions.py alien_invasion.py 14.3.9 显示余下的飞船数 ship.py scoreboard.py 我们将最高得分圆整…