前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你快速学会SpringBoot工程下MaBatis对数据的增删改查功能!

一文带你快速学会SpringBoot工程下MaBatis对数据的增删改查功能!

作者头像
reload
发布2024-04-10 10:23:04
2510
发布2024-04-10 10:23:04
举报
文章被收录于专栏:Java后端Java后端

本篇将带你快速学会在SpringBoot工程下,实现MaBatis对数据的增删改查功能。

一、环境准备

创建SpringBoot工程,数据库表 tb_user,实体类User,以及引入Mybatis相关依赖(创建springboot工程时已经引入),配置Mybatis(数据库连接信息),这些工作我们在 springboot整合 mybatis 的时候就已经完成,如果有不清楚的可以回看上一篇文章。

注意在创建工程,引入Mybatis相关依赖的时候也把 lombok勾选上。

在做数据的增删改查前,先来查询一下数据库 db1下的 tb_user表,一共四条数据,如下。方便后面测试后进行查看验证。

二、删除

需求:根据id删除用户数据,如删除 id为4的用户数据。

1、编写SQL

定义接口方法,在 UserMapper接口下添加删除方法

代码语言:javascript
复制
    // 根据id删除用户数据,参数占位符动态获取用户id
    @Delete("delete from tb_user where id = #{id}")
    public void delete(Integer id);

2、测试运行

在 springboot整合单元测试的类中,编写测试方法进行测试。

代码语言:javascript
复制
    @Autowired // 自动装配注入
    private UserMapper userMapper;

    @Test
    public void testDelete(){
        userMapper.delete(4);
    }

因为使用的是 void方法,所以运行结束后,控制台没有返回数据。直接刷新或再次查询一下 tb_user表,发现成功删除 id为4的用户数据。

注1:该删除方法也可以有返回值,其返回值为此次操作影响的记录数。只不过这里我们用了 void定义后无返回值。

注2:如果mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如: #{id}、#{value}。

3、预编译SQL

3.1 配置日志

在application.properties中,配置mybatis的日志,并指定输出到控制台。

输入mybatislog就会有提示

代码语言:javascript
复制
#指定mybatis输出日志的位置,输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置完成后再次启动测试,成功输出日志信息,即预编译SQL

3.2 预编译SQL好处

1)性能更高

2)更安全(防止SQL注入)

SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

关于SQL注入,之前的文章有介绍过,这里不再赘述。

三、增加

需求:往 tb_user表中插入一条用户数据。

1、编写SQL

1)首先对sql语句进行分析,由于设置了主键 id为自增,故 id不需要插入,其余字段都需要插入

代码语言:javascript
复制
insert into tb_user(username,name,age,gender) values ('Tom',汤姆,22,'男')

2)定义接口方法,在 UserMapper接口下添加新增方法

注:将多个参数封装到一个 user对象中,这样在调用 insert方法时就不用传递多个参数,而只需要传递user对象即可(该对象即为我们的实体类对象)。直接通过对象中的属性值来实现动态获取

代码语言:javascript
复制
    // 新增员工
    @Insert("insert into tb_user(username,name,age,gender) values (#{username},#{name},#{age},#{gender})")
    public void insert(User user);

2、测试运行

在 springboot整合单元测试的类中,编写测试方法进行测试。

代码语言:javascript
复制
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        // 构造用户对象
        User user = new User();
        user.setUsername("Tom");
        user.setName("汤姆");
        user.setAge((short) 22);
        user.setGender("男");
        // 执行新增用户信息操作
        userMapper.insert(user);
    }

运行后控制台输出的结果如下

返回数据库查询 tb_user表,发现新增用户成功

3、主键返回功能实现

3.1 背景

在数据添加成功后,需要获取插入数据库数据的主键。

如: 在点餐系统业务中,添加套餐数据时,还需要维护套餐菜品关系表数据。具体两步如下:

1.先保存套餐信息,并获取套餐ID。

2.然后再保存套餐菜品关联信息(需要记录套餐ID、菜品ID)

3.2 实现

需要在接口方法上添加如下注解

注:该注解会自动将生成的主键值,赋值给emp对象的id属性

代码语言:javascript
复制
    // 新增用户
    @Options(keyProperty = "id",useGeneratedKeys = true) // 添加注解,实现主键返回
    @Insert("insert into tb_user(username,name,age,gender) values (#{username},#{name},#{age},#{gender})")
    public void insert(User user);
3.3 测试

修改测试方法里面的测试数据,重新启动运行,控制台成功输出返回的主键值。

再返回数据库查询 tb_user表,发现多了一条新增的 id为8的用户信息。

四、修改

在实际的业务中,点击修改按钮一般都会弹出一个表单,并显示可以修改的数据,如下

所以修改数据,要完成如下两个需求

需求1:根据 id查询数据用于回显。

需求2:根据 id修改数据。

1、数据回显

根据id查询用户,用于修改前的回显

1.1 编写SQL

定义接口方法,在 UserMapper接口下添加查询方法

注:该方法有返回值,由于查询返回的是一条数据,所以直接将查询返回的结果封装到一个 user对象中,而不是封装到 List集合。

代码语言:javascript
复制
    // 修改用户
    // 1.根据id查询用户,用于修改前的回显
    @Select("select * from tb_user where id = #{id}")
    public User getById(Integer id);
1.2 测试运行

在 springboot整合单元测试的类中,编写测试方法进行测试。

代码语言:javascript
复制
    // 根据id查询用户
    @Test
    public void testGetById(){
        User user=userMapper.getById(8);
        System.out.println(user);
    }

运行后控制台输出的结果如下,成功返回 id为8的用户数据。

1.3 注意事项

1、实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。

2、如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

解决方法如下:

推荐使用最后一种方式

2、修改数据

经过上一步,将查询的数据回显出来后,就需要对其进行修改。

1.1 编写SQL

定义接口方法,在 UserMapper接口下添加修改方法

注:同样参考新增的方法,将多个参数封装到一个 user对象中,直接通过对象中的属性值来实现动态获取。

代码语言:javascript
复制
    // 修改用户
    // 2.更新用户(根据id修改数据)
    @Update("update tb_user set username = #{username},name = #{name},age = #{age},gender = #{gender} where id= #{id}")
    public void update(User user);
1.2 测试运行

在 springboot整合单元测试的类中,编写测试方法进行测试。

代码语言:javascript
复制
    // 根据id修改用户
    @Test
    public void testUpdate(){
        // 构造用户对象
        User user = new User();
        user.setUsername("Tom2");
        user.setName("汤姆2");
        user.setAge((short) 22);
        user.setGender("男");
        // 执行更新用户信息操作
        userMapper.update(user);
    }

运行后控制台输出的结果如下,说明已成功修改。

五、查询

1、条件查询

如查询用户姓名包含"张"的男性用户(采用 like模糊匹配)

1.1 编写SQL

定义接口方法,在 UserMapper接口下添加新增方法

注:根据条件查询,查询的结果可能不止一条,所以要封装到一个 List集合中,集合的泛型就是我们的 user对象。

需要根据条件查询的字段,来指定方法中的形参

代码语言:javascript
复制
    // 根据条件查询用户,这里采用了concat方法
    @Select("select * from tb_user where name like concat('%',#{name},'%') and gender = #{gender}")
    public List<User> list(String name,String gender);
1.2 测试运行

在 springboot整合单元测试的类中,编写测试方法进行测试。

代码语言:javascript
复制
    // 根据条件查询用户
    @Test
    public void testList(){
        List<User> userList = userMapper.list("张", "男");
        System.out.println(userList);
    }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农后端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境准备
  • 二、删除
    • 1、编写SQL
      • 2、测试运行
        • 3、预编译SQL
          • 3.1 配置日志
          • 3.2 预编译SQL好处
      • 三、增加
        • 1、编写SQL
          • 2、测试运行
            • 3、主键返回功能实现
              • 3.1 背景
              • 3.2 实现
              • 3.3 测试
          • 四、修改
            • 1、数据回显
              • 1.1 编写SQL
              • 1.2 测试运行
              • 1.3 注意事项
            • 2、修改数据
              • 1.1 编写SQL
              • 1.2 测试运行
          • 五、查询
            • 1、条件查询
              • 1.1 编写SQL
              • 1.2 测试运行
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档