0基础学习Mybatis系列数据库操作框架——最小Demo

大纲

  • 数据库
  • Mybatis
    • 目录结构
      • 配置
      • 代码
    • 代码/配置结构
      • 配置结构
        • 依赖库配置
        • SQL配置
        • Mybatis配置
          • 数据库配置
          • SQL映射配置
        • 完整配置
      • 代码结构
        • 映射类
        • Mybatis逻辑
          • 从 XML 中构建 SqlSessionFactory
          • 从 SqlSessionFactory 中获取 SqlSession
          • 通过mapper中的namespace和id执行SQL
        • 完整逻辑和代码
  • 参考资料

在学习Java的过程中,一般都会学习到使用JDBC连接和操作数据库的知识。Mybatis则是JDBC的一个上层封装,它简化了驱动加载、创建连接等操作。我们只要按照规范配置几个文件、写几个Java类和按一定规则将这些配置文件通过代码的形式加以利用,即可完成数据库的相关操作。
这个系列我们将学习Mybatis以及基于它开发出的工具MybatisPlus。在这个探索的过程中,我们将依赖包的管理交给Maven去做,注意力主要集中在Mybatis相关技术的应用上。
这个案例将依赖于两个模块:

  • 数据库
  • Mybatis

数据库

为了简单起见,我们使用《在Windows的Docker上部署Mysql服务》部署的Mysql服务。然后使用下面指令创建包含各种类型字段的表

create database testdb;
use testdb;
create table all_type(info_int int(10) comment 'int',info_tint tinyint comment 'tinyint',info_sint smallint comment 'smallint',info_mint mediumint comment 'mediumint',info_bint bigint comment 'bigint',info_char varchar(100) comment 'char',info_ttext tinytext comment 'tinytext',info_text text comment 'text',info_mtext mediumtext comment 'mediumtext',info_ltext longtext comment 'longtext',info_blob blob comment 'blob',info_mblob mediumblob comment 'mediumblob',info_lblob longblob comment 'longblob',info_float float(8,1) comment 'float',info_double double(8,1) comment 'double',info_decimal decimal(10,2) comment 'decimal',info_date  date comment 'date',info_datetime datetime comment 'datetime',info_timestamp timestamp comment 'timestamp',info_time time comment 'time',info_year year(4) comment 'year');

Mybatis

我们需要按照Mybatis的规则来组织代码以及其结构。

目录结构

我们使用IntelliJ IDEA创建一个基于Maven的Java工程。
在这里插入图片描述
为了能使用Mybatis,我们需要对上述步骤创建的工程做如下的改进:

配置

  • 新增配置。包含:
    • 记录SQL的文件。这儿需要对Mybatis设计有一个初步认识——分离SQL语言和Java代码,即不要在Java代码中放置SQL语句,而在一个独立的配置文件中放置SQL。本例中该文件我们命名为AllTypeMapper.xml。
    • 包含数据库位置、用户名、密码以及指定SQL所在文件的文件名。本例中该文件我们命名为mybatis-config.xml。
  • 修改配置。只要修改maven需要使用的pom.xml即可,即加入Mybatis以及其依赖的库。

代码

  • 新增代码。我们只要新增SQL结果映射的类即可,即Mybatis会将SQL返回的数据序列化为Java对象。本例中是com.all_type中的AlltType.java。
  • 修改代码。修改Main.java代码,利用上述配置以及Mybatis,达到查询数据库的效果。
    在这里插入图片描述

代码/配置结构

配置结构

依赖库配置

在pom.xml中新增

    <dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency></dependencies>

com.mysql是数据库连接工具,org.mybatis是Mybatis。
完整配置如下,仅供参考

<?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><groupId>org.example</groupId><artifactId>mybatis_demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>22</maven.compiler.source><maven.compiler.target>22</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency></dependencies></project>

使用Maven解析这个文件并把对应的库下载并部署,结果如下
在这里插入图片描述

SQL配置

对应于本例中的AllTypeMapper.xml。
这个文件主要定义SQL语句以及其结果反射的Java类。

    <select id="findAll" resultType="com.all_type.AllType">select * from all_type</select>

id表示这个SQL的唯一标识;resultType是单个结果的类型(select返回的是一个数组,即多个该类型的结果集合)。
完整的配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="AllTypeMapper"><select id="findAll" resultType="com.all_type.AllType">select * from all_type</select>
</mapper>
Mybatis配置

对应于本例中的mybatis-config.xml。
这个配置分为两部分。它们都定义在configuration下。

数据库配置

数据库信息可以配置多个,用于表示不同的环境。所以最外层是environments标签。
单个的环境使用environment标签表示,并通过id来唯一标志。
transactionManager的type字段表示使用哪种事务管理器。可选项如下:

  • JDBC。这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域。默认情况下,为了与某些驱动程序兼容,它在关闭连接时启用自动提交。
  • MANAGED。这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。

dataSource用于定义数据源。它的type也有两种类型,用于定义数据源的连接方式:

  • UNPOOLED。这个数据源的实现会每次请求时打开和关闭连接。
  • POOLED。这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。

dataSource下的driver表示驱动程序名;url提供数据库连接信息;username和password分别表示数据库的用户名和密码。

    <environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="fangliang"/></dataSource></environment></environments>
SQL映射配置

这儿可以定义一批SQL语句文件。

    <mappers><mapper resource="AllTypeMapper.xml"/></mappers>
完整配置
<?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.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="fangliang"/></dataSource></environment></environments><mappers><mapper resource="AllTypeMapper.xml"/></mappers>
</configuration>

代码结构

映射类

对应于本例中的AllType.java。
为了简单起见,我们只定义了表中的第一个字段。注意字段名称一致。

info_int int(10) comment ‘int’,

package com.all_type;public class AllType {public int getInfo_int() {return info_int;}public void setInfo_int(int info_int) {this.info_int = info_int;}private int info_int;
}

这个映射类和SQL配置文件AllTypeMapper.xml的SQL语句块有关联,即resultType字段对应的值。

<select id="findAll" resultType="com.all_type.AllType">select * from all_type
</select>
Mybatis逻辑

这部分代码我们写在Main.java中。它需要按以下步骤执行:

从 XML 中构建 SqlSessionFactory
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSF = new SqlSessionFactoryBuilder().build(in);
从 SqlSessionFactory 中获取 SqlSession
SqlSession s = sqlSF.openSession();
通过mapper中的namespace和id执行SQL
List<AllType> all = s.selectList("AllTypeMapper.findAll");
完整逻辑和代码

在这里插入图片描述

package org.example;import com.all_type.AllType;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;import java.io.InputStream;
import java.util.List;public class Main {public static void main(String[] args) {try {InputStream in = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSF = new SqlSessionFactoryBuilder().build(in);List<AllType> all;try (SqlSession s = sqlSF.openSession()) {all = s.selectList("AllTypeMapper.findAll");}for (AllType a : all) {System.out.println(a.getInfo_int());}} catch (Exception e) {System.out.println(e.getMessage());}}
}

参考资料

  • https://mybatis.org/mybatis-3/zh_CN/configuration.html#properties

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

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

相关文章

nginx的https与动态负载均衡

nginx的https 证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等 这里使用的是腾讯云 : 下载证书 : 选择 nginx: 下载之后传递到服务器上。 下面开始配置nginx的https: 1. 解压下载的证书包 cd /etc/ssl unzip xxcc.dwa_nginx.zip mv…

基于知识图谱的个性化学习推荐系统的设计与实现(论文+源码)_kaic

摘 要 Abstract 1 绪 论 1.1 研究背景及意义 1.2 国内外现状研究 1.3 研究工作和论文结构 2 相关技术 2.1 HTML 语言 2.2 Python 语言 2.3 数据库技术 2.4 Django 框架 3 系统分析 3.1 需求概述 3.2 系统可行性分析 3.2.1 技术可行性 3.2.2 经济可行性 3.2.3 操作可行性 3.3 功…

EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据

一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…

HarmonyOS实战开发-slider组件的使用

介绍 本篇Codelab主要介绍slider滑动条组件的使用。如图所示拖动对应滑动条调节风车的旋转速度以及缩放比例。 相关概念 slider组件&#xff1a;滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调节、亮度调节等应用场景。 环境搭建 软件要求 DevEco Stu…

图像处理_积分图

目录 1. 积分图算法介绍 2. 基本原理 2.1 构建积分图 2.2 使用积分图 3. 举个例子 1. 积分图算法介绍 积分图算法是图像处理中的经典算法之一&#xff0c;由Crow在1984年首次提出&#xff0c;它是为了在多尺度透视投影中提高渲染速度。 积分图算法是一种快速计算图像区域和…

基于Python实现多功能翻译助手(上)

创建一个支持多种语言翻译并且允许通过文件拖拽来输入文本的Python窗口应用程序是一个相对复杂的任务&#xff0c;涉及到多个库和组件。以下是一个简化的指南&#xff0c;展示如何使用Python的Tkinter库创建GUI窗口&#xff0c;结合Googletrans库进行翻译&#xff0c;以及使用P…

jvm类加载机制概述

、什么是jvm的类加载机制 类加载机制是指我们将类的字节码文件所包含的数据读入内存&#xff0c;同时我们会生成数据的访问入口的一种 特殊机制。那么我们可以得知&#xff0c;类加载的最终产品是数据访问入口。 加载类文件&#xff08;即.class文件&#xff09;的方式有以下几…

处理 Oracle 数据库表空间满的问题

处理 Oracle 数据库表空间满的问题 1、诊断表空间满的问题2、处理表空间满的问题3、设置表空间自增结论 在 Oracle 数据库管理中&#xff0c;表空间是一个重要的概念&#xff0c;用于存储数据库对象和数据。当表空间满了时&#xff0c;可能会导致数据库的运行受到影响&#xff…

Mac 下安装maven教程

note&#xff1a;网上已经有很多该类型教程了&#xff0c;这边自身保留一份&#xff0c;方便后面使用&#xff1b; 一、安装地址&#xff1a;官网 二、安装步骤 $ tar -xvf apache-maven-3.3.9-bin.tar.gz //mac支持手动点击解压 $ sudo mv -f apache-maven-3.3.9 /usr…

服务器固定IP(固定出口IP)去访问外部服务

背景 服务器上有多个IP&#xff0c;那么在服务器请求外部服务的时候&#xff0c;到底是使用哪个IP呢&#xff1f;如果要使用特定的IP去请求外部服务&#xff0c;该如何设置呢&#xff1f; 分析 遇到一个实际的场景&#xff1a; 我们产品和其他产品联调&#xff0c;我们的服务…

Linux中断管理:(一)中断号的映射

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 中断控制器 Linux 内核支持众多…

规划控制如何兼顾安全与舒适性

规划控制如何兼顾安全与舒适性 附赠自动驾驶学习资料和量产经验&#xff1a;链接 **导读&#xff1a;**自动驾驶技术研发对于“安全第一”的追求是毋庸置疑的&#xff0c;但是这中间可能就忽视了舒适性。 因此&#xff0c;今天我想给大家分享的是&#xff0c;自动驾驶研发如何…

《Java面试自救指南》(专题一)操作系统

文章目录 力推操作系统的三门神课操作系统的作用和功能线程、进程和协程的区别并行与并发的区别什么是文件描述符操作系统内核态和用户态的区别用户态切换到内核态的方式大内核和微内核的区别用户级线程和内核级线程的区别线程的七态模型进程调度算法有哪些进程间通信的七种方式…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

【Linux2】Linux的权限

思维导图 学习内容 在介绍完一些基本指令后&#xff0c;我们需要进行对权限以后一个全新的认识&#xff0c;比如文件的权限、目录的权限等等…… 学习内容 通过上面的学习目标&#xff0c;我们可以列出要学习的内容&#xff1a; shell命令以及运行原理Linux权限的概念Linux权…

【Blockchain】GameFi | NFT

Blockchain GameFiGameFi顶级项目TheSandbox&#xff1a;Decentraland&#xff1a;Axie Infinity&#xff1a; NFTNFT是如何工作的同质化和非同质化区块链协议NFT铸币 GameFi GameFi是游戏和金融的组合&#xff0c;它涉及区块链游戏&#xff0c;对玩家提供经济激励&#xff0c…

失物招领(源码+文档)

失物招领&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端首页注册界面发布动态我的详细登录修改资料发布动态 管理端后台登录用户管理分类管理内容管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考…

施耐德 PLC 控制系统 产品 + 软件总体介绍 2020

参考 2020.7 官方说明视频&#xff1a;https://www.bilibili.com/video/BV1Mi4y1G7Qc/ 总体说明 施耐德作为工业控制界巨头&#xff08;公认的几大巨头&#xff1a;西门子、AB、施耐德&#xff09;&#xff0c;PLC 控制器产品线很庞大&#xff0c;涵盖了高中低的完整产品线&…

webpack打包模块

webpack打包模块 一.webpack简介二.Webpack 修改入口和出口三.Webpack 自动生成 html 文件四.Webpack-打包 css 代码五.优化-提取 css 代码六.优化压缩过程七.Webpack-打包图片 一.webpack简介 1.Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包…

吴恩达2022机器学习专项课程(一) 4.4 学习率

问题预览/关键词 学习率太小有什么影响&#xff1f;学习率太大有什么影响&#xff1f;如果成本函数达到局部最小值&#xff0c;使用梯度下降还能继续最小化吗&#xff1f;为什么学习率固定&#xff0c;而最小化成本函数的步幅却越来越缓&#xff1f;如何选择合适的学习率&…