java-Spring-(MyBatis框架-xml管理)

目录

前置条件

xml与注解比较

1.1 xml定义

1.2 和SQL注解比较

   建包准备

插入数据

​编辑 更新数据

 删除数据

查询数据

查看单字段查询


🏷💣前置条件

创建一个spring boot 初始化的项目

🏷💣xml与注解比较

1.1 xml定义

XML是一种可扩展性语言,用户可以自己定义标签,用来描述特定类型的数据;

XML的语法严格,每个标签都必须有一个结束标签,标签的嵌套关系也必须合法;

1.2 和SQL注解比较
  • xml配置SQL,可以将SQL语句和JAVA代码分离开

  • xml配置SQL,支持动态SQL语句

  • xml配置SQL,支持SQL语句的复用

xml是属于外部文件属性,所以需要在application.properties中添加配置

这边新建mappers的包用于装xml文件

这边需要引入一个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">
<mapper namespace="指定的@Mapper映射的接口的具体路径"></mapper>

 

   💣建包准备

  一个实体类包  这边是 pojo.entity包

 

实体类的属性
数据库的字段名User实体类对应的属性
idprivate Long id
usernameprivate String username
passwordprivate String password
nicknameprivate String nickname
createdprivate Date created

一个@Mapper映射接口的包 mapper包

一个VO类包(返回数据库查询字段值的属性)   pojo.vo包

   📢流程 

  定义接口方法  ->编写xml 文档->测试

  我们先写一个UserMapper映射的接口 

 1.注意必须加@Mapper否则会找不到对应的bean对象

 2.这时候不需要加相关的sql注解

package cn.tedu.demoforcsdn.mappers;import cn.tedu.demoforcsdn.pojo.entity.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {//插入数据int  insertUser(User user);
}

编写xml文档

复制完整路径 快捷键是 Ctrl+Alt+Shift+c 

namespae 是@Mapper接口的具体路径 

 id 是接口方法的名称 

  sql 语句 

xml 语法格式
语法格式操作的意义
<insert id="接口方法">INSERT INTO 表 字段名 Values 值</insert>插入数据

<update id="接口方法">UPDATE 表名 <set><if test="判断条件">设置语句</if></set> 

WHERE 字段名=值</update>

更新数据
<delete id="接口方法"> DELETE FROM 表名 WHERE 字段名=值</delete>删除数据

<select id ="接口方法" resultType="返回的封装实体类VO">SELECT 字段名 FROM 表名

 (看情况) WHERE 字段名=值</select>

查询数据

 

✈🚀插入数据

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu.demoforcsdn.mappers.UserMapper"><insert id="insertUser">INSERT INTO  user (username,password,nickname,created) VALUES (#{username},#{password},#{nickname},#{created})</insert></mapper>

   这边在去Test进行测试(上次将mybatis基础知识点讲过测试类测试 写文章-CSDN创作中心)

package cn.tedu.demoforcsdn;import cn.tedu.demoforcsdn.mappers.UserMapper;
import cn.tedu.demoforcsdn.pojo.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;@SpringBootTest
class DemoForCsdnApplicationTests {@Autowiredprivate UserMapper userMapper;@Testvoid contextLoads() {}@Testvoid insertUser(){User user = new User();user.setUsername("赵四");user.setPassword("123456");user.setNickname("老四");user.setCreated(new Date());System.out.println(userMapper.insertUser(user));}

测试结果

数据库结果

✈🚀 更新数据

接口方法

int updateUserByUsername(UserUpdateVO userUpdateVO);

这边我只需要返回 nickname,username,password

这边我定义了一个vo类用于接受数据库的返回值

数据库的字段名userUpdateVo类的属性值
usernameprivate String username
passwordprivate  String password
nicknameprivate String nickname

xml 编写

引入新的概念

<set>  标签

 <set>  标签用于包裹 UPDATE 语句的 SET 部分,并自动处理字段间的逗号分隔。如果在动态生成的 SQL 语句中最后一个 <if> 条件不满足,那么 <set> 标签会自动移除最后一个多余的逗号,这可以避免 SQL 语法错误。

注意处理多字段必须以逗号分割,必须写WHERE

<if> 标签

<if> 标签用于条件判断。它根据 test 属性的值来决定是否包含其内部的 SQL 片段。如果 test 属性的值为 true,则包含该 SQL 片段;如果为 false,则忽略该片段。

<update id="updateUserByUsername">UPDATE  user<set><if test="password!=null">password=#{password},</if><if test="nickname!=null">nickname=#{nickname}</if></set>WHERE username =#{username};</update>

测试

@Testvoid updateUser(){UserUpdateVO userUpdateVO = new UserUpdateVO();userUpdateVO.setUsername("赵四");userUpdateVO.setPassword("abcdf");userUpdateVO.setNickname("扛把子");System.out.println(userMapper.updateUserByUsername(userUpdateVO));}

运行结果

数据库状态

 ✈🚀删除数据

接口方法

 int deleteUserByUsername(String username);

 xml

<delete id="deleteUserByUsername">DELETE FROM user WHERE username=#{username}</delete>

 测试

@Testvoid deleteUserByUsername(){System.out.println(userMapper.deleteUserByUsername("赵四"));}

运行结果

 

✈🚀查询数据

🚏查看单字段查询

接口方法

  UserUpdateVO selectByUsername(String username);

xml

resultType

resultType 的主要作用是将 SQL 查询结果集中的每一行数据映射到指定的 Java 类型对象上。当 MyBatis 执行查询操作并获取到结果集后,它会根据 resultType 指定的类型,自动将结果集中的每一行数据转换(或映射)为相应的 Java 对象。

注意:写<select> sql语句会返回结果集,我们需要接受结果集 常用resultType接受

resultType填写的是结果集,我这边返回的是个封装的数据库返回的实体类,其包括    password,nickname,username

<select id="selectByUsername" resultType="cn.tedu.demoforcsdn.pojo.vo.UserUpdateVO">SELECT password,nickname,username FROM user WHERE username=#{username}</select>

测试

 @Testvoid  selectUserByUsername(){System.out.println(userMapper.selectByUsername("张三"));}

 运行结果

 🚏多字段查询待补充

 

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

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

相关文章

VBA技术资料MF145:清空回收站

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

ElasticSearch语句中must,must_not,should 组合关系

前言&#xff1a; 在实际应用中&#xff0c;发现当bool中同时使用must和should 没有达到想要的想过&#xff0c;而是只展示了must中的命中数据&#xff0c;所以打算探究一下bool中 三种逻辑关系的组合。 上述查询语句只展示了must的结果&#xff0c;没有should中的结果&#…

Faust勒索病毒:了解变种faust,以及如何保护您的数据

导言&#xff1a; 近年来&#xff0c;网络安全问题日益严峻&#xff0c;其中勒索病毒成为了一种日益猖獗的威胁。在众多勒索病毒中&#xff0c;.faust勒索病毒以其高度的隐秘性和破坏性引起了广泛关注。本文91数据恢复将深入剖析.faust勒索病毒的威胁特点&#xff0c;并提出相…

打包的意义 作用等前端概念集合 webpack基础配置等

基础网页是什么&#xff1f; 在学校最基础的三剑客 原生JS CSS H5就可以开发静态网页了 对于浏览器而言也能识别这些基础的文件和语法&#xff0c;真正的所见即所得&#xff0c;非常直接。 为什么要使用框架库&#xff1f; 对于常用的前端框架而言&#xff0c;无论是Vue Rea…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

【网络技术】【Kali Linux】Wireshark嗅探(十一)以太网Ethernet协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

封装 H.264 视频为 FLV 格式然后推流

封装 H.264 视频为 FLV 格式并通过 RTMP 推流 flyfish 协议 RTMP (Real-Time Messaging Protocol) RTSP (Real Time Streaming Protocol) SRT (Secure Reliable Transport) WebRTC RTMP&#xff08;Real Time Messaging Protocol&#xff09;是一种用于实时音视频流传输的协…

医院手术室麻醉信息管理系统源码 自动生成麻醉的各种医疗文书(手术风险评估表、手术安全核查表)

目录 手术风险评估表 一、患者基本信息 二、既往病史 三、手术相关信息 四、风险评估因素 五、风险评估结果 手术安全核查表 一、患者身份与手术信息核对 二、术前准备核查 三、手术团队与职责确认 四、手术物品与设备核查 五、术中关键步骤核查 六、术后核查 七…

全志ARM-蜂鸣器

sh操作准备&#xff1a; 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置&#xff0c;修改/etc/vim/vimrc文件&#xff0c;需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考&#xff1a; CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽&#xff1a;bit描述帧起始SOF(Start Of Frame)1数据帧起始标志&#xff0c;固定为1bit显性(b0)仲裁段dentify(ID)11本数…

【介绍下如何使用CocoaPods】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Python 基础

文章目录 一、python 的安装二、基本数据类型1. 数字类型2. 非数字类型3. type()函数 三、语法的使用1. 输入print2. 类型的转换1. 转int()类型2. 转float()类型3. 转str()类型 3.输出 print()1. 基本输出2. % 格式化输出f 字符串 4. if 判断5.if else 判断6. if elif else 判断…