MyBatis框架学习笔记02:使用MyBatis实现CRUD操作

Ⅰ、查询表记录

  • 打开MyBatisDemo项目,笔记01中我在UserMapper.xml里定义了两个查询语句:findById和findAll,对应的在UserMapper接口里定义了两个抽象方法:findById(int id)和findAll()。

(Ⅰ)、在映射器配置文件里引入结果映射元素

在这里插入图片描述

  • 运行测试类TestUserMapper里的testFindAll()测试方法,查看结果
    在这里插入图片描述

(Ⅱ)、添加按姓名查询用户记录功能

1)、在UserMapper.xml里添加映射语句 - findByName

在这里插入图片描述

  • 如果要实现按姓名模糊查询用户记录,那么要用SELECT * FROM t_user WHERE name LIKE CONCAT(#{name},"%");

2)、在UserMapper接口里添加findByName()方法

List<User> findByName(String name);

在这里插入图片描述

3)、在测试类TestUserMapper里添加测试方法testFindByName()

在这里插入图片描述

@Test
    public void testFindByName() {
        String name = "王";
        List<User> users = userMapper.findByName(name);
        if (users.size() > 0) {
            users.forEach(user -> System.out.println(user));
        }else {
            System.out.println("姓名为[" + name + "]的记录未找到。");
        }
    }

4)、运行测试方法testFindByName(),查看结果

在这里插入图片描述

  • 目前用户表里姓“王”的只有一台哦记录,待会儿我们再插入一条姓王的记录,再次运行该查询方法,就会显示全部姓“王”的记录。

Ⅱ、插入表记录

(Ⅰ)、在UserMapper.xml里增加映射语句 -insert

<insert id="insert" parameterType="User"
            useGeneratedKeys="true" keyProperty="id">
        INSERT INTO t_user(name, age, address)
        VALUES(#{name}, #{age}, #{address});
</insert>

在这里插入图片描述

  • id和parameterType分别与UserMapper接口中的insert方法的名字与参数类型一致。以#{name}的形式引用User参数的name属性,MyBatis将使用反射读取User参数该属性。#{name}中name大小写敏感。引用其它属性与此一致。
  • UseGeneratedKeys=“true” 表明要MyBatis获取由数据库自动生成的主键;keyProperty=“id” 指定把获取到的主键值注入到User的id属性。

(Ⅱ)、在UserMapper接口里增加insert()方法

在这里插入图片描述

(Ⅲ)、在测试类TestUserMapper里添加测试方法testInsert()

@Test
public void testInsert() {
     User user = new User();
     user.setName("王雨涵");
     user.setAge(25);
     user.setAddress("龙马潭区长桥路二号");
     int count = userMapper.insert(user);
     sqlSession.commit(); // 提交数据库操作
     if (count > 0) {
         System.out.println("记录插入成功!");
         System.out.println("插入新记录:" + user);
     }else {
         System.out.println("记录插入失败!");
     }
}
  • 注意:对于增删改操作,必须要执行SQL会话对象的commit()方法才能生效。

(Ⅳ)、运行测试方法testInsert(),查看结果

在这里插入图片描述

  • 大家可以看到,id=4,这个编号是数据库自动生成的主键值,是因为插入映射语句设置了UseGeneratedKeys=“true”

(Ⅴ)、运行测试方法testFindByName(),查看结果

在这里插入图片描述

  • 大家可以看到,用户表里姓“王”的记录都被查询出来了。

Ⅲ、更新表记录

(Ⅰ)、在UserMapper.xml里增加映射语句 -update

<update id="update" parameterType="User">
        UPDATE t_user SET name = #{name}, age = #{age},
        address = #{address} WHERE id = #{id};
</update>

(Ⅱ)、在UserMapper接口里增加update()方法

int update(User user);

(Ⅲ)、在测试类TestUserMapper里添加测试方法testUpdate()

@Test
    public void testUpdate() {
        int id = 4;
        User user = userMapper.findById(id);
        System.out.println("更新前的记录:" + user);
        user.setName("李小海");
        user.setAge(18);
        user.setAddress("北京市朝阳区");
        int count = userMapper.update(user);
        sqlSession.commit(); //提交数据库
        if (count > 0){
            System.out.println("更新成功!");
            System.out.println("更新后记录:" + userMapper.findById(id));
        }else {
            System.out.println("更新失败!");
        }
    }

(Ⅳ)、运行测试方法testUpdate(),查看结果

在这里插入图片描述

Ⅳ、删除表记录

(Ⅰ)、在UserMapper.xml文件里添加映射语句deleteById

<delete id="deleteById" parameterType="int">
        DELETE FROM t_user WHERE id = #{id};
    </delete>

(Ⅱ)、在UserMapper接口里增加deleteById()方法

int deleteById(int id);

(Ⅲ)、在测试类TestUserMapper里添加测试方法testDeleteById()

@Test
    public void testDeleteById() {
        int id = 4;
        User user = userMapper.findById(id);
        System.out.println("待删除的记录:" + user);
        userMapper.deleteById(id);
        sqlSession.commit(); //提交数据库
        System.out.println("编号为[" + id + "]的记录删除成功!");
        user = userMapper.findById(id);
        if (user != null) {
            System.out.println(user);
        } else {
            System.out.println("编号为[" + id + "]的用户未找到。");
        }
    }

(Ⅳ)、运行测试方法testDeleteById(),查看结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值