MyBatis:XML操作

news2024/11/13 11:07:05

在这里插入图片描述

  • 👑专栏内容:MyBatis
  • ⛪个人主页:子夜的星的主页
  • 💕座右铭:前路未远,步履不停

目录

  • 一、MyBatis XML方式
    • 1、配置数据库
    • 2、指明XML路径
    • 3、写持久层代码
  • 二、基础操作
    • 1、新增
    • 2、删除
    • 3、更新
    • 4、查找
      • Ⅰ、开启驼峰命名
      • Ⅱ、结果映射


一、MyBatis XML方式

使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中。

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

  1. 配置数据库连接字符串
  2. 指明XML的路径
  3. 写持久层代码

1、配置数据库

和前面配置数据库的方法一样。

如果是application.yml文件,则配置如下内容:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&allowPublicKeyRetrieval=true
    username: root   # 数据库用户名
    password: 11111  # 数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver

如果是application.properties文件,则配置如下内容:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false
# 数据库名称
spring.datasource.username=root
# 数据库密码
spring.datasource.password=11111

2、指明XML路径

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

mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

image-20240318185622773

如果是application.properties⽂件,配置内容如下:

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

在mapper文件夹内,新建XXXMapper.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="com.example.demo.mapper.UserInfoXMLMapper">
    

</mapper>

image-20240318190620099

这里通常与 Mapper 接口的完全限定名相匹配。这样 MyBatis 就能够将接口中的方法与映射器文件中的 SQL 语句关联起来。

3、写持久层代码

持久层代码分两部分

  1. ⽅法定义 Interface
  2. ⽅法实现: XXXMapper.xml

image-20240318193647807

image-20240318193733566

新建一个接口:UserInfoXMlMapper

@Mapper
public interface UserInfoXMLMapper {
    List<UserInfo> selectAll();
}

image-20240318193841865

image-20240318195354575

新建UserInfoXMLMapper用于实现该接口的方法。

<?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="com.example.mybatisdemo.mapper.UserInfoXMLMapper">

    <select id="selectAll" resultType="com.example.mybatisdemo.model.UserInfo">
        select * from userinfo
    </select>

</mapper>
  • <mapper> 标签是 MyBatis 中映射器文件的基础,它定义了一个命名空间,用于隔离不同的 SQL 语句,防止 SQL ID 冲突。

  • namespace 属性是必须的,它通常设置为 Mapper 接口的全限定名,这样 MyBatis 可以将接口中的方法与映射器文件中的 SQL 语句关联起来。例如:<mapper namespace="com.example.mybatisdemo.mapper.UserInfoXMLMapper">

  • resultType 属性用于指定查询结果的类型,它应该是返回对象的完全限定类名或别名。MyBatis 会将查询结果映射到这个类型的实例中。

二、基础操作

1、新增

UserInfoXMLMapper接口:

@Mapper
public interface UserInfoXMLMapper {
    Integer insertUser(UserInfo userInfo);
}

UserInfoXMLMapper.xml进行实现:

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

对应的单元测试:

    @Autowired
    private UserInfoXMLMapper userInfoXMLMapper;
    @Test
    void insertUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername("lisi");
        userInfo.setPassword("123456");
        userInfo.setAge(20);
        userInfo.setPhone("12345678901");
        userInfo.setGender(1);
        Integer result = userInfoXMLMapper.insertUser(userInfo);
    }

获取插入数据的自增ID:接口定义不变,Mapper.xml 实现设置useGeneratedKeys 和keyProperty属性:

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

2、删除

UserInfoXMLMapper接口:

@Mapper
public interface UserInfoXMLMapper {
    Integer deleteUser(Integer id);
}

UserInfoXMLMapper.xml进行实现:

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

3、更新

UserInfoXMLMapper接口:

@Mapper
public interface UserInfoXMLMapper {
    Integer updateUser(UserInfo userInfo);
}

UserInfoXMLMapper.xml进行实现:

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

4、查找

同样的, 使⽤XML 的⽅式进⾏查询, 也存在数据封装的问题。解决办法和注解类似:使用结果映射或者开启驼峰命名。

Ⅰ、开启驼峰命名

和前面一样。在application.yml文件中加入下方配置:

mybatis:
  configuration:  
    map-underscore-to-camel-case: true

Ⅱ、结果映射

<resultMap id="BaseMap" type="com.example.demo.model.UserInfo">
    <id column="id" property="id"></id>
    <result column="delete_flag" property="deleteFlag"></result>
    <result column="create_time" property="createTime"></result>
    <result column="update_time" property="updateTime"></result>
</resultMap>

<select id="selectAllUser" resultMap="BaseMap">
    select id, username, `password`, age, gender, phone, delete_flag, 
    create_time, update_time from userinfo
</select>

image-20240318202001139

<resultMap> 标签:

  • <resultMap> 用于定义如何将查询结果映射到 Java 对象上。
  • id 属性是结果映射的唯一标识符。
  • type 属性指定了结果映射的 Java 类型,通常是实体类的全限定名。

<id> 标签:

  • <id> 标签用于指定主键列的映射。
  • column 属性表示数据库表中的列名。
  • property 属性表示 Java 对象中的属性名。

<result> 标签:

  • <result> 标签用于指定非主键列的映射。
  • column 属性表示数据库表中的列名。
  • property 属性表示 Java 对象中的属性名。

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

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

相关文章

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

Spring AI Embeddings 和 Vector 入门

在前面 Spring AI Chat 简单示例 中介绍了 Chat 的基本用法&#xff0c;本文在此基础&#xff08;主要是pom.xml&#xff09;上继续探索 Embedding 和 Vector。 官方文档&#xff1a; embeddings: https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embedding…

java算法第30天 | ● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独

今天是三道困难题&#xff0c;一刷可以先跳过。 332.重新安排行程 本题的重点是使用Map<String,Map<String,Integer>>存储路径以便递归中根据上一个地点检索接下来的选择。注意&#xff0c;因为要求按字母顺序排列优先级&#xff0c;所以内层的Map要用TreeMap<…

Jupyter Notebook介绍、安装及使用教程

Jupyter Notebook介绍、安装及使用教程 一、什么是Jupyter Notebook&#xff1f;简介组成部分网页应用文档Jupyter Notebook的主要特点 二、安装Jupyter Notebook先试用&#xff0c;再决定安装安装前提使用Anaconda安装使用pip命令安装 三、运行Jupyter Notebook帮助启动默认端…

html5cssjs代码 032 边框属性示例

html5&css&js代码 032 边框属性示例 一、代码二、解释 该HTML文件定义了一个网页页面&#xff0c;主要介绍了HTML5中CSS边框属性的用法。 一、代码 <!DOCTYPE html> <html lang"zh-cn"><head><title>编程笔记 html5&css&j…

图Graph及相关算法(Dijkstra,Kruskal)

目录 无向图 有向图 邻接矩阵 邻接表 图的bfs&#xff0c;dfs 二部图&#xff08;二分图&#xff09; 有向无环图&#xff08;DAG&#xff09; 拓扑排序&#xff08;Topological Sort&#xff09; AOV网 迪杰斯特拉Dijkstra 最小生成树 克鲁斯卡尔&#xff1a;Krus…

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-B…

Linux系统——Mysql索引补充知识

目录 一、索引介绍 1.索引的优点 2.索引的分类 3.索引的技术名词 3.1回表 3.2覆盖索引 3.3最左匹配 3.4索引下推 4.索引匹配方式 4.1全值匹配 4.2最左前缀匹配 4.3匹配列前缀 4.4匹配一个范围值 4.5精确匹配某一列并范围匹配另一列 4.6只访问索引的查询 一、索引…

银行OA系统|基于SpringBoot架构+ Mysql+Java+ B/S结构的银行OA系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

【Charles如何对手机APP进行抓包和弱网测试】

一、Charles对APP抓包 1、前提条件&#xff1a; 1&#xff09;电脑上必须安装Charles工具&#xff0c;如没有安装可参考&#xff1a;【Charles抓包工具下载安装详细操作步骤】-CSDN博客 2&#xff09;手机和电脑必须在同一个局域网内&#xff08;连接同一个WiFi&#xff09;…

Linux信号补充——信号捕捉处理

一、信号的捕捉处理 ​ 信号保存后会在合适的时间进行处理&#xff1b; 1.1信号处理时间 ​ 进程会在操作系统的调度下处理信号&#xff0c;操作系统只管发信号&#xff0c;即信号处理是由进程完成的&#xff1b; ​ 1.信号处理首先进程得检查是否有信号&#xff1b;2.进程…

异地组网需求如何实现?

在当今信息化时代&#xff0c;越来越多的企业和个人在不同地区之间需要进行远程通信和数据传输。由于网络环境的差异和网络隔离等原因&#xff0c;异地组网的需求愈发迫切。本文将介绍一款名为【天联】的异地组网内网穿透产品&#xff0c;它的出现有效解决了不同地区间电脑、设…

基于Arduino IDE 野火ESP8266模块WIiFi开发

一、函数介绍 头文件 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h>ESP8266WiFi.h库主要用于连接单个WiFi网络。如果需要连接到多个WiFi网络&#xff0c;例如在需要切换不同网络或者备用网络时&#xff0c;可以使用ESP8266WiFiMulti.h头文件&#xff…

供应链投毒预警 | 恶意Py组件tohoku-tus-iot-automation开展窃密木马投毒攻击

概述 上周&#xff08;2024年3月6号&#xff09;&#xff0c;悬镜供应链安全情报中心在Pypi官方仓库&#xff08;https://pypi.org/&#xff09;中捕获1起新的Py包投毒事件&#xff0c;Python组件tohoku-tus-iot-automation 从3月6号开始连续发布6个不同版本恶意包&#xff0c…

SAP前台处理:物料计价方式:价格控制与价格确定 - 01

一、背景&#xff1a; 物料主数据中我们讲解到物料的计价方式&#xff0c;SAP应用到的主要计价方式有移动平均价和标准价格方式两种&#xff0c;但也有按照批次计价等方式&#xff0c;我们主要介绍最常用的V2移动平均价和S3的标准价格&#xff1b; 二、不同组合下的差异&…

知识蒸馏——深度学习的简化之道 !!

文章目录 前言 1、什么是知识蒸馏 2、知识蒸馏的原理 3、知识蒸馏的架构 4、应用 结论 前言 在深度学习的世界里&#xff0c;大型神经网络因其出色的性能和准确性而备受青睐。然而&#xff0c;这些网络通常包含数百万甚至数十亿个参数&#xff0c;使得它们在资源受限的环境下&…

【HM】STM32F407 HAL库 PWM

PWM简介 脉冲宽度调制&#xff08;PWM&#xff09; 是一种数字信号&#xff0c;最常用于控制电路。该信号在预定义的时间和速度中设置为高&#xff08;5v或3.3v&#xff09;和低&#xff08;0v&#xff09;。通常&#xff0c;我们将PWM的高电平称为1&#xff0c;低电平为0。 …

pyboard开发板上手

文章目录 准备开发板连接到pyboard开发板将pyboard作为U盘打开编辑main.py重启pyboard 准备开发板 本文介绍了如何使用MicroPython在pyboard开发板上运行你的第一个程序&#xff0c;所以&#xff0c;在开始下面的步骤前&#xff0c;你需要有一块pyboard开发板&#xff0c;如果…

OKR如何与个人绩效评估和激励相结合?

在现代企业管理中&#xff0c;个人绩效评估与激励是提升员工积极性、推动企业发展的关键环节。而OKR&#xff08;目标与关键成果&#xff09;作为一种高效的目标管理方法&#xff0c;通过与个人绩效评估和激励相结合&#xff0c;可以进一步提升员工的工作动力和工作效率&#x…

数据机构-2(顺序表)

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…