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

文章目录

  • 🎍前言
  • 🍀配置连接字符串和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=falseusername: rootpassword: 666666driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration: # 配置打印 MyBatis⽇志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-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 {@Autowiredprivate 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.mzph.cn/news/644542.shtml

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

相关文章

openssl3.2/test/certs - 027 - server intermediate ca: sca-cert

文章目录 openssl3.2/test/certs - 027 - server intermediate ca: sca-cert概述笔记END openssl3.2/test/certs - 027 - server intermediate ca: sca-cert 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_027.txt // \note open…

【Vue3】组件通信

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。 1. props 若 父传子&#xff1a;属性值是非函数。若 子传父&…

泡泡玛特旗下IP亮相2024米兰时装周 LABUBU等化身时尚观察员​

2024年1月14日&#xff0c;在意大利米兰时装周上&#xff0c;泡泡玛特旗下IP THE MONSTERS成员LABUBU、ZIMOMO惊艳亮相PRONOUNCE珀琅汐2024秋冬大秀现场&#xff0c;作为时尚观察员的LABUBU和ZIMOMO以其独特的潮玩形象打动了顶级时尚圈。 据了解&#xff0c;泡泡玛特和PRONOUNC…

论文素材:PSO算法介绍

简介&#xff1a; PSO&#xff08;Particle Swarm Optimization&#xff09;是一种基于群体智能的优化算法&#xff0c;灵感来源于鸟群觅食行为。PSO通过模拟鸟群中个体之间的协作和信息共享&#xff0c;寻找问题的最优解。 PSO算法的基本思想是通过模拟一群粒子在解空间中搜索…

ubuntu nginx+rtmp配置及简单测试

1.安装nginx和nginx-rtmp-module wget http://nginx.org/download/nginx-1.4.0.tar.gz git clone https://github.com/arut/nginx-rtmp-module.git./configure --add-module../nginx-rtmp-module-master make && sudo make install 启动&#xff1a; sudo /usr/loca…

Qt简介及安装

“这不属于我&#xff0c;因为沉默背后也有冲动” 在互联网当中&#xff0c;最关注的几个比较核心的岗位&#xff1a; &#x1f6f6; 后端开发 &#x1f6f6; 前端开发 &#x1f6f6; 算法工程师 &#x1f6f6; 游戏开发 像后端开发中有认识…

VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

在使用VUEVis.js做拓扑图&#xff0c;利用鼠标悬浮放在图标展示设备信息时&#xff0c;发现鼠标一放在图标上面时&#xff0c;标题表会提前在放置的元素下显示&#xff0c;鼠标再放到图标上去元素才会隐藏变成悬浮状态 解决方法&#xff1a; 添加一个div元素&#xff0c;设置v…

linux修改文件夹下所有文件的权限(常用)

1、 修改文件夹下所有文件的权限 # filename为要修改的文件夹名字。-R应该是表示递归修改filename文件夹下所有文件的权限 sudo chmod -R 777 filename2、linux修改单个文件夹权限 sudo chmod 600 &#xff08;只有所有者有读和写的权限&#xff09; sudo chmod 644 &#…

Java 设计者模式以及与Spring关系(七) 命令和迭代器模式

简介: 本文是个系列一次会出两个设计者模式作用&#xff0c;如果有关联就三个&#xff0c;除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道设计者模式有3类23种设计模式&#xff0c;标红是特别重要的设计者模式建议都会&#xff0c;而且熟读于心&#…

Java中的代理模式(一)

大家好&#x1f44b;&#xff0c;我是极客涛&#x1f60e;&#xff0c;今天我们聊一聊java中的代理模式&#xff0c;话不多说&#xff0c;还是老思路&#xff0c;什么是代理模式&#xff0c;为什么要有代理模式&#xff0c;如何实现代理模式 代理模式 在说java中的代理模式之前…

什么是EJB?

什么是EJB&#xff1f; EJB (Enterprise JavaBeans) 是一种用于开发企业级应用程序的 Java 服务器端组件模型。它是一种分布式对象架构&#xff0c;用于构建可移植、可伸缩和可事务处理的企业级应用。 EJB 提供了一种将业务逻辑组件化、模块化的方式&#xff0c;使开发人员能够…

李跳跳派大星v2.2.0软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; 李跳跳派大星v2.2.0最新安卓版是一款功能强大的Guang告屏蔽软件。它为用户提供了一种快速、便捷的方式来去除各种软件中的开屏Guang告&#xff0c;让…

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

Spring Security 之摘要认证

摘要认证 注意: 在现代应用程序中不应该使用摘要认证,因为它不被认为是安全的。最明显的问题是你必须以明文或加密或 MD5 格式存储密码。所有这些存储格式都被认为是不安全的。相反,你应该使用单向自适应密码哈希(如 bCrypt、PBKDF2、SCrypt 等)来存储凭据,而这是摘要认…

STL第一讲

一、认识headers、版本、重要资源 1. C Standard Library和Standard Template Library 前者&#xff1a;c标准库&#xff1b;后者直译为“标准模板库” 区别: C标准库&#xff1a;是c编译器提供的自带的头文件(不带.h后缀)新版兼容C的头文件的形式cxxxx&#xff1b;旧版的xxx…

简单Web UI 自动化测试框架 seldom

pyse 更名为 seldom WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架&#xff0c;快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方…

ABAP ME28 ME2M 增加展示字段增强

文章目录 前言 一、获取展示显示结构 二、显示结构新增客制化字段 三、增强点: 四、效果如下

前端使用three.js来绘制三维图形

最近项目中在地图中显示三维河床的功能&#xff0c;最终实现是用three.js来实现绘制的。这里记录一下整体的调用过程。 一&#xff1a;安装 Three.js Three.js 是一个强大的 JavaScript 库&#xff0c;用于在网页上创建和显示 3D 图形。如果你在使用一个前端框架&#xff0c;…

100GB Mellanox InfiniBand 网卡虚拟化技术调研

调研目的 验证 Mellanox InfiniBand 100GB网卡和SR650 Server能兼容 ThinkSystem SR650 Power On (Booting OS or in undetected OS) Machine Type/Model7X05CTO1WW 验证 SR-IOV虚拟话技术在BIOS/Firmware/Kernel/QEMU/Libvirt能被支持 4.18.0-305.19.1.el8_4.x86_64 验证…

Web开发5:第三方扩展与部署

在Web开发中&#xff0c;第三方扩展和部署是提高开发效率和功能扩展的重要手段。第三方扩展可以帮助我们快速集成常用功能和工具&#xff0c;而部署则是将我们的应用程序发布到生产环境中。本文将介绍第三方扩展的重要性、如何选择和使用常见的第三方扩展&#xff0c;并讨论应用…