MyBatis案例 | 使用映射配置文件实现CRUD操作——添加数据

文章详细介绍了在JavaWeb开发中,如何使用MyBatis框架进行数据的添加,并返回主键。通过BrandMapper接口定义添加方法,编写SQL语句,设置useGeneratedKeys和keyProperty属性来获取自动生成的主键。在测试类中执行添加操作,提交事务,确保数据保存到数据库,并展示如何从对象中获取新添加数据的主键。
摘要由CSDN通过智能技术生成

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:🔥JavaWeb
Java入门篇: 🔥Java基础学习篇
Java进阶学习篇(持续更新中):🔑Java进阶学习篇

在这里插入图片描述
本系列文章会将讲述有关于如何使用MyBatis完成增删查改的操作,预计本系列文章会有以下这些文章,在写完本系列的文章后会有一篇文章罗列这些文章以及其地址(传送门)小伙伴们直接点击查看即可

文章名称文章地址
查询所有数据使用映射配置文件实现CRUD操作——查询所有数据
查询详情使用映射配置文件实现CRUD操作——通过主键查询对应数据
使用映射配置文件实现CRUD操作——多条件查询
使用映射配置文件实现CRUD操作——动态SQL优化条件查询
添加数据
修改全部字段
修改动态字段
删除一条数据
批量删除数据

一、前言

本文将讲述有关于添加数据以及添加完数据能够返回主键的功能,这在实际的业务中会有如下的场景:在订单页面会有一个订单项,在订单项处会显示出自己选购的商品,那么要显示自己选购的商品就必然要返回该数据的主键,因此添加完数据能够返回主键的功能是需要重点掌握的
在这里插入图片描述

二、添加数据

1.BrandMapper接口

这里只需要构造一个含参数的add方法即可,括号内返回的参数是Brand实体类和brand对象,然后在爆红处直接使用快捷键Alt+Enter生成Statement

void add(Brand brand);

2.SQL语句

添加数据可以用INSERT ··· INTO语句来写,由于此时不确定我们要添加的数据是什么,所以这里依然使用参数占位符来书写语句,这里应该没有太多难点,直接上代码

insert into tb_brand(brand_Name,company_name,ordered,description,status)
values (#{brandName},#{companyName},#{ordered},#{description},#{status})

3.测试类

这里需要我们传递进去参数,即我们要先设置好参数以后,传递到Brand类中,用Brand类new出来的对象调用set方法,后面的代码与之前相同,我们来执行查看一下结果

        int status = 1;
        String brandName = "戴尔";
        String companyName = "戴尔公司";
        String description = "激发人类潜能 —— 这是技术的终极意义,也是戴尔所做一切的源动力";
        int ordered = 100;

        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);

在这里插入图片描述
这里可以看出有成功添加数据,但是在表格中没有这条添加的数据,刷新完了也没有,这是因为没有提交事务,所以它无法提交到表格中,自然也就不会更新数据了;如下图所示,Setting autocommit to false on JDBC Connection,所以这里我们要在执行完方法后多加一个提交事务的语句
在这里插入图片描述

提交事务

sqlSession.commit();

这时候再执行一下语句,发现表格更新了,出现了我们刚刚新增的数据,如果不写这个提交事务的话,也可以在openSession方法中传递参数true,开启自动提交事务
在这里插入图片描述

三、返回主键

1.概述

如果需要将刚添加成功的数据添加到订单项的数据库中,那么必然要设置所属订单的id,那么就需要获取id,也就是在添加完数据后要返回主键。其实在刚刚我们执行了SQL语句后,id就已经存在了,只不过没有绑定到对象中,所以我们要绑定一下才行

2.将id绑定到对象

这里只需要设置两个参数就可以完成绑定,并将添加完的数据的id返回出来:useGeneratedKeys="true"以及keyProperty="id"

    <!--添加数据-->
    <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>

3.改写测试类

在执行方法时,要获取id,就要调用get方法,并打印输出,看结果

Integer id = brand.getId();
System.out.println(id);

执行结果

Brand{id=6, brandName=‘惠普’, companyName=‘惠普公司’, ordered=75, description=‘作为一家科技公司,我们的目标不仅仅是赚取丰厚的利润。还希望能够让世界变得更加美好’, status=1}
6

4.完整代码

public class MyBatisTest_add {
    @Test
    public void add() throws IOException {
        //接收参数
        int status = 1;
        String brandName = "惠普";
        String companyName = "惠普公司";
        String description = "作为一家科技公司,我们的目标不仅仅是赚取丰厚的利润。还希望能够让世界变得更加美好";
        int ordered = 75;

        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);

        //加载MyBatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


        //SqlSession获取对象
        SqlSession sqlSession = sqlSessionFactory.openSession();


        //获取BrandMapper接口代理对象
        BrandMapper brandMapper= sqlSession.getMapper(BrandMapper.class);

        //执行方法
        brandMapper.add(brand);
        Integer id = brand.getId();

        //提交事务
        sqlSession.commit();

        //打印结果
        System.out.println(brand);
        System.out.println(id);

        //释放资源
        sqlSession.close();
    }
}

四、结语

添加数据比较简单,主要是能够将添加完的数据id(主键)返回到控制台,是个重点,接下来将讲述有关于修改字段的知识点

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值