【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.hqwc.cn/news/427446.html

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

相关文章

复现六:大模型评测教程

复现五 LMDeploy 的量化和部署-CSDN博客 随着人工智能技术的快速发展&#xff0c; 大规模预训练自然语言模型成为了研究热点和关注焦点。OpenAI于2018年提出了第一代GPT模型&#xff0c;开辟了自然语言模型生成式预训练的路线。沿着这条路线&#xff0c;随后又陆续发布了GPT-2…

2023春秋杯冬季赛 --- Crypto wp

文章目录 前言Cryptonot_wiener 前言 比赛没打&#xff0c;赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…

怎么才能让抖音跳转微信小程序-数灵通

抖音是一款热门的社交媒体应用&#xff0c;许多用户希望能够通过抖音跳转到微信小程序&#xff0c;以实现更多的引流和推广效果。以下是关于抖音跳转到微信小程序的科普信息&#xff1a; 1.优势和用途&#xff1a;通过抖音跳转到微信小程序可以带来多个优势和用途&#xff1a; …

物流实时数仓——概述与准备工作

目录 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 (三)最终效果 二、关于离线与实时的相关概念 三、实时数仓设计思路 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 Hadoop 3.3.4 Zookeeper 3.7.1 Kafka 3.3.1 Hbase 2.4.11 Redis 6.0.8 Flink 1.17…

可直接将视频转文字的工具,速到快到离谱!

如何将视频转换成文字&#xff0c;推荐大家使用视频提取文案小助手&#xff0c;三秒一键搞定&#xff0c;真的快到离谱​&#xff01; 不少草根博主在做短视频的时候&#xff0c;就有很多人给大家支招让大家先模仿后超越的模式&#xff0c;激起一众爱好短视频的草根博主成为短…

Nat实验详解

如图所示 r1 左边属于内部网络&#xff0c;r2 右边属于外部网络&#xff0c;通过Nat技术和acl访问控制列表来实现全网可达。 1.合理规划ip范围 2.然后写acl访问控制列表&#xff0c;在靠近源ip的接口上进行配置&#xff0c;如图所示r1的g0/0/1口上进行配置 允许所有192.168.1.…

机器学习 | 掌握Matplotlib的可视化图表操作

Matplotlib是python的一个数据可视化库&#xff0c;用于创建静态、动态和交互式图表。它可以制作多种类型的图表&#xff0c;如折线图、散点图、柱状图、饼图、直方图、3D 图形等。以渐进、交互式方式实现数据可视化。当然博主也不能面面俱到的讲解到所有内容&#xff0c;详情请…

Revit二次开发 设置材质

设置此处材质&#xff0c;需要在材质浏览器中创建材质&#xff0c;根据材质名字设置此材质。 代码如下&#xff1a; Material material new FilteredElementCollector(doc).OfClass(typeof(Material)).FirstOrDefault(x > x.Name "窗框") as Material; Element…

养猫家庭空气质量差?高质量猫用空气净化器品牌测评推荐

作为一名有着7年铲屎经验的铲屎官&#xff0c;我深知换毛季节给我们带来的困扰&#xff1a;猫毛。虽然猫毛本身并不具有危害性&#xff0c;但是猫毛上的皮屑、细菌和虫螨等微生物可能对我们的健康造成重大影响。尤其是对于老人、小孩、孕妇以及免疫系统较弱的人来说&#xff0c…

最新国内GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

常见问答解析:人工智能在智能时代的潜力与挑战

在智能时代&#xff0c;人工智能&#xff08;AI&#xff09;被视为推动社会和科技进步的关键引擎。让我们通过问答的形式&#xff0c;深入探讨人工智能的潜力与面临的挑战。 问&#xff1a;人工智能在当前社会中扮演什么角色&#xff1f; 答&#xff1a;人工智能已成为现代科技…

消息中间件之RocketMQ(二)

RocketMQ支持的消息类型 了解之前&#xff0c;首先要熟悉RocketMQ中的组件架构设计 1.顺序消息 将同一个订单(即具有相同的orderId)的消息按状态先后顺序消费的&#xff0c;所以消息生产者调用send方法发送时需要传入MessageQueueSelector接口的,实现类&#xff0c;将order…