Mybatis 插入、修改、删除

前面几篇我们介绍了使用Mybatis查询数据,并且也了解了如何在Mybatis中使用JDK的日志系统打印日志;本篇我们继续介绍如何使用Mybatis完成数据的插入、修改和删除。

如果您对查询数据和Mybatis集成JDK日志系统不太了解,建议您先进行了解后再阅读本篇,可以参考:

Mybatis查询数据icon-default.png?t=N7T8https://blog.csdn.net/m1729339749/article/details/132469672Mybatis 日志(JDK Log)icon-default.png?t=N7T8https://blog.csdn.net/m1729339749/article/details/132565362

一、数据准备

这里我们直接使用脚本初始化数据库中的数据

-- 如果数据库不存在则创建数据库
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切换数据库
USE demo;
-- 创建用户表
CREATE TABLE IF NOT EXISTS T_USER(ID INT PRIMARY KEY,USERNAME VARCHAR(32) NOT NULL,AGE INT NOT NULL 
);
-- 插入用户数据
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, '张三', 20),(2, '李四', 22),(3, '王五', 24);

创建了一个名称为demo的数据库;并在库里创建了名称为T_USER的用户表并向表中插入了数据

二、环境搭建

1、创建实体类

在cn.horse.demo下创建UserInfo类

UserInfo类:

package cn.horse.demo;public class UserInfo {private Integer id;private String name;private Integer age;public void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append('{');stringBuilder.append("id: " + this.id);stringBuilder.append(", ");stringBuilder.append("name: " + this.name);stringBuilder.append(", ");stringBuilder.append("age: " + this.age);stringBuilder.append('}');return stringBuilder.toString();}
}

2、Mapper配置文件

在resources的目录下新建UserInfoMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.horse.demo.UserInfoMapper"><select id="findById" resultType="cn.horse.demo.UserInfo">SELECTID,USERNAME name,AGEFROM T_USERWHERE ID = #{id}</select>
</mapper>

3、引入配置文件

在resources下新建mybatis-config.xml配置文件,并引入UserInfoMapper.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><settings><setting name="logImpl" value="JDK_LOGGING"/></settings><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="org.gjt.mm.mysql.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="horse"/></dataSource></environment></environments><mappers><mapper resource="demo/UserInfoMapper.xml" /></mappers>
</configuration>

4、会话工具类

在cn.horse.demo包下新建SqlSessionUtils工具类

package cn.horse.demo;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.Objects;public class SqlSessionUtils {private static final SqlSessionFactory sqlSessionFactory;static {// 读取mybatis配置文件InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");// 根据配置创建SqlSession工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}/*** 开启会话* @return*/public static SqlSession openSession() {return sqlSessionFactory.openSession();}/*** 关闭会话* @param sqlSession*/public static void closeSession(SqlSession sqlSession) {if(Objects.nonNull(sqlSession)) {sqlSession.close();}}
}

5、JDK 日志系统配置

在resources的目录下新建logging.properties配置文件

handlers=java.util.logging.ConsoleHandler
.level=INFOcn.horse.demo.UserInfoMapper.level=FINER
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tT.%1$tL %4$s %3$s - %5$s%6$s%n

在cn.horse.demo下创建JdkLogConfig类

JdkLogConfig类:

package cn.horse.demo;import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;public class JdkLogConfig {public JdkLogConfig() {try {InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("logging.properties");LogManager.getLogManager().readConfiguration(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}
}

6、启动程序

package cn.horse.demo;import org.apache.ibatis.session.SqlSession;import java.util.List;public class Main {public static void main(String[] args) {// 配置日志文件System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");findById(2);}private static void findById(Integer id) {SqlSession sqlSession = null;try {sqlSession = SqlSessionUtils.openSession();UserInfo userInfo = sqlSession.selectOne("cn.horse.demo.UserInfoMapper.findById", id);System.out.println(userInfo);} finally {SqlSessionUtils.closeSession(sqlSession);}}
}

测试:

查询id为2的用户信息

执行后的结果如下:

三、插入数据

在UserInfoMapper.xml配置文件中新增insert标签,并写入insert语句:

<insert id="insert">INSERT INTO T_USER(ID,USERNAME,AGE)VALUES(#{id}, #{name}, #{age})
</insert>

insert标签:id代表的是标签的编号,标签的内容是insert语句,insert语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建insert方法:

private static void insert(UserInfo userInfo) {SqlSession sqlSession = null;try {sqlSession = SqlSessionUtils.openSession();sqlSession.insert("cn.horse.demo.UserInfoMapper.insert", userInfo);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}

这里插入数据,我们调用了SqlSession对象的insert方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用insert方法插入一条数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");UserInfo userInfo = new UserInfo();
userInfo.setId(5);
userInfo.setName("王五");
userInfo.setAge(5);
// 插入
insert(userInfo);
findById(5);

执行后的结果如下:

从执行的日志中可以看到insert语句,以及传入的参数,执行的结果(受影响的行数)

插入结束后,我们使用id进行查询,发现查询出来了新添加的数据

四、修改数据

在UserInfoMapper.xml配置文件中新增update标签,并写入update语句:

<update id="update">UPDATE T_USERSET USERNAME = #{name},AGE = #{age}WHERE ID = #{id}
</update>

update标签:id代表的是标签的编号,标签的内容是update语句,update语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建update方法:

private static void update(UserInfo userInfo) {SqlSession sqlSession = null;try {sqlSession = SqlSessionUtils.openSession();sqlSession.update("cn.horse.demo.UserInfoMapper.update", userInfo);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}

这里更新数据,我们调用了SqlSession对象的update方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用update方法更新数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");UserInfo userInfo = new UserInfo();
userInfo.setId(5);
userInfo.setName("王五2");
userInfo.setAge(50);
// 更新
update(userInfo);
findById(5);

执行后的结果如下:

从执行的日志中可以看到update语句,以及传入的参数,执行的结果(受影响的行数)

更新结束后,我们使用id进行查询,发现查询出来了修改后的数据

五、删除数据

在UserInfoMapper.xml配置文件中新增delete标签,并写入delete语句:

<delete id="delete">DELETE FROM T_USERWHERE ID = #{id}
</delete>

delete标签:id代表的是标签的编号,标签的内容是delete语句,delete语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建delete方法:

private static void delete(Integer id) {SqlSession sqlSession = null;try {sqlSession = SqlSessionUtils.openSession();sqlSession.delete("cn.horse.demo.UserInfoMapper.delete", id);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}

这里删除数据,我们调用了SqlSession对象的delete方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用delete方法删除数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");// 删除
delete(5);
findById(5);

执行后的结果如下:

从执行的日志中可以看到delete语句,以及传入的参数,执行的结果(受影响的行数)

删除结束后,我们使用id进行查询,发现已经查询不到数据了

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

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

相关文章

前端 -- 基础 常用标签 ( 标题标签、段落标签、换行标签 )

标题标签 <h1> - <h6> HTML 提供了 6 个等级的网页标题&#xff0c;即 <h1> - <h6> <h1> 我是一级标题 </h1> 单词 head 的缩写&#xff0c;意味 头部&#xff0c;标题 。 上示&#xff0c;即 你在 <h1> </h1> 两个…

ARP欺骗

ARP欺骗定义 ARP欺骗&#xff08;英语&#xff1a;ARP spoofing&#xff09;&#xff0c;又称ARP毒化&#xff08;ARP poisoning&#xff0c;网络上多译为ARP病毒&#xff09;或ARP攻击&#xff0c;是针对以太网地址解析协议&#xff08;ARP&#xff09;的一种攻击技术&#x…

【RabbitMQ】RabbitMQ 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。

问题描述 RabbitMQ 服务无法启动。 rabbitmq-service.bat startRabbitMQ 服务正在启动 . RabbitMQ 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。原因分析 RabbitMQ和Erlang版本不匹配。 解决方案 查询并安装RabbitMQ版本对应Erlang版本 https://www.rabbitm…

WPF CommunityToolkit.Mvvm Messenger通讯

文章目录 环境WeakReferenceMessenger方法介绍无回调订阅发送Token区分有回调订阅发送 环境 CommunityToolkit.Mvvm Messenger 十月的寒流: 如何使用 CommunityToolkit.Mvvm 中的 Messenger 来进行 ViewModel 之间的通信 WeakReferenceMessenger 我这里只讲简单的弱Messenger…

C语言入门 Day_13 二维数组

目录 前言&#xff1a; 1.字符串 2.创建二维数组 3.使用二维数组 4.易错点 5.思维导图 前言&#xff1a; 我们学习了字符类型char&#xff0c;我们可以用char来表示一个大写或者小写的字母&#xff0c;但真实应用中我们往往使用的是多个字符组成的一个单词或者句子。 …

自步学习的介绍 self paced learning

这方面的研究专家&#xff0c;参考西安交通大学的 孟德宇老师 他最近的研究方向&#xff1a; Fundamental problems in machine learning and computer vision, especially including: Meta-learning Variational bayesian methods on inverse problems Robust and interpret…

【⑰MySQL】 变量 | 循环 | 游标 | 处理程序

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL变量 | 循环 | 游标 | 处理程序的分享✨ 目录 前言1. 变量1.1系统变量1.2 用户变量 2. 定义条件与处理程序2.1 案例分析2.2 定义条件2.3 定义处理程序2.4 案例解决 3. 流程控制3.1 分支结构3.2 循环结构3.3 跳转…

Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

学习目标 理解 S I F T / S U R F SIFT/SURF SIFT/SURF算法的原理&#xff0c;能够使用 S I F T / S U R F SIFT/SURF SIFT/SURF进行关键点的检测 SIFT/SURF算法 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris Harris和 S h i − T o m a s i Shi-Tomasi Shi−Tomasi…

JPA在不写sql的情况下实现模糊查询

本文已收录于专栏 《Java》 目录 背景介绍概念说明单字段模糊匹配&#xff1a;多字段模糊匹配&#xff1a; 实现过程代码实现1.写一个实体类去实现Specification接口&#xff0c;重写toPredicate方法2.定义一个接口去继承JpaRepository接口&#xff0c;并指定返回的类型和参数类…

力扣:86. 分隔链表(Python3)

题目&#xff1a; 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09;…

系统稳定性与高可用保障

一、前言 高并发、高可用、高性能被称为互联网三高架构&#xff0c;这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三 H 中的高可用&#xff0c;也是我们常说的系统稳定性。 > 本篇文章只聊思路&#xff0c;没有太多的深入细节。阅读全…

Chrome 和 Edge 上出现“status_breakpoint”错误解决办法

文章目录 STATUS_BREAKPOINTSTATUS_BREAKPOINT报错解决办法Chrome浏览器 Status_breakpoint 错误修复- 将 Chrome 浏览器更新到最新版本- 卸载不再使用的扩展程序和应用程序- 安装计算机上可用的任何更新&#xff0c;尤其是 Windows 10- 重启你的电脑。 Edge浏览器 Status_brea…