2.8.Mybatis-基础操作-新增

Mybatis实现用户新增 此文档以哔哩哔哩up主黎曼的猜想发表的SSM框架合集为基础总结讲述idea下如何利用mybatis实现用户新增操作,此处记录,以便后续查阅复习总结之。 视频链接为:https://www.bilibili.com/video/BV1mE411X7yp?p=22 注:此文档以https://blog.csdn.net/qq_58156653/article/details/119302292(mybatis入门环境搭建,test测试控制台输出数据库信息)为基础 首先说明,笔者代码层级结构如下: 1 阅读详情

一.演示:

1.SQL语句:源代码

-- 插入(新增)数据-->有的数据比如有自增效果,可填可不填
insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)
         values ('Tom','汤姆','1','1.png',1,'2005-01-01',1,now(),now());
​

2.Mybatis语句-->需要注解@Insert:(代表插入数据)

上述图片的数据是写死的,为了复用性,要改为动态的:
方案1:把每个参数一一写入形参(但较繁琐);
方案2:把每个参数封装成一个对象,使用时直接传递对象即可:源代码
EmpMapper接口:
package com.itheima.mapper;
​
import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
​
@Mapper
public interface EmpMapper {
​
    //根据ID删除数据-->需要注解@Delete
    /* 删除的id不确定,因此需要定义为动态的,在调用接口里的方法时要用到id,
       所以要传递一个参数表示id。由于是动态的,还需要
     Mybatis里提供的参数占位符即#{参数名字}
     */
    @Delete("delete from emp where id = #{id}")
    public int delete(Integer id); //有返回值时代表一共操作了几条记录
​
​
​
    //新增员工
    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +
            " values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime});")
                                                                                 //下划线要换成驼峰命名
    public void insert(Emp emp);//形参是pojo里的Emp类对象
​
}
​
图片:


测试类里:
package com.itheima;
​
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.time.LocalDate;
import java.time.LocalDateTime;
​
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
​
    //注入接口对象
    @Autowired
    private EmpMapper empMapper;
​
    @Test
    public void testDelete(){
        int delete = empMapper.delete(16);
        System.out.println(delete);//运行结果为0
        /* 因为刚才已经把id为17的员工删除了,此时就无法删除了,
           故操作了0条数据
         */
    }
​
​
    @Test //@Test可以写多个
    public void testInsert(){
        //构造员工对象
        Emp emp=new Emp();
        emp.setUsername("Tom");
        emp.setName("汤姆");
        emp.setImage("1.jpg");
        emp.setGender((short)1 );
        emp.setJob((short)1);
        emp.setEntrydate(LocalDate.of(2000,1,1));
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        emp.setDeptId(1);
​
        //执行新增员工信息操作
        empMapper.insert(emp);
    }
​
}
​
图片:


运行结果:


二.总结:


三.主键返回:

四.演示主键返回:

1.代码:不加注解@Options时

a.EmpMapper接口里:

b.测试类里:
package com.itheima;
​
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.time.LocalDate;
import java.time.LocalDateTime;
​
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
​
    //注入接口对象
    @Autowired
    private EmpMapper empMapper;
​
    @Test
    public void testDelete(){
        int delete = empMapper.delete(16);
        System.out.println(delete);//运行结果为0
        /* 因为刚才已经把id为17的员工删除了,此时就无法删除了,
           故操作了0条数据
         */
    }
​
​
    @Test //@Test可以写多个
    public void testInsert(){
        //构造员工对象
        Emp emp=new Emp();
        emp.setUsername("Tom2");
        emp.setName("汤姆2");
        emp.setImage("1.jpg");
        emp.setGender((short)1 );
        emp.setJob((short)1);
        emp.setEntrydate(LocalDate.of(2000,1,1));
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        emp.setDeptId(1);
​
        //执行新增员工信息操作
        empMapper.insert(emp);
        System.out.println(emp.getId());//运行结果为null
    }
​
}
​
c.运行结果:

-->发现并没有拿到主键值-->默认情况下进行基础的插入操作是不会把主键值返回的


为了拿到主键值,应该加一个注解@Options


2.代码:加注解@Options时

a.EmpMapper接口里:
package com.itheima.mapper;
​
import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
​
@Mapper
public interface EmpMapper {
​
    //根据ID删除数据-->需要注解@Delete
    /* 删除的id不确定,因此需要定义为动态的,在调用接口里的方法时要用到id,
       所以要传递一个参数表示id。由于是动态的,还需要
     Mybatis里提供的参数占位符即#{参数名字}
     */
    @Delete("delete from emp where id = #{id}")
    public int delete(Integer id); //有返回值时代表一共操作了几条记录
​
​
​
    //新增员工
    @Options(useGeneratedKeys = true,keyProperty = "id")
     //useGeneratedKeys = true代表需要拿到生成的主键值,keyProperty = "id"代表获取的主键最终会封装到Emp对象的id属性当中
    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +
            " values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime});")
                                                                                 //下划线要换成驼峰命名
    public void insert(Emp emp);//形参是pojo里的Emp类对象
​
}

​
b.测试类里:
package com.itheima;
​
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.time.LocalDate;
import java.time.LocalDateTime;
​
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
​
    //注入接口对象
    @Autowired
    private EmpMapper empMapper;
​
    @Test
    public void testDelete(){
        int delete = empMapper.delete(16);
        System.out.println(delete);//运行结果为0
        /* 因为刚才已经把id为17的员工删除了,此时就无法删除了,
           故操作了0条数据
         */
    }
​
​
    @Test //@Test可以写多个
    public void testInsert(){
        //构造员工对象
        Emp emp=new Emp();
        emp.setUsername("Tom3");
        emp.setName("汤姆3");
        emp.setImage("1.jpg");
        emp.setGender((short)1 );
        emp.setJob((short)1);
        emp.setEntrydate(LocalDate.of(2000,1,1));
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        emp.setDeptId(1);
​
        //执行新增员工信息操作
        empMapper.insert(emp);
        System.out.println(emp.getId());//运行结果为21,代表id为21
    }
​
}
​
c.运行结果:


五.总结主键返回:


Mybatis2:基础操作 Mybatis2:基础操作 增删查改语句 阅读详情

相关推荐

【Mybatis小白从0到90%精讲】05:Mybatis新增(insert),要掌握的点位,都在这里

身为半自动ORM的Mybaits, 其在查询方面支持任意SQL, 表现出色,那么它在新增insert 方面表现又如何呢? 今天我们来实战 Mybatis新增(insert) 操作,看看它的表现是不是依然出色? 在讨论新增数据时,主要涉及两种情况:指定id 和 自增id。那么接下来,我们就将这两种情况说透,如果你看懂了本文,那么你就掌握了Mybatis新增insert。

天罡gg的专栏 497

Mybatis简单入门--插入数据

使用Mybatis实现简单的数据库插入操作,我们要编写的只有这6个文件:我们看看插入操作时,代码执行的主要过程是什么样的:还记得映射文件中两个一致吗??mapper接口的全类名和映射文件的**命名空间(namespace)**保持一致mapper接口中方法的方法名和映射文件中编写sql的标签的id属性保持一致看到执行过程后,应该明白了吧。部分内容来自B站尚硅谷课程。老师讲得很好,有兴趣的可以听听。...

weixin_51567051的博客 7547

MyBatis批量插入的五种方式归纳总结

这里我列举了MyBatis和MyBatis-Plus常用的五种批量插入的方式,进行了详细的总结归纳,写的非常详细,整体思路清晰明了,只分享干货。

黄团团的个人博客 1万+

mybatis中关于向数据库添加数据的两种方法

我是一个刚学习mybatis的新手,这是我自学整理的一部分内容,希望对您有帮助。user类(跟数据库表一致) userDao类里面方法设置: userMapper映射文件的设置 通过#{属性名}这样的方式可以获取参数对象的属性 mybatis主配置文件 将映射文件添加到主配置文件的中 导包 1、没有返回值的添加方式 2、带返回值的添加方法 (返回的是添加的行数) 2.1、需要创建一个声明字符串statement 里面存...

weixin_63243861的博客 5908

【MyBatis笔记07】MyBatis中的批量操作(批量新增、批量删除、批量更新)

批量删除情况下,一般是给定需要删除的记录标识,然后通过【IN】关键字,将其作为删除条件实现的。对数据的批量操作在实际开发过程里面是使用比较多的,从我个人的工作里面,我就遇见了很多的情况,比如:数据的批量新增,批量更新等等。注意:因为这里是执行了多条update语句,每次执行的update语句只会更新一条数据,所以mapper接口方法的返回值不是表示受影响的总记录数,而是最后一次执行update更新的记录数。批量插入之后,方法返回的是一个数字,这个数字代表的是受影响的行数,也就是成功插入了多少条数据。

✅ Java 开发工程师 4000

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 412

【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

性能更高更安全(防止SQL注入)性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

2039

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

Mybatis的基础操作

预编译SQL有两个优势:性能更高更安全(防止SQL注入)性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

一位努力搬砖的不入流程序猿 1224

给STM32供电,别只接VDD和GND!VBAT、VDDA这些引脚不接会怎样?

本文深入解析STM32电源设计中VBAT与VDDA引脚的关键作用,揭示仅连接VDD和GND可能导致的ADC精度下降、RTC功能异常等问题。通过实测数据对比不同连接方案,提供包括滤波电路设计、PCB布局布线和双电源自动切换在内的实用解决方案,帮助开发者优化系统稳定性与性能。

weixin_30521161的博客 623

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!!

本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法)

rousseaou8的博客 8万+

Mybatis—基础操作

Mybatis基础操作 准备工作 删除操作 日志输入 预编译SQL SQL注入 参数占位符 新增操作 基本新增 添加后返回主键 更新操作 查询操作 根据id查询 数据封装 条件查询 参数名说明

weixin_43739821的博客 674

2026工控高薪:C#上位机面试15题(含答案)

基础岗(10-15K):考察串口/Modbus/PLC通信基础;资深岗(20-30K):考察工业级优化(抗干扰/断线重连)、物联网(MQTT)、跨协议整合;架构岗(30K+):考察上位机架构设计、边缘计算、项目落地避坑。我整理了2026年近20场高薪岗位(月薪20K+)的面试高频题,筛选出15道核心题,每题标注“考察点+实战答案”——答案拒绝纯理论,全部结合车间现场、PLC通信、物联网落地等真实场景,帮你避开“背答案但不落地”的面试坑。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1280

Mybatis基础操作

本文介绍了使用MyBatis实现员工管理系统的开发过程。首先根据需求分析确定了查询、新增、更新和删除等功能模块,并完成了数据库表结构和测试数据的准备。接着详细讲解了SpringBoot项目的搭建步骤,包括引入MyBatis、MySQL驱动和Lombok依赖,配置数据库连接信息,创建实体类和Mapper接口。最后以删除功能为例,展示了如何通过Mapper接口实现根据ID删除数据的操作。整个项目采用标准的MVC架构,为后续开发完整的管理系统奠定了基础。

XING的博客 812

点云配准3:3d-ndt算法在pcl上的实现以及参数设置

3d-ndt算法在pcl上的使用方法以及参数设置

诺有缸的高飞鸟的博客 7891

华为OD机考双机位C卷 - 风险投资计划(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 风险投资计划(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 547

Javaweb之Mybatis的基础操作之新增和更新操作的详细解析

1.4 新增功能:新增员工信息编辑1.4.1 基本新增员工表结构:编辑SQL语句:登录后复制 insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values ('songyu...

weixin_41931099的博客 141

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

【QNX+Android虚拟化方案】00 - 系列文章链接汇总

|~~~热爱生活、努力学习的小伙汁~~~| 1万+

MyBatis基础操作

黑马程序员JavaWeb开发教程。

weixin_43866613的博客 984

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Mybatis 批量操作8种实现总结

Mybatis 批量操作8种实现总结超全带实例

程序员小强的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Mybatis——基础操作、动态SQL

目录一.基础操作1.删除2.新增3.更新4.查询5.XML映射文件二、动态SQL1.<if>2.<where>3.<set>4.<foreach>5.<sql>6.<include>参数占位符:注意: #{...}相比于${...}具有性能高、防止SQL注入的优势普通查询:条件查询:注意:#{...}不能放在' '当中,使用${..,},会发生SQL注入,解决办法是使用contact()函数数据封装: 实例: 二、动态SQL 1.<if> 用于判断条件是否成立。使用test属性进行条件判断,如果条件

l_tian_tian_的博客 531

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Mybatis-基础操作

Mybatis的基础操作就是通过Mybatis完成对数据的增删改查。

qq_65501197的博客 1235

【比较mybatis、lazy、sqltoy、mybatis-flex操作数据】操作批量新增、分页查询(二)

一万条数据以内 性能由高到低 mybatis-flex 、mybatis、sqltoy、lazy 其中mybatis和mybatis-flex 耗时基本相当十万数据时,处理时间由快到慢依次是: lazy、mybatis、mybatis-flex、sqltoy。

忙碌的吴小二博客 1274

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作学习完mybatis入门后,我们继续学习mybatis基础操作。1.1 需求需求说明编辑编辑通过分析以上的页面原型和需求,我们确定了功能列表:查询根据主键ID查询条件查询新增更新删除根据主键ID删除根据主键ID批量删除1.2 准备实施前的准备工作:准备数据库表创建一个新的springboot工...

cnzzs的博客 361

MyBatis 的 新增、修改、删除 操作

Mapper// 查询// 新增// 普通插入// 选择性插入(非空字段)// 修改// 全量更新// 选择性更新// 删除// 批量删除操作XML 标签关键技巧新增<insert>修改<update><set><if>实现选择性更新删除<delete><foreach>支持批量安全使用选择性操作避免 null 覆盖可靠结合保证数据一致性。

chxii的专栏 534
上一篇: 2.7.Mybatis-基础操作-删除
下一篇: 2.9.Mybatis-基础操作-更新
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值