Mybatis的基本操作--增删改查

news2024/12/27 12:41:36

目录

查看数据

无参数

一个参数

多个参数

添加数据

修改数据

删除数据


查看数据

分三种情况:无参,有一个参数,有多个参数的情况。

 (这里的详细操作步骤是博主的上一篇博客写的:初识Mybatis,并创建第一个Mybatis项目(详细图文教程))

无参数

我们在接口中声明,在对应的xml文件中进行实现接口,下面简单展示一下注意点。

接口:

 xml文件:

 进行测试:

 测试结果:

可以看到返回的结果就是我们连接的数据库中的结果。 

一个参数

我们传递参数的时候,会用到一个注解 @Param 。传递单个参数的时候,注解可以不用,也可以使用。使用注解就要和注解中的值保持一致,不适用注解的时候,接口中和 xml 中的值可以不一样。

//接口声明
import com.example.springmybatisdemo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//接口是用来声明方法的
@Mapper
public interface UserMapper {
    /**
     * 不带参数情况
     * @return
     */
    List<User> userAll();

    /**
     * 一个参数的情况1:接口中的参数和xml文件的参数名称对应
     * @param id
     * @return
     */
    User userById(Integer id);

    /**
     * 一个参数的情况2:使用传参注解,注解中的值要和后边XML文件中的值对应
     * 注解中的值可以和参数一样也可以不一样
     * @param id
     * @return
     */
    User userById2(@Param("uid")Integer id);

    /**
     * 一个参数的情况3:接口中的参数和XML文件的参数可以不对应
     * @param aaaa
     * @return
     */
    User userById3(Integer aaaa);
}

<!--        xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springmybatisdemo.mapper.UserMapper">

        <select id="userAll" resultType="com.example.springmybatisdemo.model.User">
                select * from userinfo;
        </select>
        <select id="userById" resultType="com.example.springmybatisdemo.model.User">
                select * from userinfo where id=#{id}
        </select>
        <select id="userById2" resultType="com.example.springmybatisdemo.model.User">
                select username from userinfo where id=#{uid}
        </select>
        <select id="userById3" resultType="com.example.springmybatisdemo.model.User">
                select * from userinfo where id=#{oooo}
        </select>
      
</mapper>

多个参数

多个参数的时候就必须要用到注解@Param,且注解中的值要和xml接收参数的值一样。

//接口
    /**
     * 多个参数的情况,注解中的值要和XML文件中接收的值对应
     * @param name
     * @param id
     * @return
     */
    User userByNameAndId(@Param("name")String name,@Param("id")Integer id);

<select id="userByNameAndId" resultType="com.example.springmybatisdemo.model.User">
                select * from userinfo where name= #{name} and id= #{id}
</select>

添加数据

可以一个一个的增加属性,但是这样太繁琐,我们可以直接传递对象。传递对象的时候可以直接传递一个默认的,也可以传递一个指定名称的对象,传递默认的对象的时候,Mybatis会自动帮我们生成 以属性名命名的变量。传递指定对象的时候,我们取值的时候,就是 对象名.属性 的方式取值。

 /**
     * 插入一个对象
     * @param user
     * @return
     */
    Integer insert(User user);

    /**
     * 插入一个指定名称的对象
     * @param user
     * @return
     */
    Integer insert2(@Param("user1") User user);
 <insert id="insert">
                insert into userinfo(username,password,photo)values(#{username},#{password},#{photo})
        </insert>
        <insert id="insert2">
                insert into userinfo(username,password,photo)values(#{user1.username},#{user1.password},#{user1.photo})
        </insert>

获取自增的id

 

修改数据

修改数据的时候,也可以传入属性或者传入对象,传入属性的话,方法传参直接传递的就是要修改的值,传入对象的话,传入的是一个新的对象,设置新的对象的属性,用这个新的对象去替换之前的值。

 /**
     * 修改数据(更新数据):传入的是对象
     * @param user
     */
    void update(User user);

    /**
     * 直接传入要修改的属性
     * @param username
     * @param id
     */
    void update2(String username,Integer id);
<update id="update">
                update userinfo set username=#{username},password=#{password} where id=#{id}
        </update>
        <update id="update2">
                update userinfo set username=#{username},id=#{id} where id=#{id}
        </update>

删除数据

 /**
     * 删除数据
     * @param id
     */
    void delete(Integer id);
 <delete id="delete">
                delete from userinfo where id=#{id}
        </delete>

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

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

相关文章

2023年VSCode插件最新推荐(54款)

本文介绍前端开发领域常用的一些VSCode插件&#xff0c;插件是VSCode最重要的组成部分之一&#xff0c;本文列出了我自己在以往工作经验中积累的54款插件&#xff0c;个人觉得这些插件是有用或有趣的&#xff0c;根据它们的作用&#xff0c;我粗略的把它们分成了代码管理、文本…

css实现纹理条纹,波点背景效果

css实现纹理条纹&#xff0c;波点背景效果 本文目录 css实现纹理条纹&#xff0c;波点背景效果效果一&#xff1a;水平条纹效果二&#xff1a;竖向条纹效果三&#xff1a;斜条纹效果四&#xff1a;网格效果五&#xff1a;象棋盘1效果六&#xff1a;象棋盘2效果七&#xff1a;红…

代码重构的时机与方法

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步…

机器人制作开源方案 | 智能垃圾桶

1. 功能说明 智能垃圾桶是一种利用物联网技术和智能感知能力的智能设备&#xff0c;旨在提高垃圾分类和处理的效率。通常具备以下特点和功能&#xff1a; ① 智能感知&#xff1a;智能垃圾桶配备各种传感器&#xff0c;如压力传感器、红外线传感器等&#xff0c;可以实时感知…

Flutter实现点击头像更新头像的功能,本地相册选取和调用相机两种方式的实现

文章目录 需求实现的效果如图代码实现代码分析用InkWell包住了我们的头像&#xff0c;这样来监听点击头像的事件用showDialog弹出提示框让用户选择是从相册里选择头像还是使用相机来拍照用image_picker实现从设备的相册或相机中选择图片或拍照 需求 Flutter实现点击头像更新头…

数字孪生管控系统,智慧园区楼宇合集

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

【java】【基础8】入门结业-ATM系统实战

目录 一、ATM项目技术 二、能达成的能力 三、开始编码 3.1 系统架构搭建、欢迎页设计 3.1.1 Account 3.1.2 ATM 3.1.3 Test 3.2 开户功能实现 3.2.1 修改AccountgetUserName() 3.2.2 ATM 开户操作 3.2.3 ATM为新用户生成一个随机卡号​编辑 3.3 登录功能实现 3.4 操作页…

登录和注册页面 - 验证码功能的实现

目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…

Linux——信号量、环形队列

Linux——信号量和环形队列 文章目录 Linux——信号量和环形队列概念信号量的PV原语线程申请信号量失败将会被挂起 信号量函数sem_init初始化信号量sem_destroy销毁信号量sem_wait等待信号量sem_post发布信号量 基于环形队列的生产者消费者模型代码实现 概念 临界资源&#xf…

Qt - 信号和槽

文章目录 信号和槽自定义信号和槽代码实现teacher 类申明信号方法student 添加槽并处理绑定信号和槽 当自定义信号和槽出现重载设置按钮点击 信号可以连接信号断开信号 disconnectQt4版本写法Lambda 表达式函数对象参数操作符重载函数参数可修改标示符函数返回值是函数体 总结拓…

【C++修炼之路】继承

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、概念及定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

2023最新谷粒商城笔记之Sentinel概述篇(全文总共13万字,超详细)

Sentinel概述 服务流控、熔断和降级 什么是熔断 当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;**进而熔断该节点微服务的调用&#xff0c;快速返回错误的响应信息。**检测到该节点微服务调用响应正常后恢复调用链路。A服务调用B服…

服务器被挂病毒记录(redis入侵)

前言 今天正在快乐的打着游戏&#xff0c;突然一个浙江的电话&#xff1a; 好家伙&#xff0c;我那可怜的1核2g的服务器说在跑挖矿程序&#xff0c;苍天啊&#xff0c;大地呀&#xff0c;我那1核2g的服务器有啥跑呢&#xff0c;别难为这小家伙了。 解决过程&#xff1a; 1…

【学会动态规划】地下城游戏(10)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

计算机网络复习(路由器、交换机、广域网配置~)

文章目录 子网划分路由器和交换机的配置&#xff08;基础知识&#xff09;IOS基础IOS使用技巧Cisco设备的启动Cisco设备的配置途径配置文件的备份与恢复管理网络环境配置Telnet网络测试 配置路由表路由简介路由表简介路由的分类配置静态路由动态路由协议VLAN间的路由路由信息协…

Redis追本溯源(二)数据结构:String、List、Hash、Set、Zset底层数据结构原理

文章目录 一、String底层——sds&#xff08;Simple Dynamic String&#xff09;1.sds相比C语言字符串的优点2.结构3.扩容4.缩容 二、List底层——quickList、zipList1.quickList及其优化过程&#xff08;1&#xff09;quickList大致结构&#xff08;2&#xff09;引入zipList进…

Termux——安装配置

Termux简介1.基础知识1) 基础操作2) 目录结构3) 快捷键 2.基础命令1) 软件安装2) termux保持后台运行3&#xff09;[Process completed (signal 9) - press Enter] 问题修复4&#xff09;更换国内源5&#xff09;获取手机存储权限6&#xff09;基础软件安装 2. 美化相关1) 修改…

ChatGPT vs. 之前版本:性能与表现的对比

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

vue之ReadIdcardMD(身份证读取组件-移动设备)

组件功能 移动便携读取二代身份证信息组件(一般是非接刷二代证方式),包含无效身份证验证,过期身份证验证,是否满16周岁验证 (与windows二代证读取组件的区别是不会生成二代证图片,直接返回base64数据) #界面 #<

测等保2.0——安全区域边界

一、前言 今天我们来说说安全区域边界&#xff0c;顾名思义&#xff0c;安全区域边界就是保障网络边界处&#xff0c;包括网络对外界的边界和内部划分不同区域的交界处&#xff0c;我们的重点就是查看这些边界处是否部署必要的安全设备&#xff0c;包括防火墙、网闸、网关等安…