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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: MyBatis-09MyBatis注解方式之@Update/@Delete

@Update

1. RoleMapper接口增加接口方法

    /**
     * 
     * 
     * @Title: updateSysRoleById
     * 
     * @Description: updateSysRoleById
     * 
     * @param sysRole
     * @return
     * 
     * @return: int
     */
    @Update({ "update sys_role set role_name = #{roleName},enabled = #{enabled},create_by = #{createBy},create_time = #{createTime, jdbcType=TIMESTAMP} where id = #{id}" })
    int updateSysRoleById(SysRole sysRole);


2. 单元测试

@Test
    public void updateSysRoleByIdTest() {
        logger.info("updateSysRoleByIdTest");
        // 获取SqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            // 获取RoleMapper接口
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            // 先根据ID查询出对应的sysRole
            SysRole sysRole = roleMapper.selectSysRoleById((long) 1);
            // roleName期望为管理员
            Assert.assertEquals("管理员", sysRole.getRoleName());
            // 修改RoleName
            sysRole.setRoleName("管理员Artisan");
            // 修改CreateBy
            sysRole.setCreateBy("Artisan");
            // 修改用户 ,返回受影响的行数
            int result = roleMapper.updateSysRoleById(sysRole);
            // 只插入一条数据 ,期望是1
            Assert.assertEquals(1, result);
            logger.info("受影响的行数:" + result);
            // 期望的RoleName为管理员Artisan
            Assert.assertEquals("管理员Artisan", sysRole.getRoleName());
            // 期望的CreateBy为Artisan
            Assert.assertEquals("Artisan", sysRole.getCreateBy());
            logger.info("sysRole:" + sysRole);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 为了保持测试数据的干净,这里选择回滚
            // 由于默认的sqlSessionFactory.openSession()是不自动提交的
            // 除非显式的commit,否则不会提交到数据库
            sqlSession.rollback();
            logger.info("为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成");
            sqlSession.close();
            logger.info("sqlSession close successfully ");
        }
    }


2018-04-19 02:55:57,225  INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully
2018-04-19 02:55:57,230  INFO [main] (BaseMapperTest.java:29) - reader close successfully
2018-04-19 02:55:57,233  INFO [main] (RoleMapperTest.java:229) - updateSysRoleByIdTest
2018-04-19 02:55:57,726 DEBUG [main] (BaseJdbcLogger.java:145) - ==>  Preparing: SELECT a.id, a.role_name roleName, a.enabled, a.create_by createBy, a.create_time createTime FROM sys_role a WHERE a.id = ? 
2018-04-19 02:55:57,799 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 1(Long)
2018-04-19 02:55:57,824 TRACE [main] (BaseJdbcLogger.java:151) - <==    Columns: id, roleName, enabled, createBy, createTime
2018-04-19 02:55:57,825 TRACE [main] (BaseJdbcLogger.java:151) - <==        Row: 1, 管理员, 1, 1, 2018-04-13 21:12:46.0
2018-04-19 02:55:57,828 DEBUG [main] (BaseJdbcLogger.java:145) - <==      Total: 1
2018-04-19 02:55:57,829 DEBUG [main] (BaseJdbcLogger.java:145) - ==>  Preparing: update sys_role set role_name = ?,enabled = ?,create_by = ?,create_time = ? where id = ? 
2018-04-19 02:55:57,835 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 管理员Artisan(String), 1(Integer), Artisan(String), 2018-04-13 21:12:46.0(Timestamp), 1(Long)
2018-04-19 02:55:57,839 DEBUG [main] (BaseJdbcLogger.java:145) - <==    Updates: 1
2018-04-19 02:55:57,840  INFO [main] (RoleMapperTest.java:250) - 受影响的行数:1
2018-04-19 02:55:57,845  INFO [main] (RoleMapperTest.java:257) - sysRole:SysRole [id=1, roleName=管理员Artisan, enabled=1, createBy=Artisan, createTime=Fri Apr 13 21:12:46 BOT 2018, user=null, privilegeList=null]
2018-04-19 02:55:57,849  INFO [main] (RoleMapperTest.java:267) - 为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成
2018-04-19 02:55:57,851  INFO [main] (RoleMapperTest.java:270) - sqlSession close successfully 


@Delete

1. RoleMapper接口增加接口方法

/**
     * 
     * 
     * @Title: deleteSysRoleById
     * 
     * @Description: deleteSysRoleById
     * 
     * @param id
     * @return
     * 
     * @return: int
     */
    @Delete("delete from sys_role where id = #{id}")
    int deleteSysRoleById(Long id);


2. 单元测试

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


2018-04-19 02:56:23,024  INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully
2018-04-19 02:56:23,027  INFO [main] (BaseMapperTest.java:29) - reader close successfully
2018-04-19 02:56:23,030  INFO [main] (RoleMapperTest.java:276) - deleteSysRoleByIdTest
2018-04-19 02:56:23,517 DEBUG [main] (BaseJdbcLogger.java:145) - ==>  Preparing: delete from sys_role where id = ? 
2018-04-19 02:56:23,589 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 1(Long)
2018-04-19 02:56:23,596 DEBUG [main] (BaseJdbcLogger.java:145) - <==    Updates: 1
2018-04-19 02:56:23,599 DEBUG [main] (BaseJdbcLogger.java:145) - ==>  Preparing: SELECT a.id, a.role_name roleName, a.enabled, a.create_by createBy, a.create_time createTime FROM sys_role a WHERE a.id = ? 
2018-04-19 02:56:23,599 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 1(Long)
2018-04-19 02:56:23,625 DEBUG [main] (BaseJdbcLogger.java:145) - <==      Total: 0
2018-04-19 02:56:23,628  INFO [main] (RoleMapperTest.java:299) - 为了保持测试数据的干净,这里选择回滚,不写入mysql,请观察日志,回滚完成
2018-04-19 02:56:23,631  INFO [main] (RoleMapperTest.java:302) - sqlSession close successfully 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL Java 数据库连接
手写mybatis 注解版
手写mybatis 注解版
31 0
|
2月前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
12天前
|
Java 数据库连接 数据库
Springboot整合mybatis注解版(202005)
Springboot整合mybatis注解版(202005)
18 3
|
12天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
24 2
|
18天前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
44 2
|
1天前
|
数据库
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is
|
1月前
|
XML Java 数据库连接
MyBatis第二课,灰度发布,@Results注解,使用xml书写mysql
MyBatis第二课,灰度发布,@Results注解,使用xml书写mysql
|
1月前
|
Java 数据库连接 数据库
mybatis自制插件+注解实现数据脱敏
mybatis自制插件+注解实现数据脱敏
25 1
|
12天前
|
Java 数据库连接 mybatis
Mybatis基于注解的一对一和一对多查询
Mybatis基于注解的一对一和一对多查询
20 0
|
2月前
|
XML Java 数据库连接
【MyBatisPlus】快速入门、常用注解、常用配置
【MyBatisPlus】快速入门、常用注解、常用配置
30 0