文章目录
- 1. 修改操作
- 1.1 在 mapper(interface)里面添加修改方法的声明
- 1.2 在 XMl 中添加 <update> 标签和修改的 sql 代码
- 1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类
- 2. 删除操作
- 2.1 在 mapper (interface)中添加删除的代码声明
- 2.2 在 XMl 中添加 <delete> 标签和删除的 sql 代码
- 2.3 在 UserMapper 中右键 Generate 点击 Test 生成 delete 测试类
- 3. 添加操作
- 3.1 添加用户,返回受影响的行数
- 3.1.1 在 mapper(interface)添加方法声明
- 3.1.2 在 XML 中添加<insert>标签和添加的 sql 代码
- 3.1.3 生成测试类
- 3.2 添加用户,返回自增 id
- 3.2.1 添加方法声明
- 3.2.2 在 XML 中添加 <insert> 标签和添加的 sql 代码
- 3.2.3 生成测试类
回顾一下,在上一篇 MyBatis 之一(概念、创建项目、操作模式、交互流程)中,学习了 MyBatis 是一款优秀的持久层框架,学习 MyBatis 可以更方便快速的操作数据库,也学习了如何搭建 MyBatis 的开发环境,与使用 MyBatis 模式和语法操作数据库,并且也简单的了解了 MyBatis 框架的交互流程
本篇将学习如何用 MyBatis 进行数据库的增、删、改操作
这三个操作对应使用 MyBatis 的标签为
- insert 标签:插入语句
- update 标签:修改语句
- delete 标签:删除语句
1. 修改操作
还是使用上一篇中创建的数据库,再给 userinfo 表中添加一条数据
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(2, 'zhangsan', 'zhangsan', '', '2021-5-21 17:10:48', '2022-5-21 17:10:48', 1);
1.1 在 mapper(interface)里面添加修改方法的声明
@Mapper
public interface UserMapper {
// 修改方法【根据 id 修改名称】
public int update(@Param("id") Integer id,
@Param("name") String username);
}
1.2 在 XMl 中添加 标签和修改的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper">
<!-- 根据用户 id 修改用户名称 -->
<update id="update">
update userinfo set username=#{name} where id=#{id}
</update>
</mapper>
1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void update() {
int result = userMapper.update(2,"老六");
Assertions.assertEquals(1,result);
}
}
通过断言 asserEquals 判断如果 sql 受影响行数为1,就运行正确,下面运行程序
然后在 mySQL中 查询,可以看到这样的测试默认情况下是污染数据库的
在不污染数据的前提下,执行单元测试,要添加注解 @Transactional
运行程序,可以看到程序虽然执行成功了,但查询数据后,没有被污染
2. 删除操作
2.1 在 mapper (interface)中添加删除的代码声明
@Mapper
public interface UserMapper {
// 删除方法
public int delete(@Param("id") Integer id);
}
2.2 在 XMl 中添加 标签和删除的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper">
<!-- 根据用户 id 删除用户 -->
<delete id="delete">
delete from userinfo where id=#{id}
</delete>
</mapper>
2.3 在 UserMapper 中右键 Generate 点击 Test 生成 delete 测试类
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void delete() {
int result = userMapper.delete(2);
System.out.println("受影响的行数:" + result);
Assertions.assertEquals(1, result);
}
}
我这里没添加@Transactiona,所以就直接把这条数据删除了
3. 添加操作
3.1 添加用户,返回受影响的行数
3.1.1 在 mapper(interface)添加方法声明
@Mapper
public interface UserMapper {
// 添加用户,返回受影响的行数
public int add(Userinfo userinfo);
}
3.1.2 在 XML 中添加标签和添加的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper">
<!-- 添加用户,返回受影响的行数 -->
<insert id="add">
insert into userinfo(username,password,photo) values(#{username},#{password},#{photo})
</insert>
</mapper>
3.1.3 生成测试类
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void add() {
Userinfo userinfo = new Userinfo();
userinfo.setUsername("王五");
userinfo.setPassword("123");
userinfo.setPhoto("default.png");
int result = userMapper.add(userinfo);
System.out.println("添加的结果:" + result);
Assertions.assertEquals(1,result);
}
}
3.2 添加用户,返回自增 id
3.2.1 添加方法声明
@Mapper
public interface UserMapper {
// 添加用户,返回受影响的行数和自增的 id
public int addGetId(Userinfo userinfo);
}
3.2.2 在 XML 中添加 标签和添加的 sql 代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 是设置要实现的接口的具体包名 + 类名-->
<mapper namespace="com.example.mybatisdome1.mapper.UserMapper">
<!-- 添加用户,返回受影响的行数和自增 id -->
<insert id="addGetId" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into userinfo(username,password,photo) values(#{username},#{password},#{photo})
</insert>
</mapper>
3.2.3 生成测试类
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void addGetId() {
Userinfo userinfo = new Userinfo();
userinfo.setUsername("张三");
userinfo.setPassword("123");
userinfo.setPhoto("default.png");
System.out.println("添加之前 user id:" + userinfo.getId());
int result = userMapper.addGetId(userinfo);
System.out.println("受影响的行数:" + result);
System.out.println("添加之后 uer id:" + userinfo.getId());
Assertions.assertEquals(1,result);
}
}