本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:🔥JavaWeb
Java入门篇: 🔥Java基础学习篇
Java进阶学习篇(持续更新中):🔑Java进阶学习篇
本系列文章会将讲述有关于如何使用MyBatis完成增删查改的操作,预计本系列文章会有以下这些文章,在写完本系列的文章后会有一篇文章罗列这些文章以及其地址(传送门)小伙伴们直接点击查看即可
文章名称 | 文章地址 |
---|---|
查询所有数据 | 使用映射配置文件实现CRUD操作——查询所有数据 |
查询详情 | 使用映射配置文件实现CRUD操作——通过主键查询对应数据 |
使用映射配置文件实现CRUD操作——多条件查询 | |
使用映射配置文件实现CRUD操作——动态SQL优化条件查询 | |
添加数据 | |
修改全部字段 | |
修改动态字段 | |
删除一条数据 | |
批量删除数据 |
文章目录
- 一、前言
- 二、添加数据
- 1.BrandMapper接口
- 2.SQL语句
- 3.测试类
- 三、返回主键
- 1.概述
- 2.将id绑定到对象
- 3.改写测试类
- 4.完整代码
- 四、结语
一、前言
本文将讲述有关于添加数据以及添加完数据能够返回主键的功能,这在实际的业务中会有如下的场景:在订单页面会有一个订单项,在订单项处会显示出自己选购的商品,那么要显示自己选购的商品就必然要返回该数据的主键,因此添加完数据能够返回主键的功能是需要重点掌握的
二、添加数据
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(主键)返回到控制台,是个重点,接下来将讲述有关于修改字段的知识点