MyBatis-增删改查操作一些细节

devtools/2025/1/19 1:06:14/

目录

删除

新增

 修改

查询

 小结:


删除功能

  • 需求:根据ID删除用户信息

  • SQL:delete from user where id = 5;

  • Mapper接口方法(注意这里不是实现类

    java">/*** 根据id删除*/
    @Delete("delete from user where id = #{id}")
    public void deleteById(Integer id);
  • 编写单元测试方法进行测试

java">@Test
public void testDeleteById(){userMapper.deleteById(36);
}

运行单元测试,结果如下:


新增功能

  • 需求:添加一个用户

  • SQL:

    insert into user(username,password,name,age) values('zhouyu','123456','周瑜',20);

    //user后加()用来指定要为user的哪些属性赋值,这个很重要很常用。

  • Mapper接口:

java">/*** 添加用户*/
@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user);

(重点) 如果在SQL语句中,我们需要传递多个参数,我们可以把多个参数封装到一个对象中。然后在SQL语句中,我们可以通过#{对象属性名}的方式,获取到对象中封装的属性值。

  • 单元测试:

在测试类中添加测试方法,代码如下:

java">@Test
public void testInsert(){User user = new User();user.setUsername("admin");user.setPassword("123456");user.setName("管理员");user.setAge(30);userMapper.insert(user);
}

这里如果采用有参构造,对于不需要赋值的属性可以设置为null,小细节。 

例如:User user = new User(null, "lisi", "123", "李四", 23,null);

运行结果如下:

 


 修改功能

  • 需求:根据ID更新用户信息

  • SQL:

    update user set username = 'zhouyu', password = '123456', name = '周瑜', age = 20 where id = 1;

  • Mapper接口方法:

java">/*** 根据id更新用户信息*/
@Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
public void update(User user);

单元测试:

在测试类中添加测试方法,代码如下:

java">@Test
public void testUpdate(){User user = new User();user.setId(6);user.setUsername("admin666");user.setPassword("123456");user.setName("管理员");user.setAge(30);userMapper.update(user);
}

运行结果如下:

 


查询功能

  • 需求:根据用户名和密码查询用户信息

  • SQL:select* from user where user name = 'zhouyu' and password = '123456'

  • Mapper接口方法:

java">/*** 根据用户名和密码查询用户信息*/
@Select("select * from user where username = #{username} and password = #{password}")
public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

(重点) @param注解的作用是为接口的方法形参起名字的。(由于用户名唯一的,所以查询返回的结果最多只有一个,可以直接封装到一个对象中)

说明:基于官方骨架创建的springboot项目中,接口编译时会保留方法形参名,@Param注解可以省略 (#{形参名})。

  • 单元测试:

在测试类中添加测试方法,代码如下:

java">@Test
public void testFindByUsernameAndPassword(){User user = userMapper.findByUsernameAndPassword("admin666", "123456");System.out.println(user);
}

 运行结果如下:


 小结:

1. @Param 注解的使用场景 ?
如果接口方法形参中,需要传递多个参数,需要通过 @Param 注解为参数起名字;
在基于SpringBoot 官方骨架创建的 SpringBoot 项目中,该注解可以省略;
2. 在sql语句中通过表后加()的方式用来指定要为表的哪些字段赋值。
3. 在进行测试时,如果采用有参构造对对象进行初始化,那么对于不需要赋值的属性可以设置为null,小细节。 


http://www.ppmy.cn/devtools/151708.html

相关文章

使用 Kubernetes 实现负载均衡

使用 Kubernetes 实现负载均衡,可以通过 Kubernetes 的内置服务(Service)资源,配合负载均衡器(如云平台提供的负载均衡器或 Ingress 控制器)来完成。以下是详细的步骤和调优案例。 一、Kubernetes 负载均衡…

Redisson分布式锁的原理和实践?

目录 Redisson分布式锁的原理和实践? 一、Redisson分布式锁的原理 二、Redisson分布式锁的实践 Redisson通过看门狗(Watchdog)定时任务自动续锁原理 一、看门狗机制的核心作用 二、看门狗机制的实现原理 三、看门狗机制的使用场景 四、注意事项 Redisson分布式锁的原…

Vue3使用vue-count-to数字滚动模块报错解决方案

小伙伴们是不是遇到了vue3项目使用vue-count-to出现报错的问题 报错如下: TypeError: Cannot read properties of undefined (reading _c) 这个错误信息具体是说没读取到_c的属性 具体不清楚是什么原因,排查还得去看源码,所以我们来解决&a…

代理模式实现

一、概念:代理模式属于结构型设计模式。客户端不能直接访问一个对象,可以通过代理的第三者来间接访问该对象,代理对象控制着对于原对象的访问,并允许在客户端访问对象的前后进行一些扩展和处理;这种设置模式称为代理模…

SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。

SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。以下是SK海力士的一些主要产品型号和类别: DRAM 产品 DDR4 DRAM 特点: 高速、低功耗,广泛应用于PC、服务器和移…

选择saas 还是源码主要考虑

公司业务规模:小型企业可能会发现SaaS提供的即用型解决方案更符合其需求,而大型企业可能需要源码以实现更高的定制性和控制权。 公司技术专长:缺乏技术团队的企业可能会倾向于使用SaaS,而那些拥有强大IT部门的企业可能更适合管理…

【优选算法】三数之和(双指针算法)

必须有为成功付出代价的决心,然后想办法付出这个代价。 目录 一、【题目:15. 三数之和 - 力扣(LeetCode)】 二、【代码原理】 三、【代码】 一、【题目:15. 三数之和 - 力扣(LeetCode)】 需…

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…