Javaweb之Mybatis的基础操作之新增和更新操作的详细解析

2024-01-08 00:23:11

1.4 新增

功能:新增员工信息

1.4.1 基本新增

员工表结构:

SQL语句:

insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values ('songyuanqiao','宋远桥',1,'1.jpg',2,'2012-10-09',2,'2022-10-01 10:00:00','2022-10-01 10:00:00');

接口方法:

@Mapper
public interface EmpMapper {
?
 ? ?@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
 ? ?public void insert(Emp emp);
?
}

说明:#{...} 里面写的名称是对象的属性名

测试类:

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDate;
import java.time.LocalDateTime;
?
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
 ? ?@Autowired
 ? ?private EmpMapper empMapper;
?
 ? ?@Test
 ? ?public void testInsert(){
 ? ? ? ?//创建员工对象
 ? ? ? ?Emp emp = new Emp();
 ? ? ? ?emp.setUsername("tom");
 ? ? ? ?emp.setName("汤姆");
 ? ? ? ?emp.setImage("1.jpg");
 ? ? ? ?emp.setGender((short)1);
 ? ? ? ?emp.setJob((short)1);
 ? ? ? ?emp.setEntrydate(LocalDate.of(2000,1,1));
 ? ? ? ?emp.setCreateTime(LocalDateTime.now());
 ? ? ? ?emp.setUpdateTime(LocalDateTime.now());
 ? ? ? ?emp.setDeptId(1);
 ? ? ? ?//调用添加方法
 ? ? ? ?empMapper.insert(emp);
 ?  }
}
?

日志输出:

1.4.2 主键返回

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

如:添加套餐数据时,还需要维护套餐菜品关系表数据。

业务场景:在前面讲解到的苍穹外卖菜品与套餐模块的表结构,菜品与套餐是多对多的关系,一个套餐对应多个菜品。既然是多对多的关系,是不是有一张套餐菜品中间表来维护它们之间的关系。

在添加套餐的时候,我们需要在界面当中来录入套餐的基本信息,还需要来录入套餐与菜品的关联信息。这些信息录入完毕之后,我们一点保存,就需要将套餐的信息以及套餐与菜品的关联信息都需要保存到数据库当中。其实具体的过程包括两步,首先第一步先需要将套餐的基本信息保存了,接下来第二步再来保存套餐与菜品的关联信息。套餐与菜品的关联信息就是往中间表当中来插入数据,来维护它们之间的关系。而中间表当中有两个外键字段,一个是菜品的ID,就是当前菜品的ID,还有一个就是套餐的ID,而这个套餐的 ID 指的就是此次我所添加的套餐的ID,所以我们在第一步保存完套餐的基本信息之后,就需要将套餐的主键值返回来供第二步进行使用。这个时候就需要用到主键返回功能。

那要如何实现在插入数据之后返回所插入行的主键值呢?

  • 默认情况下,执行插入操作时,是不会主键值返回的。如果我们想要拿到主键值,需要在Mapper接口中的方法上添加一个Options注解,并在注解中指定属性useGeneratedKeys=true和keyProperty="实体类属性名"

主键返回代码实现:

@Mapper
public interface EmpMapper {
 ? ?
 ? ?//会自动将生成的主键值,赋值给emp对象的id属性
 ? ?@Options(useGeneratedKeys = true,keyProperty = "id")
 ? ?@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
 ? ?public void insert(Emp emp);
?
}

测试:

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
 ? ?@Autowired
 ? ?private EmpMapper empMapper;
?
 ? ?@Test
 ? ?public void testInsert(){
 ? ? ? ?//创建员工对象
 ? ? ? ?Emp emp = new Emp();
 ? ? ? ?emp.setUsername("jack");
 ? ? ? ?emp.setName("杰克");
 ? ? ? ?emp.setImage("1.jpg");
 ? ? ? ?emp.setGender((short)1);
 ? ? ? ?emp.setJob((short)1);
 ? ? ? ?emp.setEntrydate(LocalDate.of(2000,1,1));
 ? ? ? ?emp.setCreateTime(LocalDateTime.now());
 ? ? ? ?emp.setUpdateTime(LocalDateTime.now());
 ? ? ? ?emp.setDeptId(1);
 ? ? ? ?//调用添加方法
 ? ? ? ?empMapper.insert(emp);
?
 ? ? ? ?System.out.println(emp.getDeptId());
 ?  }
}

1.5 更新

功能:修改员工信息

点击"编辑"按钮后,会查询所在行记录的员工信息,并把员工信息回显在修改员工的窗体上(下个知识点学习)

在修改员工的窗体上,可以修改的员工数据:用户名、员工姓名、性别、图像、职位、入职日期、归属部门

思考:在修改员工数据时,要以什么做为条件呢?

答案:员工id

SQL语句:

update emp set username = 'linghushaoxia', name = '令狐少侠', gender = 1 , image = '1.jpg' , job = 2, entrydate = '2012-01-01', dept_id = 2, update_time = '2022-10-01 12:12:12' where id = 18;

接口方法:

@Mapper
public interface EmpMapper {
 ? ?/**
 ? ? * 根据id修改员工信息
 ? ? * @param emp
 ? ? */
 ? ?@Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} where id=#{id}")
 ? ?public void update(Emp emp);
 ? ?
}

测试类:

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
 ? ?@Autowired
 ? ?private EmpMapper empMapper;
?
 ? ?@Test
 ? ?public void testUpdate(){
 ? ? ? ?//要修改的员工信息
 ? ? ? ?Emp emp = new Emp();
 ? ? ? ?emp.setId(23);
 ? ? ? ?emp.setUsername("songdaxia");
 ? ? ? ?emp.setPassword(null);
 ? ? ? ?emp.setName("老宋");
 ? ? ? ?emp.setImage("2.jpg");
 ? ? ? ?emp.setGender((short)1);
 ? ? ? ?emp.setJob((short)2);
 ? ? ? ?emp.setEntrydate(LocalDate.of(2012,1,1));
 ? ? ? ?emp.setCreateTime(null);
 ? ? ? ?emp.setUpdateTime(LocalDateTime.now());
 ? ? ? ?emp.setDeptId(2);
 ? ? ? ?//调用方法,修改员工数据
 ? ? ? ?empMapper.update(emp);
 ?  }
}

文章来源:https://blog.csdn.net/qq_69748833/article/details/135419650
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。