优秀的编程知识分享平台

网站首页 > 技术文章 正文

MyBatis精讲(五)CRUD操作及实战代码分享

nanyue 2024-11-21 18:55:47 技术文章 2 ℃

大家好,我是乐于分享编程知识和实战项目的老K,今天我们会继续讲解MyBatis相关的知识。

经过前面几讲的铺垫,我们已经掌握了MyBatis的配置、连接、映射以及查询的相关知识,有需要的小伙伴可以点击下面的连接获取信息:

本期,我们将一起来探索,如何用MyBatis将“增删改”的操作实现。

开始本次内容前,请务必搭配前四期的内容一起服用,效果才更好哦。

尤其是SQL数据库导入代码,可以到《MyBatis精讲(三)一篇文章让你学会如何用MyBatis获取数据》获取。


一、增 - 添加数据

在开始增删改的分享前,我们先对齐一个知识点——事务机制。

所谓事务机制,就是保证数据操作完整性的一种安全机制。 概念可能有些晦涩,我们这里举个例子: 当你向商户甲转账的时候,其实背后至少有2组数据需要改动: 其一是你的账户余额要减少,其二是商户甲的账户余额要增加。 如果没有一种安全机制,两者在计算机处理中是相互独立的,可能会发生你的资金没减少但商户甲收到付款,或者你资金已经支付减少了但商户甲没有收到货款的情况。 事务机制就是这样的一种安全机制,保证整个事务中的所有数据都能成功写入时,才将数据更新到数据库,否则回滚数据,也就是作操作失败的处理。

MyBatis中的“增删改”,都使用了事务机制,这点我们会在案例中详细讲解一下。

添加数据的具体操作如下:

在mapper映射文件humanResource.xml中编写映射方法:

<insert id="insert" parameterType="koder.mybatis.entity.Employee" useGeneratedKeys="true" keyProperty="id"
        keyColumn="id">
    insert into employee(name, depart, salary, age)
    values (#{name}, #{depart}, #{salary}, #{age})
</insert>
  • 与之前的查询方法不同,增添数据使用的是<insert>标签;
  • 属性id表示方法名为insert
  • 属性parameterType表示传入的参数类型为Employee类;
  • 属性useGeneratedKeys表示是否使用自动生成键值,这里选true,与keyPropertykeyColumn搭配使用,起到与SQL中“主键自增”相同的效果;
  • 属性keyProperty表示自增键在java实体类中的私有变量名;
  • 属性keyColumn表示自增键在数据库中的字段名;

MyBatisTest.java中的测试用例:

@Test
public void testInsert() {
    SqlSession session = null;
    try {
        session = MyBatisUtils.openSession();
        Employee employee = new Employee();
        employee.setAge(27);
        employee.setDepart("技术部");
        employee.setName("冯晨");
        employee.setSalary(4700.0f);
        int num = session.insert("humanResource.insert", employee);
        session.commit();
        System.out.println(employee.getId());
    } catch (Exception e) {
        if (session != null) {
            session.rollback();
        }
        throw new RuntimeException(e);
    } finally {
        MyBatisUtils.closeSession(session);
    }
}
  • 先通过newsetter方法设置一个新的Employee实例;
  • 通过session.insert调用映射表中的插入方法,将实例传入映射方法;
  • 通过session.commit()告知程序事务相关数据处理完成,在此处进行提交;
  • catch代码块中,用session.rollback()处理数据写入失败的情况,根据事务机制对结果进行回滚并报错;
  • 由于我们在映射表中启用了useGeneratedKeys设置,并定义了自增键为id,所以当数据提交成功后,我们可以立刻在employee 对象中获取到自动生成的id结果;

返回的结果即自动生成的新id号:

6003

此时,查看数据库,你会发现数据库中新增了一条关于“技术部冯晨”的数据。


二、改 - 修改数据

修改数据和添加数据的思路及用法十分类似。

首先,在mapper映射文件humanResource.xml中编写映射方法。

<update id="update" parameterType="koder.mybatis.entity.Employee">
    update employee
    set name = #{name}, depart = #{depart}, salary = #{salary}, age = #{age}
    where id = #{id}
</update>
  • 修改数据需要使用<update>标签;
  • 属性idparameterType表示该映射的名称和传入的参数类型,类型为Employee

MyBatisTest.java中的测试用例:

@Test
public void testUpdate() {
    SqlSession session = null;
    try {
        session = MyBatisUtils.openSession();
        Employee em = session.selectOne("humanResource.selectById", 6003);
        em.setSalary(5700.0f);
        int num = session.update("humanResource.update", em);
        session.commit();
    } catch (Exception e) {
        if (session != null) {
            session.rollback();
        }
        throw new RuntimeException(e);
    } finally {
        MyBatisUtils.closeSession(session);
    }
}
  • 由于修改的必定是数据库中存在的数据,所以先通过select的方法将数据从数据库中取出来,本例使用的是selectById方法;
  • 拿到数据后,由于在mapper映射文件中已经定义了selectById输出类型resultTypeEmployee, 所以直接存入Employee 变量em中即可;
  • 通过Employeesetter方法对em数据进行修改;
  • 使用session.update方法将数据传入映射方法,实现数据的更新;
  • 依照事务机制的要求,使用commit实现提交,使用rollback实现异常回滚;

运行完成后,你会发现,数据库中关于员工6003的薪酬发生了更新。


三、删 - 删除数据

在mapper映射文件humanResource.xml中编写映射方法:

<delete id="delete" parameterType="Integer">
    delete from employee where id = #{value}
</delete>

MyBatisTest.java中的测试用例:

@Test
public void testDelete() {
    SqlSession session = null;
    try {
        session = MyBatisUtils.openSession();
        int num = session.delete("humanResource.delete", 5002);
        session.commit();
    } catch (Exception e) {
        if (session != null) {
            session.rollback();
        }
        throw new RuntimeException(e);
    } finally {
        MyBatisUtils.closeSession(session);
    }
}
  • 本例为删除员工5002;
  • 在掌握前述增改方法、以及事务机制的前提下,代码理解并无难点,不作展开;

运行测试代码后,数据库中的员工5002信息已被删除。


至此,我们以及完整的分享了MyBatis包括增删改查在内的所有基本操作。

感谢你和我一起经历了5篇文章的学习。

这里的知识虽然晦涩,但却是java工程师十分实用的知识,希望这段时间的分享能给你的职业生涯带来帮助。

如果你对老K分享的内容有任何疑问,欢迎随时在评论区留言或者私信我。

正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力!

阅读推荐

除了看过了教程和知识点,学习Java时,也可以找些项目来练练手,看看自己掌握的情况。

我之前分享一些不错的Java练手项目,需要的可以点击下方卡片获取:

9个Java免费实战项目,帮助提高基本功

结束语

我是专注于开发领域的@老K玩代码 ,会持续生产关于如何学习编程语言的优质内容。

如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。

如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。


#头条创作挑战赛#

Tags:

最近发表
标签列表