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

ops/2024/11/14 20:55:44/

目录

前置条件

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注解

java">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创作中心)

java">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));}

测试结果

数据库结果

✈🚀 更新数据

接口方法

java">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>

测试

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

运行结果

数据库状态

 ✈🚀删除数据

接口方法

java"> int deleteUserByUsername(String username);

 xml

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

 测试

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

运行结果

✈🚀查询数据

🚏查看单字段查询

接口方法

java">  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>

测试

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

 运行结果

打算用下篇说明


http://www.ppmy.cn/ops/23873.html

相关文章

优路教育:提质数字人才培育,增效数字经济发展

为发挥数字人才支撑数字经济的基础性作用&#xff0c;加快推动形成新质生产力&#xff0c;相关部门于近日联合发布《加快数字人才培育支撑数字经济发展行动方案&#xff08;2024&#xff0d;2026年&#xff09;》&#xff08;以下简称方案&#xff09;&#xff0c;要求紧贴数字…

竟然还有这么省钱方便的寄快递方式?你竟然不知道!

选择闪侠惠递平台寄快递&#xff0c;这个价格来说真的很亲民了&#xff0c;而且可以多家快递进行比较&#xff0c;全国上门取件&#xff0c;这个真的很不错了。闪侠惠递是个靠谱的平台&#xff0c;售后以及取件率都必须好的。 闪侠惠递平台折扣力度非常棒的&#xff01;因为渠…

安卓手机APP开发__媒体开发部分__APK裁剪

安卓手机APP开发__媒体开发部分__APK裁剪 目录 概述 仅使用必要的依赖 启用代码和资源的裁剪 指定你的APP需要哪一个渲染器 指定你的APP需要哪个抽取器 定制媒体源的实例化 概述 最小化APK的大小是开发一个好的安卓APP的一个重要的方面.当面向的是正在开发 的市场时更是…

朋友们,帮忙填写一个问卷呀!关于高速服务区一体化车流管理系统的线上调研,急需各位大神的帮助!!!

✌ 作者简介&#xff1a;瑞骏 RUIJUN &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4ac; 人生格言&#xff1a;没有我不会的语言&#xff0c;没有你过不去的坎儿。&#x1f4ac; &#x…

Mysql常用关键字详解

关键字详解与应用 SELECT 用途: 选择表中的一列或多列数据。常见问题: 如何选择不同表中的数据并进行合并&#xff1f;解决方案: 使用 JOIN 关键字来连接表&#xff0c;并通过 ON 条件指定连接条件。 SELECT a.name, b.salary FROM employees a JOIN salaries b ON a.employee_…

docker部署prometheus

概述 Prometheus是一个开源的服务监控系统和时序数据库&#xff0c;专为云计算环境设计。它提供了通用的数据模型和快捷的数据采集、存储和查询接口。Prometheus的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的目标中拉取数据。当新拉取到的…

使用pdf.js实现pdf的预览与打印

使用pdf.js实现PDF的预览与打印可以通过以下步骤完成&#xff1a; 1. 首先&#xff0c;在项目中安装pdf.js库。可以使用npm或yarn来安装pdf.js&#xff0c;运行以下命令&#xff1a; npm install pdfjs-dist2. 创建一个包含PDF预览和打印功能的组件。可以创建一个单独的组件用…

Docker-Compose单机多容器应用编排与管理

前言 Docker Compose 作为 Docker 生态系统中的一个重要组件&#xff0c;为开发人员提供了一种简单而强大的方式来定义和运行多个容器化应用。本文将介绍 Docker Compose 的使用背景、优劣势以及利用 Docker Compose 简化应用程序的部署和管理。 目录 一、Docker Compose 简…