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

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

目录

删除

新增

 修改

查询

 小结:


删除功能

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

  • SQL:delete from user where id = 5;

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

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

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

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


新增功能

  • 需求:添加一个用户

  • SQL:

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

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

  • Mapper接口:

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

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

  • 单元测试:

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

@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接口方法:

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

单元测试:

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

@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接口方法:

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

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

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

  • 单元测试:

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

@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.kler.cn/a/505843.html

相关文章:

  • 《机器学习》——DBSCAN算法
  • 嵌入式系统Linux实时化(四)Xenomai应用开发测试
  • 2025 年前端开发学习路线图完整指南
  • 使用 Charles 调试 Flutter 应用中的 Dio 网络请求
  • Banana Pi BPI-RV2 RISC-V路由开发板采用矽昌通信SF2H8898芯片
  • 《数据思维》之数据可视化_读书笔记
  • Spark RPC 学习总结
  • 【数据结构-堆】力扣1834. 单线程 CPU
  • XML配置参数解析
  • ssm框架-springboot学习笔记
  • 探索 Docker 技术奥秘
  • 《零基础Go语言算法实战》【题目 4-10】在不使用任何内置散列表库的情况下设计一个 HashMap
  • 数据分析思维(十一):应用篇——用数据分析解决问题
  • 《OpenCV》——模版匹配
  • java.net.SocketException: Connection reset 异常原因分析和解决方法
  • 数据库第四天作业
  • Unity3D仿星露谷物语开发21之添加更多道具
  • 【机器学习】数据拟合-最小二乘法(Least Squares Method)
  • 苹果手机ios脚本用按键精灵文件配置代码
  • SpringBoot:使用HTTP2+protobuf实现高性能微服务调用(一)服务器端实现
  • Checkbox 多选框的使用
  • 微信小程序原生与 H5 交互方式
  • Django Admin 自定义操作封装
  • ssh,samba,tftp,nfs服务安装和配置
  • 【Java计算机毕业设计】基于SSM旅游景区网络购票系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
  • 19. 删除链表的倒数第 N 个结点【力扣】