【JavaEE进阶】 MyBatis使用XML实现增删改查

news2024/12/28 22:43:07

文章目录

  • 🎍前言
  • 🍀配置连接字符串和MyBatis
  • 🍃写持久层代码
    • 🚩添加mapper接⼝
    • 🚩添加UserInfoXMLMapper.xml
    • 🚩单元测试
  • 🌴增(Insert)
    • 🚩返回⾃增id
  • 🎋删(Delete)
  • 🎄改(Update)
  • 🌲查(Select)
    • 🚩结果映射
  • ⭕总结

🎍前言

准备数据库与相应表,映射对象请参考博主在【JavaEE进阶】MyBatis⼊⻔ 所使用的

原始表数据如下:
在这里插入图片描述

MyBatis XML的⽅式需要以下两步:

  1. 配置数据库连接字符串和MyBatis

  2. 写持久层代码

🍀配置连接字符串和MyBatis

application.yml⽂件配置内容如下:

 spring:
 datasource:
  url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
   characterEncoding=utf8&useSSL=false
  username: root
  password: 666666
  driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
 configuration: # 配置打印 MyBatis⽇志
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mapper-locations: classpath:mapper/**Mapper.xml

🍃写持久层代码

持久层代码分两部分

  1. ⽅法定义Interface

  2. ⽅法实现:XXX.xml
    在这里插入图片描述

🚩添加mapper接⼝

数据持久层的接⼝定义:

@Mapper
public interface UserInfoXMlMapper {
    
}

🚩添加UserInfoXMLMapper.xml

数据持久成的实现,MyBatis的固定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="org.example.mybatis.mapper.UserInfoXMlMapper">

</mapper>

在这里插入图片描述
创建UserInfoXMLMapper.xml,路径参考yml中的配置
在这里插入图片描述

🚩单元测试

单元测试类创建如下:
在这里插入图片描述
测试类初始代码如下:

@SpringBootTest
class UserInfoXMlMapperTest {
    @Autowired
    private UserInfoXMlMapper userInfoXMlMapper;


}

接下来我们就可以进行实现增删改查了。我们下来依旧采用单元测试的方式进行测试,有不会单元测试的小伙伴,可以看博主上面关于MyBates入门的链接,里面有介绍

🌴增(Insert)

UserInfoXMlMapper接⼝:

Integer insert(UserInfo userInfo);

UserInfoXMLMapper.xml实现如下:

<insert id="insert">
    insert into userinfo (username, `password`, age, gender, phone)
     values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>

测试单元代码如下:

@Test
void insert() {
    UserInfo userInfo = new UserInfo();
    userInfo.setUsername("陈平安");
    userInfo.setPassword("123456");
    userInfo.setAge(18);
    userInfo.setGender(1);
    userInfo.setPhone("123456789");
    int cound = userInfoXMlMapper.insert(userInfo);
    System.out.println("改变数据行数"+cound);
}

启动测试结果如下:
在这里插入图片描述
查询数据库如下:
在这里插入图片描述
已成功添加

🚩返回⾃增id

接⼝定义不变,UserInfoXMLMapper.xml实现设置useGeneratedKeys和keyProperty属性

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
    insert into userinfo (username, `password`, age, gender, phone)
     values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>

进行单元测试:

@Test
void insert() {
    UserInfo userInfo = new UserInfo();
    userInfo.setUsername("陈平安");
    userInfo.setPassword("123456");
    userInfo.setAge(18);
    userInfo.setGender(1);
    userInfo.setPhone("123456789");
    int cound = userInfoXMlMapper.insert(userInfo);
    System.out.println("改变数据行数"+cound+"自增id:"+userInfo.getId());
}

启动测试结果如下:

在这里插入图片描述

🎋删(Delete)

UserInfoXMlMapper接⼝:

Integer delete(Integer id);

UserInfoXMLMapper.xml实现如下:

</insert>
<delete id="delete">
    delete from userinfo where id = #{id}
</delete>

测试单元代码如下:

@Test
void delete() {
    int count = userInfoXMlMapper.delete(1);
    System.out.println("改变行数:" + count);
}

启动元测试代码如下:

在这里插入图片描述
在这里插入图片描述

🎄改(Update)

UserInfoXMlMapper接口如下:

Integer update(UserInfo userInfo);

UserInfoXMLMapper.xml实现代码如下:

<update id="update">
    update userinfo set username=#{username} where id=#{id}
</update>

测试单元代码如下:

@Test
void update() {
    UserInfo userInfo = new UserInfo();
    userInfo.setId(8);
    userInfo.setUsername("宁姚");
    int count = userInfoXMlMapper.update(userInfo);
    System.out.println("改变行数:"+count);
}

测试单元代码启动:
在这里插入图片描述
在这里插入图片描述
修改成功

🌲查(Select)

查询所有内容

UserInfoXMlMapper接口代码如下:

List<UserInfo> queryAllUser();

UserInfoXMLMapper.xml代码如下:

<select id="queryAllUser" resultType="org.example.mybatis.model.UserInfo">
    select * from userinfo
</select>
  • resultType :是返回的数据类型,也就是开头我们定义的实体类 在这里插入图片描述

启动测试类如下:
在这里插入图片描述

我们上面在进行查询所有内容时,结果显⽰:deleteFlag,createTime,updateTime没有进⾏赋值

这是由于数据库与java命名规则不同,数据库的蛇形将转换成驼峰,所以无法识别。

解决方法有以下三种:

  1. 起别名
  2. 结果映射
  3. 开启驼峰命名

关于第一种与第三种方法,与使用注解一摸一样,所以博主这里不做讲解,大家可以参考博主写的 【JavaEE进阶】 MyBatis使用注解实现增删改查 里面的解决方法。

🚩结果映射

我们只需要使用下列方式提前声明
在这里插入图片描述

在使用的时候我们只需要,引入resultMap="BaseMap"即可

<select id="queryAllUser" resultMap="BaseMap">
    select * from userinfo
</select>

⭕总结

关于《【JavaEE进阶】 MyBatis使用XML实现增删改查》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

图书管理系统-Python

相关代码&#xff1a; # Time: 2024/1/23 16:16 # Author: 马龙强 # File: 图书管理系统.py # software: PyCharm class Book():def __init__(self,name,auther,status,bookindex):self.name nameself.auther autherself.status statusself.bookindex bookindexdef __str…

AI-数学-高中-8-函数奇偶性

原作者视频&#xff1a;函数】6函数奇偶性&#xff08;易-中档&#xff09;_哔哩哔哩_bilibili 示例&#xff1a; 已知奇偶性求解析式&#xff1a; 奇偶、单调函数综合示例&#xff1a;

【C++】c++入门,认识c++版本的Hello world!

Hello,everybody!在c语言&#xff0c;数据结构初阶学完之后&#xff0c;咱们就要开始c的学习了。关于c的语法&#xff0c;有很多是为了弥补c语言的不足。在咱们学习c的过程中&#xff0c;随着你对c语法掌握的越来越熟练。我相信你会逐渐爱上c。那我们直接进入正题。 1.c兼容c …

Beego之Beego MVC架构介绍

1、beego MVC架构介绍 beego 是一个典型的 MVC 框架&#xff0c;它的整个执行逻辑如下图所示&#xff1a; 通过文字来描述如下&#xff1a; 1、在监听的端口接收数据&#xff0c;默认监听在 8080 端口。 2、用户请求到达 8080 端口之后进入 beego 的处理逻辑。 3、初始化 C…

VS Code + Python + Selenium 自动化测试基础

五星上将麦克阿瑟曾经说过“不会写自动化测试&#xff0c;不是好开发“ 一、让我们来讲一个故事 今天和女朋友吵架了&#xff0c;&#xff08;假设你有女朋友&#xff09;。 今晚又是一个人睡沙发&#xff0c;这天晚上&#xff0c;你躺在沙发上&#xff0c;夜不能寐 因为&a…

openai assistants api接入微信机器人,实现类GPTs功能

chatgpt网址:https://chat.xutongbao.top 比普通gpt多了代码解释器功能&#xff0c;和上传训练数据文件的功能&#xff0c;这两个功能就是GPTs拥有的&#xff0c;而普通gpt没有拥有的

IaC基础设施即代码:Terraform 连接 tencentcloud COS 实现多资源管理

目录 一、实验 1.环境 2.Terraform 连接 tencentcloud 腾讯云COS 3.申请VPC专有网络资源 4.申请安全组资源 5.申请CVM资源 6.申请CLB资源 7.申请DNS资源 8.销毁资源 二、问题 1. Terraform申请安全组资源失败 2.Terraform验证云主机资源报错 3. A记录和CNAME的区别 …

RabbitMQ系列之入门级

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《RabbitMQ系列之入门级》。&#x1f3af;&#x…

多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GWO-TCN-Multihead-Attention灰狼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效…

Universal Approximation Capabilities of Mixture of Weibulls (混合韦布尔分布的万能近似)

找了好久都没有找到混合韦布尔分布是否有万能近似性质&#xff0c;下面这个算是一点线索&#xff0c;不过看不太懂。 回答1&#xff1a;Ultimately this sounds tautological: just define “well-behaved” as any density that can be approximated, according to some speci…

uniapp+vue3+ts --微信小程序tab导航可以上下滚动选中选项组件代码

uniappvue3ts --微信小程序tab导航可以上下滚动选中选项组件代码 废话不多说&#xff0c;直接上代码。 组件代码&#xff1a; <template><view class"scroll-tabs-container"><view class"radiusz bg-white pt-[10rpx] z-[999]" :class&…

【Flutter 面试题】Flutter 是什么?它与其他移动开发框架有什么不同?

文章目录 写在前面Flutter是什么&#xff1f;定义和起源核心设计思想架构组成总结 Flutter与其他移动开发框架的差异1. 跨平台性能2. Dart语言的全面优势3. 热重载功能的优化体验4. 丰富的组件和库的生态系统5. UI一致性和用户体验总结 写在前面 &#x1f44f;&#x1f3fb; 正…

幻兽帕鲁4核16G配置推荐价格表阿里云和腾讯云

阿里云幻兽帕鲁服务器Palworld服务器推荐4核16G配置&#xff0c;可以选择通用型g7实例或通用算力型u1实例&#xff0c;ECS通用型g7实例4核16G配置价格是502.32元一个月&#xff0c;算力型u1实例4核16G是432.0元/月&#xff0c;经济型e实例是共享型云服务器&#xff0c;价格是32…

Qt配置OpenCV

首先安装好Qt Createor&#xff0c;CMake&#xff0c;OpenCV,我本次使用的是Qt6.3.4和OpenCV4.6.0 Qt Creator清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qtcreator/OpenCV官网下载: https://opencv.org/releases/ 一. 编译OpenCV 首先使用Qt C…

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台&#xff0c;在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因&#xff0c;调用树展示帮助你理解程序&#xff0c;支持 Go、Python、Ruby 语言。 Pyroscope 可以…

Linux RTC 子系统

rtc 一般负责系统关机后计时、闹钟等&#xff0c;Linux 内核提供了一个 rtc 子系统&#xff0c;来支持所有的 rtc 设备。 rtc 设备本质上是一个字符设备&#xff0c;rtc 子系统在字符设备的基础上抽象与硬件无关的部分&#xff0c;并在这个基础上拓展 sysfs 和 proc 文件系统下…

纯前端实现上一条下一条切换,并实现跨页切换上一条下一条

1.开发遇到了新的需求&#xff1a;再进入到视频播放界面&#xff0c;需要支持可以点击上一条下一条按钮&#xff0c;实现数据切换的功能 2.功能开发的理解 需要考虑到以上的需求&#xff0c; 1.由于视频的入口不一致&#xff0c;要根据入口的不同&#xff0c;实现不同的上一条…

Vue 的 事件修饰符and按键修饰符

1、事件修饰符概览 修饰符说明 .prevent阻止默认事件 .stop阻止冒泡.once事件只触发一次 .capture 添加事件侦听器时使用事件捕获模式.self只有点击当前元素本身时才会触发回调.passive事件的默认行为立即执行&#xff0c;无需等待事件回调执行完毕(不常用).native 将vue组件…

Qt 拖拽事件示例

一、引子 拖拽这个动作,在桌面应用程序中是非常实用和具有很友好的交互体验的。我们常见的譬如有,将文件拖拽到某个窗口打开,或者拖拽文件到指定位置上传;在绘图软件中,选中某个模板、并拖拽到画布上,画布上变回绘制该模板的图像… 诸如此类,数不胜数。 那么,在Qt中我…

学习笔记-李沐动手学深度学习(一)(01-07,概述、数据操作、tensor操作、数学基础、自动求导)

个人随笔 第三列是 jupyter记事本 官方github上啥都有&#xff08;代码、jupyter记事本、胶片&#xff09; https://github.com/d2l-ai 多体会 【梯度指向的是值变化最大的方向】 符号 维度 &#xff08;弹幕说&#xff09;2&#xff0c;3&#xff0c;4越后面维度越低 4…