当前位置: 首页 > news >正文

MyBatis入门——基本的增删改查

目录

一、MyBatis简介

二、搭建MyBatis

(一)配置依赖

(二)log4j日志功能

(三)数据库配置文件——jdbc.properties

(四)创建MyBatis的核心配置文件

(五)使用MyBatisX插件

三、项目其他配置搭建

(一)创建数据库连接工具类

(二)创建表

(三)创建数据库的实体类

(四)UserMapper接口

(五)UserMapper.xml

(六)测试类


一、MyBatis简介

        MyBatis是一款优秀的持久层框架,主要用于简化数据库操作,它支持自定义SQL、存储过程以及高级映射。

        它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

        MyBatis可以使用 XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

下载地址:https://github.com/mybatis/mybatis-3 

二、搭建MyBatis

maven:3.8.1

MySQL:8

MyBatis:3.5.16

(一)配置依赖

pom.xml:

<dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><!-- junit测试 -->        <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.11.3</version><scope>test</scope></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><scope>provided</scope></dependency><!-- log4j日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>

(二)log4j日志功能

日志的级别 FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细

src/main/resources/log4j.xml:如果有报红无需在意

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n"/></layout></appender><logger name="java.sql"><level value="debug"/></logger><logger name="org.apache.ibatis"><level value="info"/></logger><root><level value="debug"/><appender-ref ref="STDOUT"/></root>
</log4j:configuration>

(三)数据库配置文件——jdbc.properties

src/main/resources/jdbc.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root

        指定serverTimezone=UTC参数的主要作用是解决时区问题,确保从数据库中检索的时间和日期值与Java应用程序中的时区设置一致。

(四)创建MyBatis的核心配置文件

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

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><!--MyBatis核心配置文件中,标签的顺序:properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?--><!--引入properties文件--><properties resource="jdbc.properties"/><!-- 设置MyBatis的全局配置--><settings><!-- 将_自动映射为驼峰,例如emp_name:empName--><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 开启延迟加载--><setting name="lazyLoadingEnabled" value="true"/></settings><!--设置类型别名--><typeAliases>      <!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写--><package name="com.atguigu.mybatis.pojo"/></typeAliases><!--environments:配置多个连接数据库的环境属性:default:设置默认使用的环境的id--><environments default="development"><!--environment:配置某个具体的环境属性:id:表示连接数据库的环境的唯一标识,不能重复--><environment id="development"><!--transactionManager:设置事务管理方式属性:type="JDBC|MANAGED"JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事
务的提交或回滚需要手动处理MANAGED:被管理,例如Spring--><transactionManager type="JDBC"/><!--dataSource:配置数据源属性:type:设置数据源的类型type="POOLED|UNPOOLED|JNDI"POOLED:表示使用数据库连接池缓存数据库连接UNPOOLED:表示不使用数据库连接池JNDI:表示使用上下文中的数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--引入映射文件--><mappers><!--<mapper resource="mappers/UserMapper.xml"/>--><!--以包为单位引入映射文件,要求:1.mapper接口所在的包要和映射文件所在的包一致2.mapper接口要和映射文件的名字一致--><package name="com.atguigu.mybatis.mapper"/></mappers>
</configuration>

(五)使用MyBatisX插件

 

三、项目其他配置搭建

(一)创建数据库连接工具类

com.atguigu.mybatis.utils.SqlSessionUtils.SqlSessionUtils:

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;public class SqlSessionUtils {public static SqlSession getSqlSession() {SqlSession sqlSession = null;try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);sqlSession = sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return sqlSession;}
}

(二)创建表

create table t_user
(id       int auto_increment primary key,username varchar(20) null,password varchar(20) null,age      int         null,sex      char        null,email    varchar(50) null
);-- 插入数据
insert into t_user
values (null, '张三', '123456', 19, '男', 'abc456@163.com'),(null, '李四', '123456', 20, '女', 'abc123@163.com'),(null, '王五', '123456', 25, '男', '123xyz@qq.com');

(三)创建数据库的实体类

com.atguigu.mybatis.pojo.User:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private String password;private Integer age;private String sex;private String email;
}

(四)UserMapper接口

import com.atguigu.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {/*** 添加用户信息*/int insertUser(User user);/*** 根据id修改用户信息*/int updateUser(User user);/*** 根据id删除用户信息*/int deleteUser(Integer id);/*** 根据id查询用户信息*/User getUserById(Integer id);/*** 根据username查询用户信息*/List<User> getUserByUserNameAndPassword(@Param("username") String username, @Param("password")String password);/*** 查询所有用户信息*/List<User> getAllUser();
}

(五)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">
<!--MaBatis面向接口编程的两个一致:1.映射文件的namespace要和mapper接口的全类名保持一致,通过接口就能找到映射文件2.映射文件中SQL语句的id要和mapper接口中的方法名一致,通过接口中的抽象方法就能找到SQL语句
-->
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper"><!-- int insertUser(User user);--><insert id="insertUser">insert into t_uservalues (null, #{username}, #{password}, #{age}, #{sex}, #{email});</insert><!-- int updateUser(User user);--><update id="updateUser">update t_userset username = #{username},password = #{password},age      = #{age},sex      = #{sex},email    = #{email}where id = #{id};</update><!-- int deleteUser(Integer id);--><delete id="deleteUser">deletefrom t_userwhere id = #{id}</delete><!-- User getUserById(Integer id);--><!-- 当数据库字段和属性相同时,resultType="User" 可以不写 MyBatis可自动映射  --><select id="getUserById" resultType="User">select *from t_userwhere id = #{id}</select><!-- List<User> getUserByUserNameAndPassword(String username,String password);--><select id="getUserByUserNameAndPassword" resultType="User">select *from t_userwhere username = #{username}and password = #{password}</select><!-- List<User> getAllUser();--><select id="getAllUser" resultType="User">select * from t_user</select>
</mapper>

(六)测试类

com.atguigu.mybatis.test.MyBatisTest:

public class MyBatisTest {@Testpublic void testInsertUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.insertUser(new User(null, "jack", "789789", 26, "男", "123@qq.com"));System.out.println(row); // 1}@Testpublic void testUpdateUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.updateUser(new User(4, "jack", "777777", 23, "男", "12344@qq.com"));System.out.println(row); // 1}@Testpublic void testDeleteUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.deleteUser(4);System.out.println(row); // 1}@Testpublic void testGetUserById() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserById(3);System.out.println(user);}// User(id=3, username=王五, password=123456, age=25, sex=男, email=123xyz@qq.com)@Testpublic void testGetUserByUserNameAndPassword() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserByUserNameAndPassword("李四", "123456");userList.forEach(System.out::println);}// User(id=2, username=李四, password=123456, age=20, sex=女, email=abc123@163.com)@Testpublic void testGetAllUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getAllUser();userList.forEach(System.out::println);}/*** User(id=1, username=张三, password=123456, age=19, sex=男, email=abc456@163.com)* User(id=2, username=李四, password=123456, age=20, sex=女, email=abc123@163.com)* User(id=3, username=王五, password=123456, age=25, sex=男, email=123xyz@qq.com)*/
}

相关文章:

MyBatis入门——基本的增删改查

目录 一、MyBatis简介 二、搭建MyBatis (一)配置依赖 (二)log4j日志功能 (三)数据库配置文件——jdbc.properties (四)创建MyBatis的核心配置文件 (五)使用MyBatisX插件 三、项目其他配置搭建 (一)创建数据库连接工具类 (二)创建表 (三)创建数据库的实体类 (四)Use…...

学习Gentoo系统中二进制软件包和源代码包的概念

Gentoo Linux 是一个以源代码包管理和高度定制化特性著称的Linux发行版。以下是关于Gentoo系统中二进制软件包和源代码包的概念、发展历程以及它们各自的优势&#xff1a; 二进制软件包概念及发展历程&#xff1a; 概念&#xff1a;Gentoo的二进制软件包是指预先编译好的软件包…...

麦肯锡报告 | 未来的经济引擎:解读下一代竞争领域

随着科技和商业的快速发展&#xff0c;一些具有高增长性和高动态性的行业正在悄然崛起&#xff0c;成为推动全球经济发展的新引擎。这些行业被称为“竞争领域”&#xff08;Arenas&#xff09;。据麦肯锡全球研究院&#xff08;MGI&#xff09;的研究&#xff0c;这些领域有望在…...

连接mysql并读取指定表单数据到DataFrame

提问 python 如何连接mysql并读取指定表单数据到DataFrame 解答 要在Python中连接MySQL并读取指定表单数据到DataFrame&#xff0c;你可以使用pandas库结合sqlalchemy引擎或者mysql-connector-python。这里我将展示两种方法的示例代码。 使用pandas和sqlalchemy 确保安装了…...

从入门到精通数据结构----四大排序(上)

目录 首言&#xff1a; 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾&#xff1a; 首言&#xff1a; 本篇文章主要介绍常见的四大排序&#xff1a;交换排序、选择排序、插入排序、归并排…...

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时&#xff0c;训练损失异常大 问题分析 问题 training_loss异常大&#xff0c;在二分类损失中&#xff0c;收敛在1~2附近&#xff0c;而eval_loss却正常&#xff08;小于0.5&#xff09; 分析 参考&#xff1a; Bug in gradient accumulation…...

文献阅读与笔记整理技巧

文献阅读 1.原因 &#xff08;1&#xff09;了解背景知识&#xff08;硕博学位论文&#xff0c;大牛文献综述&#xff09; &#xff08;2&#xff09;把握研究方向&#xff08;行业最新论文&#xff0c;大牛文献综述&#xff09; &#xff08;3&#xff09;学习设计思路&am…...

Python Flask中集成SQLAlchemy和Flask-Login

在现代Web应用开发中,数据库和用户认证是两个非常重要的功能。Flask作为一个轻量级的Python Web框架,本身只提供了最基本的Web功能。但是,它可以通过集成各种优秀的扩展库来增强功能。本文将介绍如何在Flask应用中集成SQLAlchemy(数据库)和Flask-Login(用户认证),并提供一个完整…...

esp32 JTAG 串口 bootload升级

文章目录 一、前言二、了解 JTAG 和 Ymodem 的工作原理2.1 环境准备2.2 Ymodem 协议工作原理2.3 固件分区准备 三、关键升级函数五、使用shell 测试 一、前言 如果使用 JTAG 串口 结合 Ymodem 协议 实现 ESP32 的固件升级&#xff0c;整体逻辑将围绕通过串口传输固件文件并将其…...

【linux】(17)压缩和解压

tar tar 是一个用于创建、维护、修改和解压缩存档文件的 Linux 命令。tar 常常用于备份文件或者将多个文件打包成一个文件以便于传输或存储。以下是 tar 命令的详细教程&#xff0c;包括常用选项和示例&#xff1a; 基本语法 tar [选项] [文件或目录]常用选项 -c&#xff1…...

摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现

随着科技的不断进步&#xff0c;摄像机视频分析软件的发展已经为我们的生活带来了许多便捷。其中&#xff0c;LiteAIServer视频智能分析平台的玩手机打电话检测算法技术尤为突出&#xff0c;它利用先进的图像处理和人工智能技术&#xff0c;能够自动识别并监控视频中的玩手机或…...

springboot购物推荐网站的设计与实现(代码+数据库+LW)

摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了东大每日推购物推荐网站的开发全过程。通过分析企业对于东大每日推购物推荐网站的需求&#xff0c;创建了一个计算机管理东大每日推购物推荐网站的方案。文章介…...

【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 最近用Unity3D的HDRP&#xff08;高清渲染管…...

QT基础 UI编辑器 QT5.12.3环境 C++环境

一、UI编辑器 注意&#xff1a;创建工程时&#xff0c;要勾上界面按钮 UI设计师界面的模块 UI编辑器会在项目构建目录中自动生成一个ui_xxx.h&#xff08;构建一次才能生成代码&#xff09;&#xff0c;来表示ui编辑器界面的代码&#xff0c;属于自动生成的&#xff0c;一定不…...

计算机网络socket编程(5)_TCP网络编程实现echo_server

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(5)_TCP网络编程实现echo_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交…...

go语言闭包捕获的是变量的引用而不是变量的值

在 Go 语言中&#xff0c;闭包捕获的是变量的引用&#xff0c;而不是变量的值。这意味着闭包会引用循环变量或外部变量的实际内存位置&#xff0c;而不是在闭包创建时复制变量的值。这种行为有时会导致意外的结果&#xff0c;尤其是在循环中创建多个闭包时。 闭包捕获变量的引…...

周期法频率计的设计

目录 周期法频率计 分析&#xff1a; 设计过程&#xff1a; 周期法频率计 对于低频信号&#xff0c;应用周期法进行测频。周期法测频的基本原理是&#xff1a;应用标准频率信号统计被测信号两个相邻脉冲之间的脉冲数&#xff0c;然后通过脉冲数计算出被测信号的周期&#xff…...

【Linux】drop cache与reclaim的区别

前言 在 Linux 内核中&#xff0c;drop cache和reclaim是两种不同的内存管理机制&#xff0c;它们的目的和实现方式有所不同。 Drop Cache 定义 drop cache 是一种手动操作&#xff0c;允许用户通过向 /proc/sys/vm/drop_caches 写入特定的值&#xff0c;直接清除系统中的缓…...

【Linux课程学习】:命令行参数,环境变量

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 命令行参数&#xff1a; 用命令行参数实现不同…...

HTB:WifineticTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放端口进行脚本、服务扫描 使用curl访问靶机8080端口 使用浏览器直接访问/login路径 漏洞利用 使用searchsploit搜索该WebAPP漏洞 Payload USER_FLAG&#xff1a;bb…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...