当前位置: 首页 > news >正文

MyBatis的添加(insert)操作

一、MyBatis添加操作的完整流程

1. 编写Mapper接口方法

  • 定义接口方法,用于添加数据。
  • 方法参数通常是一个实体类对象(如Brand),返回值一般为void或int(表示影响的行数)。

示例:

void add(Brand brand);
  • 这里的Brand是一个Java实体类,包含了品牌的所有属性(如brandName、companyName等)。
  • 方法名add和SQL映射文件中的<insert id="add">要一致。

2. 编写SQL语句(SQL映射文件)

  • 在对应的Mapper XML文件中,写<insert>标签,指定SQL语句。
  • 用#{属性名}来引用参数对象的属性,MyBatis会自动把Brand对象的属性值填进去。

示例:

<insert id="add">insert into tb_brand (brand_name, company_name, ordered, description, status)values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
</insert>
  • tb_brand是数据库表名。
  • 括号里的字段名要和数据库表结构一致。
  • #{brandName}等会自动取Brand对象的对应属性值。

3. 执行方法,测试功能

  • 在Service或测试类中调用add方法,传入一个Brand对象即可完成添加。

示例:

Brand brand = new Brand();
brand.setBrandName("华为");
brand.setCompanyName("华为技术有限公司");
brand.setOrdered(1);
brand.setDescription("中国知名品牌");
brand.setStatus(1);
brandMapper.add(brand);

 

4. MyBatis事务管理

  • MyBatis默认开启手动事务,即你执行完增删改操作后,必须手动提交事务,否则数据不会真正写入数据库。
  • 通过sqlSession.commit()提交事务。
  • 如果用openSession(true),则开启自动提交事务,增删改操作后会自动提交。

示例:

// 手动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession();
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
mapper.add(brand);
sqlSession.commit(); // 必须手动提交// 自动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
mapper.add(brand); // 自动提交,无需手动commit

二、添加过程中出现的ID 问题,如何获取ID 

1. 关键属性说明

  • useGeneratedKeys="true"

启用数据库的自增主键(auto_increment)功能,让MyBatis在插入数据后自动获取生成的主键值。

  • keyProperty="id"

指定Java实体类中用来接收主键值的属性名。比如你的Brand类有private Integer id;,插入后MyBatis会自动把生成的主键赋值给brand.id。

2. 工作原理

  • 当你执行add(brand)方法插入数据时,MyBatis会自动在数据库插入一条记录。
  • 数据库生成自增主键(如id=1001)。
  • MyBatis会自动把这个主键值赋给你传入的brand对象的id属性。
  • 这样你在Java代码里就能直接拿到新插入数据的主键id了

3. 代码示例

BrandMapper.xml

<insert id="add" useGeneratedKeys="true" keyProperty="id">insert into tb_brand (brand_name, company_name, ordered, description, status)values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
</insert>
public class Brand {private Integer id; // 必须有getter/setterprivate String brandName;// ...其他属性
}

 调用示例

Brand brand = new Brand();
brand.setBrandName("华为");
// ...设置其他属性
brandMapper.add(brand);
// 插入后,brand.getId() 就是数据库生成的主键id
System.out.println("新插入的id为:" + brand.getId());

4. 适用场景

  • 适用于主键自增(如MySQL的auto_increment)。
  • 常用于需要插入后马上用到主键id的场景(如插入主表后插入子表)。

5. 小结口诀

  • useGeneratedKeys="true":让数据库自动生成主键。
  • keyProperty="id":把主键值赋给Java对象的id属性。
  • 插入后直接用对象.getId()获取新id。
http://www.lqws.cn/news/569359.html

相关文章:

  • vue-30(理解 Nuxt.js 目录结构)
  • Ubuntu基础(上传文件和部署Python)
  • [database] Closure computation | e-r diagram | SQL
  • FastAPI + 大模型流式AI问答助手实战教程
  • 新生代潜力股刘小北:演艺路上的璀璨新星
  • ROS常用的路径规划算法介绍
  • Redis初识第五期---List的命令和使用场景
  • GPT,GPT-2,GPT-3 论文精读笔记
  • 怎样学习STM32
  • JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
  • C++11 异步编程(3)--- packaged_task
  • RDS MySQL vs. Aurora MySQL:高需求工作负载的终极迁移指南
  • 支持7种通信方式的通信测试工具
  • 面试150 有效的数独
  • 建造者模式 - Flutter中的乐高大师,优雅组装复杂UI组件!
  • TDengine 运维全攻略:五种备份与恢复方法深度解析(2025 最新版)
  • EPLAN Electric P8 2.9 零基础保姆级安装教程
  • 银行账户管理系统01
  • [Python] -基础篇3-掌握Python中的条件语句与循环
  • win上对调ctrl和alt键
  • java:如何用 JDBC 连接 TDSQL 数据库
  • HarmonyOS实战:自定义表情键盘
  • 云计算在布莱克-斯科尔斯模型中的应用:解析解、蒙特卡洛模拟与可视化-AI云计算数值分析和代码验证
  • FLOPS、FLOP/s、TOPS概念
  • Excel之证件照换底色3
  • Docker部署
  • 【Typst】纵向时间轴
  • 函数参数及数据结构说明
  • 一阶线性双曲型偏微分方程组的特征值与通解分析
  • ABP VNext + Twilio:全渠道通知服务(SMS/Email/WhatsApp)