JavaWeb-MyBatis(上)

学完项目管理工具Maven后,继续学习MyBatis。我们都知道,JDBC是一个与数据库连接相关的API,最开始学习数据库连接都是从JDBC开始学起,但是其也有缺点,比如硬编码和操作繁琐等等。而今天学习的MyBatis就是专门为简化JDBC开发而设计的。
在这里插入图片描述

一、MyBatis概述

1、MyBatis开发基础

MyBatis是一款优秀的持久层框架,用于简化JDBC开发。

持久层:所谓持久层,即负责将数据到保存到数据库的那一层代码。JavaEE三层架构分别为表现层、业务层、持久层,每层架构对应的具体功能后面讲框架的时候也会学到。

框架:简单理解,就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型,在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

官网: https://mybatis.org/mybatis-3/ ,官方文档对于我们学习MyBatis具有很大的帮助和参考意义,如下翻译成中文。
在这里插入图片描述

2、MyBatis和JDBC

任何一个新技术的出现很大程度上都是为了解决或改善之前技术存在的痛点。引入MyBatis也是,因此,来看一下MyBatis和JDBC之间的比较。

2.1 JDBC缺点

1)硬编码
硬,即不可变或很难改变的意思,即字符串。硬编码,简单理解就是很多字符串信息写入代码,后续发生变动时改动量太大,代码维护性差。JDBC有以下地方体现硬编码。

1.注册驱动,获取连接
// 注册驱动
Class.forName("com.mysql.jdbc.Driver"); // 将类加载进内存 (可以省略)
// 获取连接
String url="jdbc:mysql:///db1?useSSL=false";
String username="root";
String password="123456";
Connection conn = DriverManager.getConnection(url, username, password);2.SQL语句,如
String sql="SELECT * FROM `account`";

2)操作繁琐

手动设置参数
手动封装结果集

在这里插入图片描述

2.2 MyBatis优点

1)配置文件---->解决硬编码问题
2)自动完成---->解决手动操作繁琐问题
在这里插入图片描述

MyBatis官方介绍:MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

二、MyBatis快速入门

不清楚的可参考官方文档:https://mybatis.org/mybatis-3/getting-started.html ,里面有详细说明。

1、案例

直接上手代码,以查询user表中所有数据为例。
1)创建user表,添加数据
打开Navicat,连接MySQL,并在当前连接下通过新建查询的方式创建数据库、表以及插入数据。
在这里插入图片描述

对应的代码如下

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', '男', '西安');

创建插入完成后,即可查询表中数据
在这里插入图片描述

2)创建模块,导入坐标
新建一个mybatis-demo的Maven项目,在pom.xml文件中导入所需坐标。

对于坐标,需要用到什么就导入什么。

<?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>itweb</groupId><artifactId>mybatis-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><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>
</project>

3)编写MyBatis核心配置文件(mybatis-config.xml)

替换连接信息解决硬编码问题(核心两步如下)
1.数据库连接信息
2.加载sql映射文件

在resources目录下新建一个mybatis-config.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:///mybatis?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--加载sql映射文件--><mappers><!--由于mybatis-config.xml与UserMapper.xml同级,所以直接写名称--><mapper resource="UserMapper.xml"/></mappers>
</configuration>

4)编写SQL映射文件(XxxMapper.xml)

统一管理sql语句,解决硬编码问题

编写sql查询及增删改语句(名称空间namespace和id,类模块resultType) id有selectAll等

在resources目录下新建一个UserMapper.xml文件,编写代码如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间
-->
<mapper namespace="test"><select id="selectAll" resultType="com.itweb.pojo.User">select * from tb_user;</select>
</mapper>

5)编码
第一,定义POJO实体类(Xxx类),两个要点如下

1.封装所有与数据库同名的属性
2.提供get、set方法和重写toString方法

在java目录下新建一个User类(com.itweb.pojo.User)

package com.itweb.pojo;
// 处理属性字段时,alt + 鼠标左键 整列编辑
public class User {private Integer id;private String username;private String password;private String gender;private String addr;// 提供get、set方法(鼠标右键快捷生成)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}// 提供重写toString方法(鼠标右键快捷生成)@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +", addr='" + addr + '\'' +'}';}
}

第二,加载核心配置文件,获取SqISessionFactory对象
第三,获取 SqlSession对象,执行SQL语句
第四,释放资源
在java目录下新建一个MyBatisDemo类(com.itweb.MyBatisDemo),以上三步对应的代码如下

package com.itweb;import com.itweb.pojo.User;
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;
import java.util.List;public class MyBatisDemo {public static void main(String[] args) throws IOException {// 1.加载核心配置文件,获取 SqlSessionFactory 对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2.获取SqlSession对象,用来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();// 3.执行sqlList<User> users = sqlSession.selectList("test.selectAll");System.out.println(users);// 4.释放资源sqlSession.close();}
}

运行结果如下
在这里插入图片描述

总结:项目结构及相关步骤回顾梳理
结合项目结构来梳理项目的相关步骤流程,一图以蔽之,如下。
在这里插入图片描述

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

SQL映射文件里的表名爆红,是警告提示而非错误。
在这里插入图片描述

产生原因:Idea 和数据库没有建立连接,不识别表信息
解决方式:在 Idea 中配置 MySQL 数据库连接
在这里插入图片描述

连接成功后如下图
在这里插入图片描述

由此可见IDEA功能十分强大,只要数据库连接成功,以后就能非常方便的在IDEA中编写数据库代码了。

三、Mapper代理开发

1、目的

1)解决原生方式中的硬编码
2)简化后期执行SQL

2、步骤

1)定义与SQL映射文件同名的Mapper接口,并且将Mapper接口(如UserMapper.class接口)和SQL映射文件(如UserMapper.xml)放置在同一目录下

注:在resources目录下创建分层的包要用 / 而不是 .

2)设置SQL映射文件的namespace属性为Mapper接口全限定名(如com.itweb.mapper.UserMapper)
3)在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
(以上三步对应下图)
在这里插入图片描述

4)编码

1.通过SqlSession的getMapper方法获取Mapper接口的代理对象
2.调用对应方法完成sql的执行

在这里插入图片描述

在这里插入图片描述

注:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

在这里插入图片描述

四、MyBatis核心配置文件

参考官方文档:https://mybatis.org/mybatis-3/configuration.html

在这里插入图片描述

1、类型别名(typeAliasess)

<typeAliases><package name="com.itweb.pojo"/>
</typeAliases>

注:配置各个标签时,需要遵守前后顺序

其他更多的可以参考官方文档自行学习,不再赘述。

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

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

相关文章

【Node.js从基础到高级运用】三、JavaScript基础

Node.js入门&#xff1a;JavaScript基础 在成功搭建了Node.js的开发环境之后&#xff0c;我们即将进入Node.js编程的核心——JavaScript语言本身。在这篇文章中&#xff0c;我们将回顾JavaScript的基础知识&#xff0c;这些是每个Node.js开发者都必须掌握的概念。我们还将探讨…

强制Unity崩溃的两个方法

在Unity中&#xff0c;这两种方法都可以用于强制使应用程序崩溃&#xff0c;但它们的作用略有不同&#xff1a; Application.ForceCrash(0); 这个方法会强制应用程序崩溃&#xff0c;并且参数传入的是一个整数值。当参数为0时&#xff0c;它会导致应用程序崩溃并显示一个“Acce…

免费SSL证书整理合集

有哪些免费的SSL证书呢&#xff1f;下面整理了一下非常有性价比的 一&#xff1a;免费单域名SSL证书&#xff1a;适用于只有一个域名的情况下使用 点击申请免费单域名SSL证书https://www.joyssl.com/certificate/select/joyssl-dv-single-free.html?nid7 二&#xff1a;通配…

基于单片机的篮球计分器设计

在当今的体育赛事中,比赛的计分系统对观众和运动员尤为重要,观众可以根据比分的实时显示为自己支持的队伍呐喊助威,运动员更是要靠着计分器来把握比赛的节奏,包括攻防转换、替补换人以及赛间休息等等。因此,为了让比赛进行得更加专业化和流畅化,我们有必要对比赛的计分系…

Linux 内存

Linux 内存 一:工具1.free2.查看内存额定值3.查看指定进程内存二:buffer/cache1.Buffer具体职责2.Cache具体职责区别三级目录一:工具 1.free -b  以Byte为单位显示内存使用情况。 -k  以KB为单位显示内存使用情况。 -m  以MB为单位显示内存使用情况。 -g 以GB为单位显…

Java Day4 API

文章目录 1、Object类1.1 Tostring1.2 equals1.3 clone 2、Objects类2.1 equals方法isNull 与nonNull 3、包装类3.1 常见操作 4、StringBuilder5、StringBuffer6、StringJoiner 1、Object类 所有类的基类。 1.1 Tostring public String toString() 返回对象的字符串表示形式…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢&#xff0c;给数据库加Redis缓存&#xff08;参考CPU缓存&#xff09;&#xff0c;将数据缓存在内存中&#xff0c;省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

设计定时任务实现数据同步的最佳实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一、选择合适的定时任务框架 Quartz Spring 的 Task…

小程序开发随记——生命周期

生命周期 &#xff08;1&#xff09;组件的生命周期&#xff08;created、attached、ready、moved、detached&#xff09; created 触发时机&#xff1a;组件实例刚刚被创建好时&#xff0c; created 生命周期被触发。 此时&#xff0c;组件数据 this.data 就是在 Component …

react集成tinymce富文本编辑器

tinymce富文本编辑器 官方文档&#xff1a;https://www.tiny.cloud/docs/quick-start/ 中文文档&#xff1a;http://tinymce.ax-z.cn/ 支持vue、react、angular react集成 命令 yarn add tinymce/tinymce-react yarn add tinymce代码 import { useState, useEffect } from…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#xff0c;及时获取更新消息。 引言 在…

如何判断螺栓已经拧紧?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓拧紧的标准并非仅仅依赖于螺栓的外观&#xff0c;而是依赖于几个关键因素&#xff0c;包括扭矩、预紧力和材料疲劳等。下面SunTorque智能扭矩系统和大家将详细讨论这些因素&#xff0c;并给出如何判断螺栓是否已经拧…

史上最大优惠!腾讯云服务器优惠价格表一年、1个月收费明细

腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

Linux MBR扇区故障 引导修复

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— Linux MBR&#xff08;Master Boot Record&#xff0c;主引导记录&#xff09;是硬盘的第一个扇区&#xff0c;通常位于磁…

主机字节序列和网络字节序列

目录 1.概念 2.常见的字节序 3.转换接口 1.概念 主机字节序列分为大端字节序和小端字节序&#xff0c;不同的主机采用的字节序列可能不同。大端字节序是指一个整数的高位字节存储在内存的低地址处&#xff0c;低位字节存储在内存的高地址处。小端字节序则是指整数的高位字节…

为什么内部类持有外部类可能内存泄露?

内部类持有外部类的引用可能导致内存泄漏的情况通常是因为外部类的生命周期比内部类的生命周期长。在这种情况下&#xff0c;如果内部类持有对外部类的引用&#xff0c;外部类将无法被垃圾收集器回收&#xff0c;即使外部类不再被使用。 这种情况通常发生在以下情形下&#xf…

前端架构: 脚手架通用框架封装之添加测试框架(教程六)

添加测试框架 接上文&#xff0c;仍旧在 abc-cli 项目中 参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136438882 现在要在脚手架项目中安装测试工具&#xff0c;选择 jest 文档&#xff1a;https://www.npmjs.com/package/jest 数据&#xff1a;Week…

maven项目引入私有jar,并打包到java.jar中

私有jar存放位置 maven依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId><version>1.1.10</version><scope>system</scope><systemPath>${project.basedir}/s…

Tomcat常见配置(基础功能、虚拟主机、搭建博客)

目录 一、Tomcat基础功能 1、自动解压war包 2、Tomcat工具界面 2.1 Server Status (服务器状态) 2.1.1 本地登录状态页 2.1.2 远程登录状态页 2.2 Manager App (管理应用程序) 2.3 Host Manager (主机管理器) 3、Context 配置 二、配置虚拟主机 三、搭建 JPress 博客…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT&#xff08;Diagnostic Extract Template&#xff09;是AUTOSAR定义的诊断提取模板&#xff0c;用于DCM&#xff08;Diagnostics Communication Manager&#xff09;、DEM&#xff08;Diagnostics Event Manager&#xff09;和FIM&#xff…