• 概述
  • update 用法
    • UserMapper接口中增加接口方法
    • UserMapper.xml中配置update 元素
    • 单元测试
  • delete用法
    • UserMapper接口中增加接口方法
    • UserMapper.xml中配置delete元素
    • 单元测试

概述

接着上篇博客 Mybatis-04Mybatis XML方式之insert元素,我们接着来学习 update和delete, 比较简单。


update 用法

需求: 通过主键更新sys_user

UserMapper接口中增加接口方法

    /*** * * @Title: updateSysUserById* * @Description: 修改SysUser* * @param sysUser* @return* * @return: int 受影响的行数,这里仅仅是为了做记录,void在实际业务中更常用*/int updateSysUserById(SysUser sysUser);

UserMapper.xml中配置update 元素

<!-- 根据id更改SysUser --><update id="updateSysUserById">update sys_user set user_name = #{userName},user_password = #{userPassword},user_email = #{userEmail},user_info = #{userInfo},head_img = #{headImg, jdbcType=BLOB},create_time = #{createTime, jdbcType=TIMESTAMP}where id = #{id}</update>

单元测试

@Testpublic void updateSysUserByIdTest() {logger.info("updateSysUserByIdTest");// 获取SqlSessionSqlSession sqlSession = getSqlSession();try {// 获取UserMapper接口UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 先根据ID查询出对应的sysuserSysUser sysUser = userMapper.selectSysUserById((long) 1);// 当前数据库用户的userName期望为adminAssert.assertEquals("admin", sysUser.getUserName());// 修改用户名sysUser.setUserName("adminUpdated");// 修改邮件sysUser.setUserEmail("updateSysUser@artisan.com");// 修改用户 ,返回受影响的行数int result = userMapper.updateSysUserById(sysUser);// 只插入一条数据 ,期望是1Assert.assertEquals(1, result);logger.info("受影响的行数:" + result);logger.info("userName:" + sysUser.getUserName() + ",userEmail:" + sysUser.getUserEmail());// 期望的用户名为adminUpdatedAssert.assertEquals("adminUpdated", sysUser.getUserName());// 期望的邮箱为updateSysUser@artisan.comAssert.assertEquals("updateSysUser@artisan.com", sysUser.getUserEmail());} catch (Exception e) {e.printStackTrace();} finally {// 为了保持测试数据的干净,这里选择回滚// 由于默认的sqlSessionFactory.openSession()是不自动提交的// 除非显式的commit,否则不会提交到数据库sqlSession.rollback();logger.info("为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成");sqlSession.close();logger.info("sqlSession close successfully ");}}

日志

2018-04-16 00:55:44,785  INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully
2018-04-16 00:55:44,788  INFO [main] (BaseMapperTest.java:29) - reader close successfully
2018-04-16 00:55:44,790  INFO [main] (UserMapperTest.java:271) - updateSysUserByIdTest
2018-04-16 00:55:45,193 DEBUG [main] (BaseJdbcLogger.java:142) - ==>  Preparing: select a.id, a.user_name, a.user_password, a.user_email, a.user_info, a.head_img, a.create_time from sys_user a where id = ?
2018-04-16 00:55:45,247 DEBUG [main] (BaseJdbcLogger.java:142) - ==> Parameters: 1(Long)
2018-04-16 00:55:45,270 TRACE [main] (BaseJdbcLogger.java:148) - <==    Columns: id, user_name, user_password, user_email, user_info, head_img, create_time
2018-04-16 00:55:45,270 TRACE [main] (BaseJdbcLogger.java:148) - <==        Row: 1, admin, 123456, admin@artisan.com, <<BLOB>>, <<BLOB>>, 2018-04-13 21:12:47.0
2018-04-16 00:55:45,277 DEBUG [main] (BaseJdbcLogger.java:142) - <==      Total: 1
2018-04-16 00:55:45,278 DEBUG [main] (BaseJdbcLogger.java:142) - ==>  Preparing: update sys_user set user_name = ?, user_password = ?, user_email = ?, user_info = ?, head_img = ?, create_time = ? where id = ?
2018-04-16 00:55:45,281 DEBUG [main] (BaseJdbcLogger.java:142) - ==> Parameters: adminUpdated(String), 123456(String), updateSysUser@artisan.com(String), 管理员用户(String), java.io.ByteArrayInputStream@74c176bf(ByteArrayInputStream), 2018-04-13 21:12:47.0(Timestamp), 1(Long)
2018-04-16 00:55:45,283 DEBUG [main] (BaseJdbcLogger.java:142) - <==    Updates: 1
2018-04-16 00:55:45,284  INFO [main] (UserMapperTest.java:292) - 受影响的行数:1
2018-04-16 00:55:45,284  INFO [main] (UserMapperTest.java:294) - userName:adminUpdated,userEmail:updateSysUser@artisan.com
2018-04-16 00:55:45,288  INFO [main] (UserMapperTest.java:309) - 为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成
2018-04-16 00:55:45,289  INFO [main] (UserMapperTest.java:312) - sqlSession close successfully

update的基本用法就这么简单,更复杂的情况后面通过动态SQL中阐述。


delete用法

UserMapper接口中增加接口方法

/*** * * @Title: deleteSysUserById* * @Description: 根据ID删除sysuser* * @param id* @return* * @return: int*/int deleteSysUserById(Long id);

UserMapper.xml中配置delete元素

<!-- 根据ID删除用户 --><delete id="deleteSysUserById">delete from sys_user where id = #{id}</delete>

单元测试

@Testpublic void deleteSysUserByIdTest() {logger.info("deleteSysUserByIdTest");// 获取SqlSessionSqlSession sqlSession = getSqlSession();try {// 获取UserMapper接口UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 调用删除接口int result = userMapper.deleteSysUserById((long) 1);// 期望影响的结果条数为 1Assert.assertEquals(1, result);// 再次查询SysUser sysUser = userMapper.selectSysUserById((long) 1);// 期望查询出来的sysUser 为 nullAssert.assertNull(sysUser);} catch (Exception e) {e.printStackTrace();} finally {// 为了保持测试数据的干净,这里选择回滚// 由于默认的sqlSessionFactory.openSession()是不自动提交的// 除非显式的commit,否则不会提交到数据库sqlSession.rollback();logger.info("为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成");sqlSession.close();logger.info("sqlSession close successfully ");}}

日志

2018-04-16 00:56:01,547  INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully
2018-04-16 00:56:01,550  INFO [main] (BaseMapperTest.java:29) - reader close successfully
2018-04-16 00:56:01,553  INFO [main] (UserMapperTest.java:320) - deleteSysUserByIdTest
2018-04-16 00:56:01,945 DEBUG [main] (BaseJdbcLogger.java:142) - ==>  Preparing: delete from sys_user where id = ?
2018-04-16 00:56:02,023 DEBUG [main] (BaseJdbcLogger.java:142) - ==> Parameters: 1(Long)
2018-04-16 00:56:02,029 DEBUG [main] (BaseJdbcLogger.java:142) - <==    Updates: 1
2018-04-16 00:56:02,031 DEBUG [main] (BaseJdbcLogger.java:142) - ==>  Preparing: select a.id, a.user_name, a.user_password, a.user_email, a.user_info, a.head_img, a.create_time from sys_user a where id = ?
2018-04-16 00:56:02,032 DEBUG [main] (BaseJdbcLogger.java:142) - ==> Parameters: 1(Long)
2018-04-16 00:56:02,055 DEBUG [main] (BaseJdbcLogger.java:142) - <==      Total: 0
2018-04-16 00:56:02,060  INFO [main] (UserMapperTest.java:343) - 为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成
2018-04-16 00:56:02,061  INFO [main] (UserMapperTest.java:346) - sqlSession close successfully

MyBatis-05 MyBatis XML方式之update/delete元素相关推荐

  1. mybatis批量修改-xml方式

    mybatis批量查询,批量新增就不聊了,今天看看批量修改. 直接上代码吧 xml文件中代码如下: <update id="batchUpdate" parameterTyp ...

  2. Mybatis Plus——以XML方式使用 Wrapper 自定义SQL时IDEA错误[**expected, got ‘${‘]解决方案

    问题描述 '(', ',', CROSS, FOR, GROUP, HAVING, INNER, INTO, JOIN, LEFT, LIMIT, LOCK, NATURAL, ORDER, PROC ...

  3. MyBatis-09MyBatis注解方式之@Update/@Delete

    @Update 1. RoleMapper接口增加接口方法 2. 单元测试 @Delete 1. RoleMapper接口增加接口方法 2. 单元测试 @Update 1. RoleMapper接口增 ...

  4. SpringBoot的MyBatis generator 注解方式和xml方式 (四)

    两种形式: XML方式 type="XMLMAPPER" 注解方式 type="ANNOTATEDMAPPER" 1.1 pom.xml里添加maven插件 & ...

  5. java中xml怎样配置_如何通过XML方式配置并实现Mybatis

    idea中创建一个maven项目 在pom文件中导入下面的依赖 org.mybatis mybatis 3.4.6 mysql mysql-connector-java 8.0.18 log4j lo ...

  6. MyBatis-04 MyBatis XML方式之insert元素

    insert概述 简单的insert用法 1. UserMapper中添加接口方法 2. UserMapper.xml 添加节点 3. 编写单元测试 使用JDCB方式返回主键自增的值 1.UserMa ...

  7. spring和mybatis整合:使用xml方式

    文章目录 spring和mybatis整合:使用xml方式 1. 创建数据库 2. 创建工程,pom.xml文件如下: 3. 依赖下载地址如下: 4. 配置mybatis的全局配置,在resource ...

  8. MyBatis-03 MyBatis XML方式之select元素

    概述 select用法 根据用户id查询用户信息 1.UserMapper接口中添加接口方法 2. UserMapper.xml中配置resultMap和select元素 查询全部的SysUser 添 ...

  9. MyBatis-02 MyBatis XML方式概述及配置步骤

    概述 一个简单的权限控制需求 创建数据库表 创建实体类 XML方式概述及步骤 1. 首先在src/main/resources下com.artisan.mybatis.xml.mapper目录下创建5 ...

最新文章

  1. python学习之第四课时--运算符
  2. 洛谷——P2678 跳石头
  3. 使用uni-app报错this.setData is not a function
  4. 浙大慕课c语言答案,程序设计入门——C语言
  5. 进行有效客户细分的八个步骤
  6. 线性代数矩阵思维导图_斌叔2021考研数学公式:几种特殊形式的矩阵
  7. salt-API基本验证命令
  8. 联系人姓名的多音字 处理
  9. Linux内核中dev_info、dev_dbg、dev_err及动态调试
  10. mysql ibatis count_[mysql] mysql-myibatis-整理
  11. 【机器学习线性代数】17 利用SVD进行彩色图片压缩
  12. Android手机卡顿原因
  13. vite+ts+vue3 知识点(定义全局函数和变量)
  14. C++---之waitKey()函数
  15. 门诊排队叫号系统,有序叫号就诊,适用医院医院、门诊部、诊所等
  16. 基于ffmpeg+opengl+opensl es的android视频播放器
  17. tg3269c网卡驱动linux,TG-3269C自适应PCI网卡驱动
  18. Android 粒子爆炸效果,可以给任意 view 添加该效果
  19. 【渝粤题库】陕西师范大学292061 会计学基础 作业 (高起专)
  20. 《文言文复兴系列 3》(江湖一剑客)

热门文章

  1. opencv 显示图片(直接)
  2. syslinux引导扇区不支持ntfs文件系统_实战 FAT12 文件系统
  3. python趣味编程入门 迈克 桑德斯_Python趣味编程入门
  4. float python_Python中float('INF')的使用
  5. 机器学习笔记:Momentum
  6. 文巾解题 113. 路径总和 II
  7. pyecharts 应用5:视觉映射配置项VisualMapOpts
  8. Python科学计算包应用-教你以可视化的方式打开NumPy
  9. 数据结构与算法基础知识集锦
  10. MapReduce编程实战之“初识”