MyBatis 之二(增、删、改操作)

回顾一下,在上一篇 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);
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_58761900/article/details/128998616