使用MyBatis实现CRUD操作

news2024/11/19 19:46:15

文章目录

  • 简介
    • (一)学习方向
    • (二)学习事项
  • 一,准备工作
  • 二,查询表记录
    • (一)在映射器配置文件里引入结果映射元素
    • (二)添加按姓名查询用户记录功能
      • 1,添加按姓名查询的映射语句
      • 2,在用户映射器接口里添加按姓名查询用户记录的方法
      • 3,添加按姓名查询用户记录的测试方法
      • 4,测试按姓名查询用户记录
  • 三,插入表记录
    • (一)添加插入映射语句
    • (二)在用户映射器接口添加插入方法
    • (三)在测试类里测试插入方法
    • (四)运行插入记录测试方法
    • (五)运行按姓名查询测试方法
  • 四,更新表记录
    • (一)在用户映射器配置文件里添加更新映射语句
    • (二)在用户映射器接口添加更新方法
    • (三)在测试类添加更新记录测试方法
    • (四)运行更新用户记录测试方法
  • 五,删除表记录
    • (一)在用户映射器配置文件里添加删除映射语句
    • (二)在用户映射器接口里添加删除方法
    • (三)在测试类里添加删除记录测试方法
    • (四)运行按编号删除记录测试方法


简介

在这里插入图片描述

(一)学习方向

  1. 使用MyBatis查询表记录
  2. 使用MyBatis插入表记录
  3. 使用MyBatis更新表记录
  4. 使用MyBatis删除表记录

(二)学习事项

  1. 要使用MyBatis执行任何创建、读取、更新和删除(CRUD)操作,您需要创建与该表相对应的普通旧Java对象(POJO)类。此类描述了将“建模”数据库表行的对象。

  2. 在UserMapper.xml 的配置文件中,<mapper namespace="net.huawei.mybatis.mapper.UserMapper"> ,命名空间非常重要,不能有错,必须与我们定义的package和接口一致。

一,准备工作

打开MyBatisDemo项目
在这里插入图片描述

二,查询表记录

上一讲《使用MyBatis实现简单查询》中,我们在UserMapper.xml里定义了两个查询语句:findById和findAll,对应地在UserMapper接口里定义了两个抽象方法:findById(int id)和findAll()。

(一)在映射器配置文件里引入结果映射元素

如果表的列名与实体的属性名不一致,比如表的register_time字段对应实体类的registerTime属性,我们就需要定义resultMap,当然一致时也可以定义。

MyBatis里jdbcType与javaType的对应关系
jdbcTypejavaType
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
CLOBClob
BLOBBlob
ARRAYArray
DISTINCTmapping of underlying type
STRUCTStruct
REFRef
DATALINKjava.net.URL

t_user表的数据类型
在这里插入图片描述
在这里插入图片描述
在UserMapper.xml文件里创建结果映射元素
在这里插入图片描述将UserMapper接口里抽象方法上的注解暂时注释掉
在这里插入图片描述
运行TestUserMapper测试类里的testFindAll()测试方法,查看结果
在这里插入图片描述

(二)添加按姓名查询用户记录功能

1,添加按姓名查询的映射语句

在UserMapper.xml里添加映射语句 - findByName
在这里插入图片描述如果要实现按姓名模糊查询用户记录,那么语句要做如下修改
在这里插入图片描述

2,在用户映射器接口里添加按姓名查询用户记录的方法

在UserMapper接口里添加findByName()方法
在这里插入图片描述

3,添加按姓名查询用户记录的测试方法

在测试类TestUserMapper里添加测试方法testFindByName()
在这里插入图片描述

4,测试按姓名查询用户记录

运行测试方法testFindByName(),查看结果
在这里插入图片描述

三,插入表记录

(一)添加插入映射语句

在UserMapper.xml文件里添加插入映射语句

<insert id="insert" parameterType="User"
        useGeneratedKeys="true" keyProperty="id">
    INSERT INTO t_user(name, age, address)
        VALUES(#{name}, #{age}, #{address})
</insert>

注意:

  1. id和parameterType分别与UserMapper接口中的insert方法的名字与参数类型一致。以#{name}的形式引用User参数的name属性,MyBatis将使用反射读取User参数该属性。#{name}中name大小写敏感。引用其它属性与此一致。
  2. UseGeneratedKeys="true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性。

在这里插入图片描述

(二)在用户映射器接口添加插入方法

在UserMapper接口里添加insert()方法,方法名insert与插入映射语句里的id值保持一致
在这里插入图片描述
在这里插入图片描述

(三)在测试类里测试插入方法

在测试类TestUserMapper里添加测试方法testInsert()
在这里插入图片描述

@Test                                        
public void testInsert() {                   
    // 创建用户对象                                
    User user = new User();                  
    // 设置对象属性                                
    user.setName("王雨涵");                     
    user.setAge(30);                         
    user.setAddress("龙马潭区长桥路2号");            
    // 插入用户记录                                
    int count = userMapper.insert(user);     
    // 提交数据库操作                               
    sqlSession.commit();                     
    // 判断插入记录是否成功                            
    if (count > 0) {                         
        System.out.println("恭喜,记录插入成功~");    
        System.out.println("插入的新记录:" + user);
    } else {                                 
        System.out.println("遗憾,记录插入失败~");    
    }                                        
}                                            

注意:对于增删改操作,必须要执行SQL会话对象的commit()方法才能生效。

(四)运行插入记录测试方法

运行测试方法testInsert(),查看结果
在这里插入图片描述

(五)运行按姓名查询测试方法

运行测试方法testFindByName(),查看结果
在这里插入图片描述
用户表里姓“王”的记录都被查询出来了

四,更新表记录

(一)在用户映射器配置文件里添加更新映射语句

在UserMapper.xml里添加update映射语句
在这里插入图片描述

<update id="update" parameterType="User">
        UPDATE t_user SET name = #{name},
                          age = #{age},
                          address = #{address} 
                      WHERE id = #{id};
</update>

(二)在用户映射器接口添加更新方法

在UserMapper接口里添加update()方法
在这里插入图片描述
在这里插入图片描述

(三)在测试类添加更新记录测试方法

在测试类TestUserMapper里添加测试方法testUpdate()

在这里插入图片描述

@Test // 测试更新用户记录                                    
public void testUpdate() {                           
    // 查找id为4的用户记录                                   
    User user = userMapper.findById(4);              
    // 输出更新前的记录                                      
    System.out.println("更新前的记录:" + user);            
    // 修改用户对象                                        
    user.setName("梁辰兴");                             
    user.setAge(25);                                 
    user.setAddress("北京朝阳区北苑路6号楼");                  
    // 更新用户记录                                        
    int count = userMapper.update(user);             
    // 判断更新是否成功                                      
    if (count > 0) {                                 
        // 提交数据库操作                                   
        sqlSession.commit();                         
        // 提示用户更新成功                                  
        System.out.println("恭喜,记录更新成功~");            
        System.out.println("更新后的记录:" + user);        
    } else {                                         
        // 提示用户更新失败                                  
        System.out.println("遗憾,记录更新失败~");            
    }                                                
}                                                    

(四)运行更新用户记录测试方法

运行测试方法testUpdate(),查看结果
在这里插入图片描述

五,删除表记录

(一)在用户映射器配置文件里添加删除映射语句

在UserMapper.xml文件里添加映射语句deleteById
在这里插入图片描述

注意:要设置参数类型。

<delete id="deleteById" parameterType="int">
    DELETE FROM t_user WHERE id = #{id};
</delete>

(二)在用户映射器接口里添加删除方法

在UserMapper接口里添加deleteById()方法,方法名要与删除映射语句的id值保持一致
在这里插入图片描述在这里插入图片描述

(三)在测试类里添加删除记录测试方法

在测试类TestUserMapper里添加测试方法testDeleteById()
在这里插入图片描述

// 按编号删除记录测试    
@Test                                              
public void testDeleteById() {                                       
    // 查找id为4的用户记录                                                   
    int id = 4;                                                      
    User user = userMapper.findById(id);                             
    // 输出待删除的记录                                                      
    System.out.println("待删记录:" + user);                              
    // 按编号删除用户记录                                                     
    int count = userMapper.deleteById(id);                           
    // 判断删除是否成功                                                      
    if (count > 0) {                                                 
        // 提交数据库操作                                                   
        sqlSession.commit();                                         
        // 提示用户删除成功                                                  
        System.out.println("恭喜,编号为[" + id + "]的记录删除成功~");            
    } else {                                                         
        // 提示用户删除失败                                                  
        System.out.println("遗憾,编号为[" + id + "]的记录删除失败~");            
    }                                                                
}                                                                    

(四)运行按编号删除记录测试方法

运行测试方法testDeleteById(),查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

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

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

相关文章

day02_第一个Java程序

在开发第一个Java程序之前&#xff0c;我们必须对计算机的一些基础知识进行了解。 常用DOS命令 Java语言的初学者&#xff0c;学习一些DOS命令&#xff0c;会非常有帮助。DOS是一个早期的操作系统&#xff0c;现在已经被Windows系统取代&#xff0c;对于我们开发人员&#xf…

5 个有效好用的恢复文件和照片的 Android恢复软件推荐

当我们使用移动设备时&#xff0c;有时会发现设备出现问题并不少见&#xff0c;但最好的 android 数据恢复应用程序可能会非常有帮助。虽然大多数电话故障只需一​​两天即可修复&#xff0c;但在某些情况下&#xff0c;电话几乎没电了&#xff0c;您无法访问宝贵的数据。幸运的…

知识图谱学习笔记——(三)知识图谱的存储与查询

一、知识学习 声明&#xff1a;知识学习中本文主体按照浙江大学陈华钧教授的《知识图谱》公开课讲义进行介绍&#xff0c;并个别地方加入了自己的注释和思考&#xff0c;希望大家尊重陈华钧教授的知识产权&#xff0c;在使用时加上出处。感谢陈华钧教授。 &#xff08;一&…

分子共价对接

共价对接 随着人们对共价抑制剂的发现越来越重视&#xff0c;越来越多的软件开始支持共价抑制的虚拟筛选。常用的共价对接软件有CovDock&#xff0c;AutoDock4&#xff0c;FITTED&#xff0c;GOLD&#xff0c;ICM-Pro与MOE等。共价抑制剂的典型特征是配体的亲电部分&#xff08…

【Maven】修改编码格式的多种方式

文章目录 方式一方式二方式三是否生效 为什么修改&#xff1f; 中文操作系统编码为GBK&#xff0c;Maven安装后会使用系统默认编码&#xff0c;编译含有中文字符的UTF-8格式源码文件时就出现编码不匹配的问题 场景&#xff1a;使用Maven编译项目&#xff0c;虽然提示编译成功&…

python-day6(补充四:私有属性与函数)

私有属性与函数 私有属性与函数的用途如何定义私有属性与函数如何访问私有属性与函数 私有属性与函数的用途 在面向对象的封装中&#xff0c;私有的属性与函数其根本目的是防止它们在类的外部被使用&#xff0c;python中主要通过命名来进行区分。 把可能使用到的东西封装起来…

用requestAnimationFrame替代setInterval制作匀速动画

了解过事件循环机制的朋友应该知道&#xff0c;siteTimeout和setInterval并不是精准的时间间隔&#xff0c;他们要等待其他优先的执行队列执行完成以后才能继续执行。 于是就引入了一个新的动画执行方式-- window.requestAnimationFrame()。它告诉浏览器——你希望执行一个动画…

少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(判断题)2022年9月

2022年9月scratch编程等级考试二级真题 判断题(共10题,每题2分,共20分) 26、程序中要判断角色是否碰到舞台边缘,可以使用运动模块中的“碰到舞台边缘”积木 答案:错 考点分析:考查积木分类,碰到舞台边缘积木是侦测模块中的积木而不是运动模块中的,所以错误 27、运行…

通信原理 数字基带信号之码间串扰

通信原理 数字基带信号之码间串扰目录 1.码间串扰 2.满足无码间串扰的条件 3.例题 1.码间串扰 2.满足无码间串扰的条件 nyquist带宽 Bfnw/2Π。 nyquist速率 RB2fn &#xff08;最高码元传输速率&#xff09;。 若RB满足等于nRB‘ n&#xff1d;1、2、3、4.....时 RB’为实际…

基于mybatis的网上招聘系统源码数据库论文

目 录 摘 要 Abstract 1 绪 论 1.1 开发背景 1.2 开发意义 1.3 国内外研究现状 1.4 论文结构 2 相关技术原理和开发工具 2.1 程序语言的选择 2.1.1 Java概述 2.1.2 Java特点 2.1.3 Servlet简介 2.2 Oracle数据库 2.3 B/S模式 2.3.1 B/S架构概…

城市轨道交通的GoA

导言 目前轨道系统中最常见的便是基于通信的列车控制系统&#xff08;Communication Based Train Control, CBTC)&#xff0c;其中各集成商各条线路采用了不同级别的自动化技术&#xff0c;本文将针对CBTC的运用&#xff0c;从其系统组成、系统升级改造、系统主要功能、自动化…

SAS学习第5章:方差分析之大纲及单因素试验

t检验能用来进行两个处理平均数之间的假设检验&#xff0c;但一般研究会出现多个处理优劣的比较&#xff0c;即需要进行多个处理平均数的假设检验&#xff0c;此时t检验不再适用&#xff0c;具体表现在检验量增加&#xff0c;如k个处理&#xff0c;要进行k*(k-1)/2次检验&#…

PyTorch简介

PyTorch是由Facebook AI实验室开发的一个深度学习框架&#xff0c;旨在提供高效的GPU加速和灵活的模型定义。PyTorch已经成为了深度学习领域的标准工具之一&#xff0c;广泛应用于图像识别、自然语言处理、计算机视觉等领域。 PyTorch的发展 自2017年发布以来&#xff0c;PyT…

day18_集合

今日内容 零、 复习昨日 一、集合框架体系 二、Collection 三、泛型 四、迭代 五、List 六、ArrayList 七、LinkedList 零、 复习昨日 晨考 一、集合框架体系 数组: 是一个容器,用来存放数据的 定长只能存储同一种数据类型的数据int[] 可以存储int值,Student[] 可以存储引用类型…

知识变现海哥|不具备这三种思维,劝你别做知识变现

&#xff08;本文首发公号跟海哥学知识变现&#xff0c;移步公号与100万知识变现/知识付费创业者&#xff0c;一起学知识变现知识付费干货&#xff0c;回‘领书’获取3本电子书&#xff1a;【知识付费秘籍】【知识创业者成长手册】【100个知识付费成功案例】&#xff09; 经常有…

单位公派|肿瘤科医生远赴英国伦敦大学学院访学交流

鉴于本单位数位同事都是委托知识人网落实的职位&#xff0c;所以F医生也找到我们。几番挑选又历经周转&#xff0c;最终远赴英国伦敦大学学院访学交流。 F医生背景&#xff1a; 申请类型&#xff1a;单位公派访问学者 工作背景&#xff1a;三甲医院 教育背景&#xff1a;博士…

腾讯云im:用户端来实现群组消息的功能

前言&#xff1a; 腾讯云im如果放在服务端来实现是非常便捷的&#xff0c;但是也受腾讯im的并发等限制&#xff0c;这里提供 用户端&#xff0c;也就是前端 来实现群组消息的相关功能。 实现效果&#xff1a; 实现具体功能需求&#xff1a; 1、群组中有主播、用户、助手、导…

Android 实现单指滑动、双指缩放照片

一、前景提示 最近接到一个查看大图的需求&#xff0c;现在图片展示还不够大&#xff0c;要求还要能缩小能放大还能保存照片。直接开始Google实现方式。 二、实现功能 根据查询到的结果分为两种&#xff0c;一个是使用手势监听来实现&#xff0c;第二种监听触摸事件来实现 …

引入Tuning function design的自适应反步控制方法 下篇

引入Tuning function design的自适应反步控制方法 下篇 目录 引入Tuning function design的自适应反步控制方法 下篇利用Turning function解决高阶不匹配系统的控制器设计问题问题描述控制器设计小结总结上一篇文章写了如何通过推迟参数设计的方法来解决不匹配条件下的系统反步…

怎样把flv转换成mp4,4种方法轻松学

怎样把flv转换成mp4&#xff1f;当我们下载到视频格式是flv的时候&#xff0c;我们就要想着把flv转换成mp4&#xff1f;为什么这么说呢&#xff1f;因为FLV流媒体格式是一种全新的视频格式&#xff0c;全称为Flash Video。由于它形成的文件极小、加载速度极快&#xff0c;使得网…