【MyBatis】| JavaWeb基础教程学习笔记(上)

01-MyBatis简介

什么是MyBatis?

  • MyBatis是一款优秀的持久层框架,用于简化JDBC开发
  • MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github
  • 官网:https://mybatis.net.cn/getting-started.html

什么是持久层?

  • 负责将数据保存到数据库的那一层代码
  • JavaEE三层架构:表现层、业务层、持久层

什么是框架?

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

JDBC的缺点--->MyBatis将其解决

两个缺点:硬编码和操作繁琐。

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

市面上持久层框架有:

02-MyBatis快速入门

查询user表中所有数据,步骤:

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件 ---> 替换连接信息 解决硬编码问题
  4. 编写SQL映射文件 ---> 统一管理sql语句,解决硬编码问题
  5. 编码
    1. 定义POJO类
    2. 加载核心配置文件,获取SqlSessionFactory对象
    3. 获取SqlSession对象,执行SQL语句
    4. 释放资源

1. 创建user表,添加数据

-- 创建数据库
CREATE DATABASE mybatis;-- 使用数据库
USE mybatis;-- 如果存在,则删除表 tb_user
DROP TABLE IF EXISTS tb_user;-- 创建表 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 (username, password, gender, addr) VALUES ('zhangsan', '123', '男', '北京');
INSERT INTO tb_user (username, password, gender, addr) VALUES ('李四', '234', '女', '天津');
INSERT INTO tb_user (username, password, gender, addr) VALUES ('王五', '345', '男', '西安');

2. 创建模块,导入坐标(创建Maven,添加依赖

什么是导入坐标?在Maven中,“导入坐标”是指在项目的`pom.xml`文件中添加依赖项的行为。这里的“坐标”指的是Maven仓库中的依赖项的唯一标识符。叫添加依赖不行吗?非要叫导入坐标

        打开IDEA创建一个Maven项目。要使用 MyBatis,方法一你只需要将 mybatis-x.x.x.jar 文件添加到你的项目的类路径(classpath)中。

方法二如果你使用 Maven 来构建你的项目,你需要将以下依赖代码添加到你的 pom.xml 文件中。

pom.xml:
    <dependencies><!-- MyBatis 依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version></dependency><!-- ... 其他依赖 ... --></dependencies>

        请注意,你需将 x.x.x 替换为当前的 MyBatis 版本号。本例3.5.16

        从 MyBatis 的官方网站或者 Maven 中央仓库以获取最新的版本号,并替换上述代码中的 x.x.x 以确保你使用的是最新稳定版本的 MyBatis。

完整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>org.example</groupId><artifactId>javaweb_b_mybatis</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- MyBatis 依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><!-- 例如数据库驱动,这里以MySQL为例 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</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>
logback.xml:

logback除了要添加依赖,还需要一个配置文件logback.xml

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

  • 从XML中构建SqlSessionFactory
  • xml配置文件mybatis-config.xml
  • 放在src.main.resources下
mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--数据库连接信息--><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><!--加载sql映射文件--><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

MyBatis 配置文件中,有【数据库连接信息】需要根据你的实际环境进行修改:

  • ${driver}:数据库驱动类名称,需要替换为实际的驱动类,例如 com.mysql.cj.jdbc.Driver
  • ${url}:数据库连接 URL,需要替换为实际的数据库连接字符串,例如 jdbc:mysql://localhost:3306/mybatis或者jdbc:mysql://mybatis?useSSL=false
  • ${username}:数据库用户名,需要替换为实际的数据库用户名,例如:root。
  • ${password}:数据库密码,需要替换为实际的数据库密码,例如:123456。
  • mapper文件是同级,本例改为mapper resource="UserMapper.xml"

4. 编写SQL映射文件 ---> 统一管理sql语句,解决硬编码问题

  • sql语句映射文件
  • 假设操作的是user表,文件名就叫UserMapper.xml
  • 放在src.main.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"><!--
mapper根标签
namespace名称空间
-->
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>
  • namespace:namespace="org.mybatis.example.BlogMapper":这是命名空间,通常是接口的全限定名。你需要根据实际项目的包结构来修改这个值。本例改为test
  • select id:id="selectBlog":这是查询的唯一标识符,用于在代码中引用。如果你有多个查询,需要确保每个查询的 id 都是唯一的。本例是selectAll
  • resultType:resultType="Blog":这指定了查询结果应该映射到哪个 Java 类。你需要根据实际的 Java 类名来修改这个值。本例是com.itheima.pojo.User
  • SQL语句:select * from Blog where id = #{id}:这是实际的 SQL 查询语句。你需要确保表名 Blog 和字段名 id 与数据库中的表和字段匹配。此外,如果使用了参数,需要确保它们与方法调用中的参数一致。本例是select * from tb_user

5. 编码

5.1定义POJO类
  • com.itheima.pojo.User
  • 放在src.main.java下
  • 定义属性、getter 和 setter 方法、toString方法
User.java:

什么是POJO类? 

POJO是Plain Old Java Object的缩写,直译为“简单老式Java对象”。它是一个简单的Java类。

5.2加载核心配置文件,获取SqlSessionFactory对象
  • com.itheima.MyBatisDemo
  • 放在src.main.java下
  • 从官网复制粘贴
  • 5.3获取SqlSession对象,执行SQL语句
  • 5.4释放资源

MyBatisDemo.java:
package com.itheima;import com.itheima.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;/*** Mybatis 快速入门代码*/
public class MyBatisDemo {public static void main(String[] args) throws IOException {// 1. 加载 MyBatis 的核心配置文件,获取 SqlSessionFactoryString 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.print(users);// 4.释放资源sqlSession.close();}
}

03-解决SQL语句警告提示

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

  • 产生原因:IDEA和数据库没有建立连接,不识别表信息
  • 解决方式:在IDEA中配置MySQL数据库连接

tips:在IDEA敲sql语句

04-Mapper代理开发

目的:

  • 解决原生方式中的硬编码
  • 简化后期执行SQL
  • IDEA写代码可以有代码补全功能,很方便

1.定义接口

定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  • 在resources下创建包package发现只有目录directory?
  • 在resources下创建包时要使用斜杠/表示层次结构

        因为路径更改了,所以mybatis-config.xml文件中的路径也需要更改。从 UserMapper.xml改为om/itheima/mapper/UserMapper.xml。

2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

把前面临时起的名称空间test改成com.itheima.mapper.UserMapper

3. 定义方法

在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

package com.itheima.mapper;import com.itheima.pojo.User;
import java.util.List;public interface UserMapper {List<User> selectAll();
}

 细节:从select * from tb_user明确的知道返回的是集合,所以用泛型List,而不是User对象。(很多个用集合,单个就用独立的实体类对象

4. 编码

4.1 通过SqlSession的getMapper方法获取Mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
4.2 调用对应方法完成sql的执行
List<User> users = userMapper.selectAll();
 MyBatisDemo2.java完整代码:
package com.itheima;import com.itheima.mapper.UserMapper;
import com.itheima.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;/*** Mybatis 代理开发*/
public class MyBatisDemo2 {public static void main(String[] args) throws IOException {// 1. 加载 MyBatis 的核心配置文件,获取 SqlSessionFactoryString resource = "mybatis-config.xml"; // 注意路径InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 2.获取 SqlSession对象,用它来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();// 3.执行sql//List<User> users = sqlSession.selectList("test.selectAll");//3.1 获取UserMapper接口的代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> users = userMapper.selectAll();System.out.println(users);// 4.释放资源sqlSession.close();}
}
  MyBatisDemo2.java运行结果展示:

5. 映射文件的加载

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

优点:可以简化配置,不需要在 MyBatis 配置文件中显式指定每个 Mapper XML 文件的位置。这可以减少配置文件的复杂性,特别是对于拥有大量映射文件的项目。


 

到现在为止完整目录如下:

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

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

相关文章

双11必买物品清单有哪些?双11推荐购买清单推荐分享

随着一年一度的“双十一”购物狂欢节的到来&#xff0c;各大电商平台纷纷推出了各种优惠活动和促销策略&#xff0c;让消费者在享受购物乐趣的同时也能获得实实在在的优惠。然而&#xff0c;面对琳琅满目的商品和纷繁复杂的促销活动&#xff0c;双11必买物品清单有哪些成为了一…

面向对象进阶(下)(JAVA笔记第二十五期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 抽象方法和抽象类抽象方法定义格式抽象类定义格式抽象方法和抽象类注意事项 接口接口的定义接口中成员变量的特点接口中没有构造方法接口中成员方法的特点在接口中定义具有方法体…

vue3中ref和reactive的用法,区别和优缺点,以及使用场景

写在前头&#xff1a; reactive定义的数据只能修改里面的属性&#xff0c;不能将整个数据替换&#xff0c;实在要替换请使用 Object.assign(obj1, obj2);举个例子 这种写法无法直接改变obj1 let obj1 reactive({name: 猫,age: 2, });obj1 {name: 猪,age: 2, } 正确的写法…

【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;迈向AGI的新跨越&#x1f4af;BoT与CoT的技术对比技术原理差异推理性能提升应用范围和通用性从错误中学习的能力总结 &#x1f4af;BoT的工作流程和机制初始化过程生成推…

LLVM - 编译器前端-llvm:IRBuilder 介绍

一:概述 llvm::IRBuilder 是 LLVM 中的一个重要类,用于方便地构建 LLVM 中间表示(IR)。它提供了一种高层次的接口,使得生成和操作 IR 更加简洁和高效。通过使用 IRBuilder,开发者可以轻松地创建基本块、指令、函数等,而不需要直接操作低级别的 LLVM API。它的主要功能有…

网上摄影工作室:Spring Boot框架的应用实例

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 &#xff08;1&#xff09;FIFO &#xff08;2&#xff09;LRU &#xff08;3&#xff09;LFU &#…

ubantu 编译安装ceph 18.2.4

下载ceph代码 git clone https://github.com/ceph/ceph.git #切换tag git checkout v18.2.4 -b v18.2.4 #下载子模块 会有报错重新执行即可 git submodule update --init --recursive安装ceph所需要的依赖 #curl命令安装 sudo apt install curl#安装ceph依赖 ./install-deps.…

SQL内外连接详解

SQL中的内连接&#xff08;INNER JOIN&#xff09;和外连接&#xff08;包括左外连接LEFT JOIN/LEFT OUTER JOIN、右外连接RIGHT JOIN/RIGHT OUTER JOIN&#xff09;是用于从两个或多个表中组合数据的技术。这里用一些简单的例子来帮助理解。 内连接&#xff08;INNER JOIN&am…

buildroot制作自己的软件包(可以理解为应用程序)

以helloworld为例记录使用步骤 一&#xff1a;书写自己的源程序以及Makefile helloworld.c #include <stdio.h>int main(int argc, char **argv) {printf("hello world\r\n");return 0; }Makefile all: helloworldhelloworld: helloworld.o$(CC) -o hellow…

API接口:驱动日常生活便利与商业决策智慧的关键力量

1. 日常生活中的应用 智能家居 场景描述&#xff1a;智能家居系统通过集成各种设备的API接口&#xff0c;实现远程控制和自动化。例如&#xff0c;通过API接口&#xff0c;用户可以通过手机应用控制家中的灯光、温度、安防系统等。案例&#xff1a;某智能家居品牌通过集成智能…

模型训练识别手写数字(二)

模型训练识别手写数字&#xff08;一&#xff09;使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…

【学术会议论文投稿】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南

【JPCS独立出版】​第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 引言 在快速发展的前端技术领域&#xff0c;选择合适的框架或库对于项目的成功至关重要。React、Vu…

什么是Java策略模式?与Spring的完美结合

文章目录 什么是策略模式&#xff1f;策略模式的组成部分&#xff1a; 策略模式的示例在Spring中的妙用1. 使用Spring配置2. 在上下文中选择策略3. 动态切换策略 总结推荐阅读文章 在软件设计中&#xff0c;策略模式是一种非常常见的设计模式&#xff0c;它能够让算法的变化独立…

CesiumJS 案例 P7:添加指定长宽的图片图层(原点分别为图片图层的中心点、左上角顶点、右上角顶点、左下角顶点、右下角顶点)

CesiumJS CesiumJS API&#xff1a;https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库&#xff0c;它用于在网页中创建和控制 3D 地球仪&#xff08;地图&#xff09; 一、添加指定长宽的图片图层&#xff08;原点为图片图层的中心…

Redis的Key和Value的设计原则有哪些?

在设计 Redis 的 Key 和 Value 时&#xff0c;需要考虑一些原则&#xff0c;以确保数据存储和检索的效率&#xff0c;以及满足特定用例的需求。以下是一些设计 Redis Key 和 Value 的原则: Key 的设计原则 1.可读性:一个Key应该具有比较好的可读性&#xff0c;让人能看得懂是…

Kaggle竞赛——灾难推文分类(Disaster Tweets)

目录 1. 准备工作2. 资源导入3. 数据处理4. 绘制词云图5. 数据可视化5.1 词数和字符数可视化5.2 元特征可视化5.3 类别可视化 6. 词元分析6.1 一元语法统计6.2 多元语法统计 7. 命名实体识别8. 推文主题提取9. 构建模型9.1 数据划分与封装9.2 模型训练与验证 10. 模型评估11. 测…

SQL:Windows下MySQL的安装教程(超详细)

一.系统环境&#xff1a; 操作系统&#xff1a; Windows11&#xff1b; MySQL版本&#xff1a; mysql-community-8.0.40.0&#xff1b; 二.MySQL下载&#xff1a; 访问MySQL 官网下载地址&#xff1a;https://www.mysql.com/&#xff0c;点击DOWNLOADS&#xff1b; 跳转后页…

Maven---依赖管理,项目构建工具

1.Maven安装和配置 1.1设置本地仓库 提前准备好仓库的位置,打开配置文件maven/conf/setting.xml 1.2配置阿里镜像源 在mirrors节点(标签)下添加阿里中央仓库镜像,把原本的镜像源注释掉,不要写在mirrors标签外 <mirror><id>alimaven</id><name>aliy…

6 款超实用的 Coze 插件,让你的智能体开发效率提升 200%

最近我一直在频繁使用 Coze 智能体&#xff0c;帮朋友和客户实现各种定制化需求。 Coze 不仅提供了强大的工作流编排能力和全面的功能节点&#xff0c;还有大量由开发者和平台上传的插件库支持。 对于智能体开发者来说&#xff0c;找到一款合适、好用的插件&#xff0c;真的能…