七、使用MyBatis实现增删改操作

一、本课目标(全是重点)

  • 掌握使用insert完成增加操作
  • 掌握使用update完成修改操作
  • 掌握使用@param注解实现多参数入参
  • 掌握使用delete完成删除操作

二、insert

七、使用MyBatis实现增删改操作_第1张图片
image.png

完成增加操作需要使用insert元素映射插入语句。insert元素有两个属性:id和parameterType。id和select元素中的id作用是一样的,是作为命名空间中的唯一标识。parameter其实跟select元素里面的parameterType也是一样的,都是参数的数据类型,这里因为插入肯定是有参数传入的,所以这类也有parameteType。

UserMapper.xml配置文件:


        insert into smbms_user (userCode,userName,userPassword,
        gender,birthday,phone,address,userRole,
        createdBy,creationDate) values (
        #{userCode},#{userName},#{userPassword},
        #{gender},#{birthday},#{phone},
        #{address},#{userRole},#{createdBy},
        #{creationDate})
    

接口代码:

public int add(User user);

单元测试代码:

@Test
    public void testAdd() {
        logger.debug("testAdd-------------------");
        SqlSession sqlSession = null;
        int count = 0;
        sqlSession = MyBatisUtil.createSqlSession();
        User user = new User();
        try {
            user.setUserCode("001");
            user.setUserName("测试用户001");
            user.setAddress("测试地址");
            user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("2018-8-25"));
            user.setGender(1);
            user.setUserPassword("123456");
            user.setPhone("13526543651");
            user.setUserRole(1);
            user.setCreatedBy(1);
            user.setCreationDate(new Date());
            count = sqlSession.getMapper(UserMapper.class).add(user);
            sqlSession.commit();
        } catch (ParseException e) {
            e.printStackTrace();
        } finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        logger.debug(count);
    }

最终运行结果正常。

注:insert、update、delete元素均没有resultType属性。因为这三个最后的返回结果都是影响的行数,所以也不需要resulttype这个属性。

三、update

七、使用MyBatis实现增删改操作_第2张图片
image.png

配置文件;


        update smbms_user set userCode=#{userCode},
        userName=#{userName},userPassword=#{userPassword},
        gender=#{gender},phone=#{phone},address=#{address},
        userRole=#{userRole},modifyBy=#{modifyBy},
        modifyDate=#{modifyDate} where id=#{id}
    

接口方法:

public int modify(User user);

测试代码:

@Test
    public void testModify() {
        logger.debug("testAdd-------------------");
        SqlSession sqlSession = null;
        int count = 0;
        sqlSession = MyBatisUtil.createSqlSession();
        User user = new User();
        try {
            user.setId(16);
            user.setUserCode("001_M");
            user.setUserName("测试用户001_M");
            user.setAddress("测试地址_M");
            user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("2018-8-25"));
            user.setGender(1);
            user.setUserPassword("123456");
            user.setPhone("13526543651");
            user.setUserRole(1);
            user.setModifyBy(1);
            user.setModifyDate(new Date());
            count = sqlSession.getMapper(UserMapper.class).modify(user);
            sqlSession.commit();
        } catch (ParseException e) {
            e.printStackTrace();
        } finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        logger.debug(count);
    }

测试结果正常。
注:刚开始没有写

 sqlSession.commit();

的时候,进行测试时,在控制台能输出结果,但是数据库中的数据并不会发生改变。
mybatis单独使用时,使用SqlSession来处理事务,打开会话,事务处理开始,增删改操作时要执行commit操作,事物提交后,关闭会话,事物结束。

四、多参数入参

需求说明:实现超市订单管理系统—修改个人密码功能
分析:

  • 传入参数(多个):用户id和新密码
  • 使用注解@param来传入多个参数
  • 映射SQL中的参数:#{注解名称}

配置文件:

    
        update smbms_user set userPassword=#{pwd}
        where id=#{id}
    

接口代码:

public int updatePwd(@Param("id")Integer id, @Param("pwd")String password);

测试代码:

@Test
    public void testUpdatePwd() {
        logger.debug("testAdd-------------------");
        SqlSession sqlSession = null;
        int count = 0;
        sqlSession = MyBatisUtil.createSqlSession();
        try {
            count = sqlSession.getMapper(UserMapper.class).updatePwd(16, "41312019");
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        logger.debug(count);
    }

测试结果正常。

注:超过4个以上的参数最好封装成对象入参,参数固定的业务方法最好直接使用多参数入参。

五、delete

七、使用MyBatis实现增删改操作_第3张图片
image.png

配置文件;

   
        delete from smbms_user where id=#{id}
    

接口代码:

public int deleteUserById(@Param("id")Integer id);

测试代码:

@Test
    public void testDeleteUserById() {
        logger.debug("testAdd-------------------");
        SqlSession sqlSession = null;
        int count = 0;
        sqlSession = MyBatisUtil.createSqlSession();
        try {
            count = sqlSession.getMapper(UserMapper.class).deleteUserById(16);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        logger.debug(count);
    }

测试结果正常。
注:基于良好的编程习惯,只要是没有封装直接传入参数就都使用注解

六、小结

七、使用MyBatis实现增删改操作_第4张图片
image.png

你可能感兴趣的:(七、使用MyBatis实现增删改操作)