MyBatis快速入门

2023-09-17 17:14:22

Mybatis概述

Mybatis概念

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 201311月迁移到Github
  • 官网:https://mybatis.org/mybatis-3/zh/index.html
持久层:
  • 负责将数据到保存到数据库的那一层代码。 以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
  • JavaEE三层架构:表现层、业务层、持久层。
框架:
  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展


JDBC 缺点

硬编码
  • 注册驱动、获取连接
        上图标1 的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将 Mysql 数据库换成其他的关系型 数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。
  • SQL语句
        上图标2 的代码。如果表结构发生变化, SQL 语句就要进行更改。这也不方便后期的维护。
操作繁琐
  •  手动设置参数
  • 手动封装结果集
        上图标4 的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。

Mybatis 优化

  • 硬编码可以配置到配置文件
  • 操作繁琐的地方mybatis自动完成

Mybatis快速入门

需求:查询user表中所有的数据

  •  创建user表,添加数据
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user (
id int primary key auto_increment ,
username varchar ( 20 ) ,
password varchar ( 20 ) ,
gender char ( 1 ) ,
addr varchar ( 30 )
) ;
INSERT INTO tb_user VALUES ( 1 , 'zhangsan' , '123' , ' ' , ' 北京 ' ) ;
INSERT INTO tb_user VALUES ( 2 , ' 李四 ' , '234' , ' ' , ' 天津 ' ) ;
INSERT INTO tb_user VALUES ( 3 , ' 王五 ' , '11' , ' ' , ' 西安 ' ) ;
  •  创建模块,导入坐标

 在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

<dependencies>
<!--mybatis 依赖 -->
<dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactId>
<version> 3.5.5 </version>
</dependency>
<!--mysql 驱动 -->
<dependency>
<groupId> mysql </groupId>
<artifactId> mysql-connector-java </artifactId>
<version> 5.1.46 </version>
</dependency>
<!--junit 单元测试 -->
<dependency>
<groupId> junit </groupId>
<artifactId> junit </artifactId>
<version> 4.13 </version>
<scope> test </scope>
</dependency>
<!-- 添加 slf4j 日志 api -->
<dependency>
<groupId> org.slf4j </groupId>
<artifactId> slf4j-api </artifactId>
<version> 1.7.20 </version>
</dependency>
<!-- 添加 logback-classic 依赖 -->
<dependency>
<groupId> ch.qos.logback </groupId>
<artifactId> logback-classic </artifactId>
<version> 1.2.3 </version>
</dependency>
<!-- 添加 logback-core 依赖 -->
<dependency>
<groupId> ch.qos.logback </groupId>
<artifactId> logback-core </artifactId>
<version> 1.2.3 </version>
</dependency>
</dependencies>

 注意:需要在项目的 resources 目录下创建logback的配置文件

  • 编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题

 在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.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>
<typeAliases>
<package name = "com.itheima.pojo" />
</typeAliases>
<!--
environments :配置数据库连接环境信息。可以配置多个 environment ,通过 default 属性切换不同的
environment
-->
<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:///mybatis?useSSL=false" />
<property name = "username" value = "root" />
<property name = "password" value = "1234" />
</dataSource>
</environment>
<environment id = "test" >
<transactionManager type = "JDBC" />
<dataSource type = "POOLED" >
<!-- 数据库连接信息 -->
<property name = "driver" value = "com.mysql.jdbc.Driver" />
<property name = "url" value = "jdbc:mysql:///mybatis?useSSL=false" />
<property name = "username" value = "root" />
<property name = "password" value = "1234" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载 sql 映射文件 -->
<mapper resource = "UserMapper.xml" />
</mappers>
</configuration>
  •  编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题

 在模块的 resources 目录下创建映射配置文件 UserMapper.xml ,内容如下:

 <?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 = "selectAll" resultType = "com.itheima.pojo.User" >
select * from tb_user;
</select>
</mapper>

 com.itheima.pojo 包下创建 User

 public class User {

private int id ;
private String username ;
private String password ;
private String gender ;
private String addr ;
// 省略了 setter getter
}

 com.itheima 包下编写 MybatisDemo 测试类

public class MyBatisDemo {

public static void main ( String [] args ) throws IOException {
//1. 加载 mybatis 的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml" ;
InputStream inputStream = Resources . getResourceAsStream ( resource );
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder (). build ( inputStream );
//2. 获取 SqlSession 对象,用它来执行 sql
SqlSession sqlSession = sqlSessionFactory . openSession ();
//3. 执行 sql
List < User > users = sqlSession . selectList ( "test.selectAll" ); // 参数是一个字符串,该
字符串必须是映射配置文件的 namespace.id
System . out . println ( users );
//4. 释放资源
sqlSession . close ();
        }
}

 解决SQL映射文件的警告提示:

  • 产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。
  • 解决方式:在Idea中配置MySQL数据库连接

IDEA中配置MySQL数据库连接

  • 点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

 

  •  在弹出的界面进行基本信息的填写

 

  •  点击完成后就能看到如下界面

 

 而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句

更多推荐

【web开发】12、Django知识点回顾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录总结、Django知识点回顾提示:以下是本篇文章正文内容,下面案例可供参考总结、Django知识点回顾安装Djangopipinstalldjango创建Django项目django-adminstartprojectmysite注意:Pychar

stm32---定时器输入捕获

一、输入捕获介绍在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,通常用于测量输入信号的脉宽、测量PWM输入信号的频率及占空比。输入捕获的工作原理比较简单

新概念英语(第二册)复习——Lesson 6 - Lesson10

前言在学习6-10之前,确保1-5已经可以脱口而出,否则不需要学习6-10文章目录前言Lesson6-PercyButtons原文译文单词Lesson7-Toolate原文译文单词Lesson8-Thebestandtheworst原文译文单词Lesson9-Acoldwelcome译文单词Lesson10-NotFo

数组初学者向导:使用Python从零开始制作经典战舰游戏

引言战舰游戏,一个广受欢迎的经典游戏,为玩家提供了策略与猜测的完美结合。这个游戏的核心思想是通过猜测敌方船只的位置并尝试击沉它们来赢得比赛。在这篇文章中,我们将使用Python语言和数组来构建这款游戏,让你更加了解数组的操作和实用性。1.游戏概述在战舰游戏中,每位玩家都有一个10x10的网格,可以放置5艘船只。这些船只

C语言实现三子棋游戏(详解)

目录引言:1.游戏规则:2.实现步骤:2.1实现菜单:2.2创建棋盘并初始化:2.3绘制棋盘:2.4玩家落子:2.5电脑落子:2.6判断胜负:3.源码:结语:引言:《三子棋》是一款古老的民间传统游戏,又被称为OOXX棋、黑白棋,井字棋,九宫棋等。游戏分为双方对战,双方依次在九宫格棋盘上摆放棋子,率先将自己的三个棋子连成

Linux 下的 10 个 PDF 软件

本文[1]是我们正在进行的有关Linux顶级工具系列的延续,在本系列中,我们将向您介绍最著名的Linux系统开源工具。随着互联网上越来越多地使用可移植文档格式(PDF)文件来获取在线书籍和其他相关文档,拥有PDF查看器/阅读器对于桌面Linux发行版非常重要。有几种可以在Linux上使用的PDF查看器/阅读器,它们都提

Excel VBA 变量,数据类型&常量

几乎所有计算机程序中都使用变量,VBA也不例外。在过程开始时声明变量是一个好习惯。这不是必需的,但有助于识别内容的性质(文本,​​数据,数字等)在本教程中,您将学习-一、VBA变量变量是存储在计算机内存或存储系统中的特定值。以后,您可以在代码中使用该值并执行。计算机将从系统中获取该值并显示在输出中。必须为每个变量指定一

Java内存模型

一、运行时数据区域的分区JVM虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。1.1运行时数据区域的划分JVM虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK1.8之前分为:线程共享(Heap堆区、MethodArea方法区)、线程私有(虚拟机栈、本地方法栈

统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131411975红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点

QT5 QCamera摄像头

文章目录前言一、QCamera类二、QCameraViewfinder类三、QCameraInfo类四、QCameraImageCapture类总结前言本篇文章我们来讲解QT如何使用通过QCamera调用摄像头。本篇文章的话就围绕QT5来展开讲解,QT6的话已经更新了多媒体的调用方式,这里我们以后再进行讲解。一、QCa

微服务整合Gateway网关

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏:微服务探索之旅✨特色专栏:MySQL学习🥭本文内容:微服务整合Gateway网关🖥️个人小站:个人博客,欢迎大家访问📚个人知识库:知识库,欢迎大家访问大家好,我是Leo🫣🫣🫣,

热文推荐