MyBatis 的XML实现方法(JAVA)

news2024/11/15 18:24:16

数据库表的结构如下:

DROP DATABASE IF EXISTS test;
CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
USE test;
-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;

在JAVA中的定义:

@Data
public class User {
    private Integer id;
    private String userName;
    private Integer gender;
    private Integer delete_flag;
    private Date create_time;
    private Date update_time;
}

先在配置文件中连接数据库

# .yml 连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/(要连接的数据库的名称)?characterEncoding=utf8&useSSL=false
    username: root
    password: 2002
    driver-class-name: com.mysql.cj.jdbc.Driver

定义接口:

 

@Mapper
public interface UserXMLMapper {
    //增
    Integer add(User user);
}

XML实现接口:

创建一个xml文件,然后在配置文件中配置xml文件的地址。

 

#配置xml文件的路径,resources/mapper包中所有以Mapper.xml结尾的文件
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml
#配置 打印mybatis的日志
  configuration: 
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在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="填写要实现的接口的全限定名称">

</mapper>

在mapper标签中插入以下代码

<insert id="add">
    insert into userinfo(username) values (#{userName});
</insert>

id:后面跟的是要实现的接口里面的具体的方法名称

#{}:中直接使用User对象的属性名来获取参数

进行单元测试

@SpringBootTest
class UserXMLMapperTest {
    @Autowired
    private UserXMLMapper userXMLMapper;
    @Test
    void add() {
        User user = new User();
        user.setUserName("zhangsan");
        userXMLMapper.add(user);
    }
}

因为数据库中数据太少了,所以在删除之前先添加一些数据

xml的实现代码如下

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

进行单元测试

@SpringBootTest
class UserXMLMapperTest {
    @Autowired
    private UserXMLMapper userXMLMapper;

    @Test
    void delete() {
        userXMLMapper.delete(3);
    }
}

查询的xml代码如下

<select id="find" resultType="com.example.Spring_demo.mySQL.User">
    select * from userinfo;
</select>

因为数据库返回的数据需要和JAVA进行映射所以resultType后面就是要映射的类的全限定名称。

单元测试

@SpringBootTest
class UserXMLMapperTest {
    @Autowired
    private UserXMLMapper userXMLMapper;

    @Test
    void find() {
        List<User> list = userXMLMapper.find();
        System.out.println(list.toString());
    }
}

大多数情况下数据库中的参数名和JAVA中的参数名是不相同的,因为数据库一般使用_分隔单词,而JAVA中是使用驼峰命名。 

所以在大多数情况下数据库中的参数名和JAVA中的参数名并不是和我上面的例子一样是相同的,它们的对应关系应该是这样:

 而代码执行的结果: 

后面的三个变量都无法获取返回值。

结果映射

解决办法有三种

1. 起别名

就是利用sql语句将返回结果的列名改的和类中的属性名一致。

<select id="find" resultType="com.example.Spring_demo.mySQL.User">
    select id,username,gender,delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userinfo;
</select>

2. 结果映射
<mapper namespace="com.example.Spring_demo.mySQL.UserXMLMapper">
    <resultMap id="map" type="com.example.Spring_demo.mySQL.User">
<!--        <id></id>标签只能应用于主键-->
        <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="find" resultMap="map">
        select * from userinfo;
    </select>
</mapper>

 

3. 开启驼峰命名

在配置文件中加入以下代码:

#yml文件
mybatis:
  configuration:
    map-underscore-to-camel-case: true #配置驼峰⾃动转换

修改前

修改的xml代码为

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

单元测试

@SpringBootTest
class UserXMLMapperTest {
    @Autowired
    private UserXMLMapper userXMLMapper;

    @Test
    void update() {
        userXMLMapper.update(1,"wangwu");
    }
}

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

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

相关文章

【Linux】权限 !

Linux 权限 Liunx Linux 权限1 什么是权限1.1 Linux用户1.2 切换用户 2 权限管理2.1 文件访问者的分类2.2 文件类型和访问权限2.3 文件权限的设置方法chmod 命令chown 命令chgrp 命令umask 命令file 指令 2.4 目录权限粘滞位 3 权限总结 1 什么是权限 关于Linux的权限问题&…

vivado 接口、端口映射

接口 重要&#xff01;接口只能在“fpga”类型的&#xff1c;component&#xff1e;中定义。接口部分提供了<component>上所有可用物理接口的列表。<interfaces>部分包含嵌套在其中的一个或多个<interface>标记。一个接口是通过使用<port_map>标记由多…

OpenGL DIR

Mesa简介-CSDN博客 Mesa, also called Mesa3D and The Mesa 3D Graphics Library, is an open source software implementation of OpenGL, Vulkan, and other graphics API specifications. Mesa translates these specifications to vendor-specific graphics ha…

一维数组2和二维数组1

1.一维数组在内存中的储存 在前面创建的数组中&#xff0c;每个元素是怎么储存的呢&#xff1f;我们通过观察元素的地址来看看吧。 %p是用来打印地址的。 结果为&#xff1a; 由此可看出每个地址都相隔一个int类型的距离&#xff0c;可以看出数组在内存中是连续存放的。也就是…

2024美赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 模型…

51单片机驱动点阵屏

目录 1设计目的 2设计方案 2.1材料选择 2.2电源设计 2.3控制设计 3焊接调试 3.1焊接 3.2调试 4程序 1设计目的 此次设计的东西是一个点阵屏&#xff0c;通过点阵屏实现电梯屏幕功能。显示内容包括向上运行箭头和向下运行箭头&#xff0c;以及1-12的楼层。 2设计方案 …

龟兔再跑

欢迎来到程序小院 龟兔再跑 玩法&#xff1a;乌龟跳绳&#xff0c;点击鼠标左键乌龟跳跃&#xff0c;两只乌龟一直不停的甩绳子&#xff0c;另外一只乌龟从中跳过&#xff0c;赶快去跳绳吧^^。开始游戏https://www.ormcc.com/play/gameStart/255 html <div class"mai…

Vue开发者工具是什么?有哪些?

Vue开发者工具是什么&#xff1f; Vue开发者工具是用于Vue.js开发的浏览器扩展&#xff0c;提供了许多有用的功能和工具&#xff0c;帮助开发者更轻松地开发和调试Vue.js应用程序。 Vue开发者工具的功能特点有哪些&#xff1f; 1、组件树视图&#xff1a;Vue开发者工具可以显…

STM32-调用 vTaskStartScheduler API 后出现 HardFault

STM32 移植 FreeRTOS 后调用 vTaskStartScheduler() 后出现 HardFault 异常。 原因分析&#xff1a; FreeRTOS 配置头文件 FreeRTOSConfig.h 中与中断有关的配置和通过系统接口 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) 设置的中断分组冲突。 /* The lo…

Java NIO (三)NIO Channel类

1 概述 前面提到&#xff0c;Java NIO中一个socket连接使用一个Channel来表示。从更广泛的层面来说&#xff0c;一个通道可以表示一个底层的文件描述符&#xff0c;例如硬件设备、文件、网络连接等。然而&#xff0c;远不止如此&#xff0c;Java NIO的通道可以更加细化。例如&a…

Python并发编程的概念和重要性

并发编程是一种编程方式&#xff0c;它允许在单台处理器上同时处理多个任务或操作。这些任务可以在单个处理器上通过时间分片技术实现&#xff0c;也可以在多核或多处理器系统上真正地并行执行。并发性对于提高系统资源利用率、提升应用程序性能以及改善用户体验都至关重要。 并…

计算机网络-分层结构,协议,接口,服务

文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决&#xff0c;也就分层解决 怎样分层 每层相互独立&#xff0c;每层做的工作不同 界面自然清晰&#xff0c;层与层之间的接口能够体现…

JS-日期对象

日期对象&#xff1a;用来表示时间的对象 作用&#xff1a;可以得到当前系统时间 实例化 在代码中发现了new关键字时&#xff0c;一般将这个操作称为实例化 创建一个时间对象并获取时间 1&#xff09;获得当前时间 const datenew Date() 2)获得指定时间 const datenew D…

蓝桥杯理历年真题 —— 数学

1. 买不到的数目 这道题目&#xff0c;考得就是一个日常数学的积累&#xff0c;如果你学过这个公式的话&#xff0c;就是一道非常简单的输出问题&#xff1b;可是如果没学过&#xff0c;就非常吃亏&#xff0c;在考场上只能暴力求解&#xff0c;或是寻找规律。这就要求我们什么…

【window】Windows11:该文件没有与之关联的应用来执行该操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;人工智能 之前win10升级win11后&#xff0c;受不了桌面软件图标的的小箭头&#xff0c;所以弄掉了&#xff0c;但是随之而来产…

揭开Spring MVC的真面目

官方对于Spring MVC的描述为&#xff1a; Spring Web MVC是基于Servlet API框架构建的原始Web框架&#xff0c;从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称&#xff08;Spring-webmvc&#xff09;&#xff0c;但它通常被称为“Spring-MVC…

数学建模--Radar图绘制

1.Radar图简介 最近在数学建模中碰见需要绘制Radar图(雷达图)的情况来具体分析样本的各个特征之间的得分与优劣关系&#xff0c;这样的情况比较符合雷达图的使用场景&#xff0c;一般来说&#xff0c;雷达图适用于展示多个维度的数据&#xff0c;并在一个平面上直观地呈现出不同…

宠物空气净化器推荐哪个好?实惠的猫用猫用净化器牌子测评

作为宠物主人&#xff0c;我们深知养宠物的乐趣和责任&#xff0c;但同时也面临着一些挑战&#xff0c;比如宠物掉毛、异味和空气质量等问题。这就是为什么越来越多的家庭选择宠物空气净化器&#xff0c;为我们创造一个清新、健康的室内环境。 无论我们多么爱我们的毛茸茸伙伴…

如何在 Ubuntu 22.04 上安装 Apache Web 服务器

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 22.04 上安装 Apache Web 服务器 介绍 Apache HTTP 服务器是世界上使用最广泛的 Web 服务器。它…

【C++】priority_queue模拟实现过程中值得注意的点

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 本篇文章旨在记录博主在模…