MyBatis 基本操作 - 注解版

news2024/9/23 13:17:14

目录

一,查询 - @select

1.1 全列查询

1.2 指定列查询

1.3 赋值问题

方法一:起别名

方法二:结果映射

方法三:添加配置

二,新增 - @Insert

2.1 使用对象插入

2.2 获取主键

三,删除 - @Delete

四,修改 - @Update 

补:MyBatis 的配置


一,查询 - @select

1.1 全列查询

@Mapper
public interface UserInfoMapper {
    @Select("select * from userInfo")
    public UserInfo queryAll();
}

1.2 指定列查询

@Mapper
public interface UserInfoMapper {
    //注意:MyBatis中方法名不允许重复!!!!
    //当只有一个参数时,sql参数与方法参数可以不同
    @Select("select * from userInfo where id = #{id}")
    public UserInfo queryUserInfoById(Integer id);

    //当需要对参数进行重命名时需要使用@Param注释
    //如果不使用@Param,那么sql参数与方法参数必须相同
    //注:如果使用阿里云创建的springboot项目,必须使用@Param注解
    @Select("select * from userInfo where id = #{id} and username = #{username}")
    public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);
}

 注:加了@Param注解后,sql语句中的参数名只能与@Param()的参数名匹配!!!

1.3 赋值问题

可以发现,在赋值时,deleteFlag,createTime,updateTime 并没有被赋值,这是为什么?原因分析:

  • 当⾃动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略⼤⼩写)。 这意味着如果发现了 ID 列和 id 属性,MyBatis 会将列 ID 的值赋给 id 属性
  • 所以没有赋值的原因就是MySQL中的字段名与Java对象中的属性名不相同

 

方法一:起别名

    @Select("select id, username, password, age, gender, phone," +
            "delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userInfo " +
            "where id = #{id} and username = #{username}")
    public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);

方法二:结果映射

    @Select("select * from userInfo where id = #{id}")
    @Results(id = "resultMap",value = {
            @Result(column = "delete_flag", property = "deleteFlag"),
            @Result(column = "create_time", property = "createTime"),
            @Result(column = "update_time", property = "updateTime")
    })
    public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);


    @Select("select * from userInfo where id = #{id}")
    @ResultMap(value = "resultMap")
    //使用过@Results注解后,其他方法可以直接使用@ResultMap注解获得相同效果
    public UserInfo queryUserInfoById(Integer id);

方法三:添加配置

mybatis:
  configuration:
    map-underscore-to-camel-case: true #驼峰自动转换

二,新增 - @Insert

2.1 使用对象插入

使用多个参数插入数据与上述查询的使用方法一样,这里不过多赘述,这里讲一下如何使用对象插入数据:

@Mapper
public interface UserInfoMapper {
    //这里演示一下使用对象插入
    @Insert("insert into userInfo (username, password, age, gender, phone) " +
            "values (#{username}, #{password}, #{age}, #{gender}, #{phone})")
    public Integer insert(UserInfo userInfo);

    //使用@Param注解
    @Insert("insert into userInfo (username, password, age, gender, phone) " +
            "values (#{userInfo.username}, #{userInfo.password}, #{userInfo.age}, #{userInfo.gender}, #{userInfo.phone})")
    public Integer insertByParam(@Param("userInfo") UserInfo userInfo);
    
    //这里的返回值是成功修改了几行数据,也可以返回void
}

2.2 获取主键

在有些情景中,我们需要获取到新插入数据的 id,如果想要拿到自增 id,需要在Mapper接口方法上添加一个@Option注解:

    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into userInfo (username, password, age, gender, phone) " +
            "values (#{username}, #{password}, #{age}, #{gender}, #{phone})")
    public Integer insert(UserInfo userInfo);
  • useGeneratedKeys = true:表示告诉MyBatis使用JDBC的getGeneratedKeys方法来检索数据库内部生成的主键(如果数据库支持的话)
  • keyProperty = ''id'':这个属性指定了userInfo对象中的 id 属性接收数据库生成的主键

三,删除 - @Delete

    @Delete("delete from userInfo where id = #{id}")
    public Integer deleteById(Integer id);

四,修改 - @Update 

    @Update("update userInfo set username = #{username} where id = #{id}")
    public Integer updateById(@Param("username") String username, @Param("id") Integer id);

补:MyBatis 的配置

mybatis:
  configuration: # 配置打印 MyBatis⽇志
    map-underscore-to-camel-case: true #驼峰自动转换
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句
  mapper-locations: classpath:mapper/**Mapper.xml #使用xml操作数据库时会用到

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

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

相关文章

使用Gitlab实现monorepo多项目CICD

CI/CD是什么 CI/CD(Continuous Intergration/Continuous Delpoy),即持续集成/持续部署,或称为持续集成/持续交付,作为一套面向开发和运维团队的解决方案,CI/CD 主要解决集成新代码和向用户频繁交付应用的问…

SQL注入实例(sqli-labs/less-22)

0、初始页面 1、确定闭合字符 闭合字符为单引号双引号 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标

初识redis:String类型

在Redis中的所有key都是字符串,而value的类型是存在差异的。本文介绍的就是value中的string类型。 首先要知道,Redis中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。也就是说,redis不仅仅可以…

JMeter——异步请求性能测试

前段时间任务要求要对一种异步请求做性能测试,异步请求步骤如下: step1: 发一个数据计算的请求,response里面返回一个jobId step2: 带上这个jobId,就可以实时查看这个请求返回的jobStatus, 如果jobStatus0, 则成功返回计算结果&…

29_反序列化漏洞、反序列化概念、反序列化原理、反序列化漏洞防御、序列化

概念 序列化和反序列化 序列化 将对象型转换成字符串的过程。 反序列化 将字符串还原成对象型的过程。 反序列化漏洞&#xff08;了解&#xff09; 便于传输和存储 接下来上代码进行测试&#xff0c;先搞个类&#xff0c; <?phpheader("content-type:text/html;…

基于SpringBoot+Vue的校园失物招领系统(带1w+文档)

基于SpringBootVue的校园失物招领系统(带1w文档) 基于SpringBootVue的校园失物招领系统(带1w文档) 本课题研发的校园失物招领系统管理系统&#xff0c;就是提供校园失物招领系统信息处理的解决方案&#xff0c;它可以短时间处理完信息&#xff0c;并且这些信息都有专门的存储设…

51单片机个人学习笔记16(红外遥控)

前言 本篇文章属于STC89C52单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 [1-1] 课程简介_哔哩…

Qt编程技巧小知识点(2)GPIB缓存区数据读取

文章目录 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取小结 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取 大端小端的问题&#xff0c;其主要表现如下例子&#xff1a; 例如&#xff1a;输入为QByteArray str "#14M\xB6q\xC1\n&qu…

ImageNet_2014数据集下载与解压

前言 最近在配OpenLongTailRecognition-OLTR代码用的ImageNet_2014&#xff0c;因为数据集较大的原因&#xff0c;导致下载和数据集配置一直被耽误&#xff0c;进度很满&#xff0c;故此记录&#xff0c;以背不时只用。 进入imageNet主页 注: 需要注册账号&#xff0c;教育邮箱…

【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem

文章目录 摘要一、介绍二、相关工作三、与硬件无关的帕累托效率四、通用倒置瓶颈五、移动MQA六、MNv4模型的设计6.1 为增强的体系结构改进NAS6.2 MNv4模型的优化 7. 结果7.1 ImageNet分类7.2 COCO目标检测 8. 强化蒸馏配方9. 结论 MobileNetV4 - 移动生态系统的通用模型 摘要 …

linux系统编程:(4)

1.系统时间的获取函数 1. time函数 功能: 获得1970年到现在的秒数 参数: t:存放秒数的空间首地址 返回值: 成功返回1970年到现在的秒数 失败返回-1 2.localtime 函数 功能: 将一个秒数转化成日历时间 参数: timep:保存秒数空间的地址 返回值: 成功…

Node.js异步编程

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介绍Node.js异步编程的相关内容。内容包括 同步API、异步API、同步API与…

拿捏!远程观影之详细操作教程

碎碎念 相信不少小伙伴是有收藏影片的&#xff0c;时不时会取出来进行观看。大多时候&#xff0c;我们都是在局域网中观影&#xff0c;局域网中是直连&#xff0c;所以可以一直流畅进行观影&#xff0c;但是有不少朋友是有远程观影需求的&#xff0c;那么怎么实现能随时在手机…

squidpy学习总结

下载安装 首先不要使用pip install squidpy[interactive] 安装&#xff0c;因为我在base环境里python版本是python3.11.5, 导致安装narapi包的时候出现问题&#xff0c;所以我选择的办法是 conda create -n sp_env python3.9.12 注意这个有个问题&#xff0c;我的mac为啥建立不…

【git】git与​TortoiseGit​下载教程

下载地址&#xff1a;https://git-scm.com/ 下载TortoiseGit 官网链接&#xff1a;https://tortoisegit.org/ 拉去代码错误&#xff1a; 找到在本地安装的 git 服务的根目录 -> Git -> usr -> bin 目录下选中 ssh.exe &#xff0c;再点击打开即可&#xff0c;如下图&a…

在Ubuntu上基于NDK(r21)交叉编译FFmpeg for Android

各软件版本号&#xff1a;VMware为17 Pro、FFmpeg版本号为4.3.8、NDK版本号为r21e、Ubuntu版本号为20.04 1.下载FFmpeg4.3.8并解压 2.下载NDK&#xff08;r21e&#xff09;并解压 https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip 3.在ffmpeg-4.…

FastReport数据区横向排列展示

FastReport数据区横向排列展示 步骤1&#xff1a;设置数据区的Columns Editor属性 1、Count&#xff1a;2表示数据区里的控件将最多显示两列 2、AcrossThenDown&#xff1a;数据区里的控件将会被从做到右依次循环遍历 3、Width&#xff1a;9.25&#xff0c;因为我只设置了两列…

mmdebstrap:创建 Debian 系统 chroot 环境的利器 ️

文章目录 mmdebstrap 的一般性参数说明 &#x1f4dc;mmdebstrap 的常见用法示例 &#x1f308;使用 mmdebstrap 的注意事项 ⚠️ &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&am…

我的创新大赛经验分享:如何打磨优化项目

我的创新大赛经验分享&#xff1a;如何打磨优化项目 前言1. 强化创新性与独特性2. 深度市场调研与用户需求洞察3. 优化商业模式与财务规划4. 提升团队表现与协作效率5. 完善展示材料与演示技巧6. 模拟答辩与专家评审7. 关注细节与排除潜在问题结语 前言 在创新的浪潮中&#xf…

Vue前端服务加密后端服务解密--AES算法实现

在实际项目中考虑到用户数据的安全性&#xff0c;在用户登录时&#xff0c;前端需要对用户密码加密&#xff08;防止用户密码泄露&#xff09;&#xff0c;服务端收到登录请求时先对密码进行解密&#xff0c;然后再进行用户验证登操作。本文 AES ECB 模式来实现前端机密后端解密…