找了许久@Insert的用法,先转载一波留个记录,原文链接在最下面

概述
不需要返回主键
1.RoleMapper接口增加接口方法
2.单元测试
返回自增主键
1.RoleMapper接口增加接口方法
2.单元测试
返回非自增主键
1.RoleMapper接口增加接口方法
2.单元测试
概述
@Insert注解本身很简单,需要注意的是如果需要返回主键的值,情况会稍微复杂一点,这种XML方式配置本质是一样的

不需要返回主键
1.RoleMapper接口增加接口方法
/**
     * 
     * 
     * @Title: insertSysRole
     * 
     * @Description: insertSysRole 不需要返回主键的情况
     * 
     * @param sysRole
     * @return
     * 
     * @return: int
     */
    @Insert({ "insert into sys_role(id, role_name, enabled, create_by, create_time) values(#{id}, #{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})" })
    int insertSysRole(SysRole sysRole);

2.单元测试
@Test
    public void insertSysRoleTest() {
        logger.info("insertSysRoleTest");
        // 获取SqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            // 获取RoleMapper接口
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            SysRole sysRole = new SysRole();
            sysRole.setId((long) 99);
            sysRole.setRoleName("小工匠");
            sysRole.setEnabled(1);
            sysRole.setCreateBy("test");
            sysRole.setCreateTime(new Date());
            // 新增用户 ,返回受影响的行数
            int result = roleMapper.insertSysRole(sysRole);

// 只插入一条数据 ,期望是1
            Assert.assertEquals(1, result);
            // 期望roleName 为小工匠
            Assert.assertEquals("小工匠", sysRole.getRoleName());

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 ");
        }
    }

返回自增主键
1.RoleMapper接口增加接口方法
/**
     * 
     * 
     * @Title: insertSysRole2
     * 
     * @Description: insertSysRole2 返回自增主键的情况
     * 
     * @param sysRole
     * @return
     * 
     * @return: int
     */
    @Insert({ "insert into sys_role(role_name, enabled, create_by, create_time) values(#{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})" })
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insertSysRole2(SysRole sysRole);

和第一个场景相比,SQL语句中少了id这一列,注解多了一个@Options, 我们在这个注解设置了useGeneratedKeys 和 keyProperty ,用法同xml中的配置。

2.单元测试
@Test
    public void insertSysRoleTest2() {
        logger.info("insertSysRoleTest2");
        // 获取SqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            // 获取RoleMapper接口
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            SysRole sysRole = new SysRole();
            sysRole.setRoleName("小工匠2");
            sysRole.setEnabled(1);
            sysRole.setCreateBy("test2");
            sysRole.setCreateTime(new Date());
            // 新增用户 ,返回受影响的行数
            int result = roleMapper.insertSysRole2(sysRole);

// 只插入一条数据 ,期望是1
            Assert.assertEquals(1, result);
            // 期望roleName 为小工匠
            Assert.assertEquals("小工匠2", sysRole.getRoleName());

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 ");
        }
    }

返回非自增主键
1.RoleMapper接口增加接口方法
/**
     * 
     * 
     * @Title: insertSysRole3
     * 
     * @Description: insertSysRole3 返回非自增主键的情况
     * 
     * @param sysRole
     * @return
     * 
     * @return: int
     */
    @Insert({ "insert into sys_role(role_name, enabled, create_by, create_time) values(#{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})" })
    @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", resultType = Long.class, before = false)
    int insertSysRole3(SysRole sysRole);

配置和xml基本是相同的,其中before=false 等同于order=”AFTER”. before=true 等同于order=”BEFORE”.

不同数据库中,order的配置不同,需要注意下。

2.单元测试
@Test
    public void insertSysRoleTest3() {
        logger.info("insertSysRoleTest3");
        // 获取SqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            // 获取RoleMapper接口
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            SysRole sysRole = new SysRole();
            sysRole.setRoleName("小工匠3");
            sysRole.setEnabled(1);
            sysRole.setCreateBy("test3");
            sysRole.setCreateTime(new Date());
            // 新增用户 ,返回受影响的行数
            int result = roleMapper.insertSysRole3(sysRole);

// 只插入一条数据 ,期望是1
            Assert.assertEquals(1, result);
            // 期望roleName 为小工匠
            Assert.assertEquals("小工匠3", sysRole.getRoleName());

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 ");
        }
    }

原文:https://blog.csdn.net/yangshangwei/article/details/80003186

@Insert的用法相关推荐

  1. Python语言中 del函数和insert函数用法

    del函数和insert函数用法li=[1,2,3,4,5] print('li is :',li) tmp = li[0] print('tmp is:',tmp)del li[0]print('l ...

  2. linux insert最后一行,insert基础用法及进阶

    转载一波春光 yangbosos@126.com的 一.Insert基础用法 语法: Insert Into 表名 (字段1,字段2,字段3...) Values (值1,值2,值3...) 例子: ...

  3. php 中insert into,数据库insert_PHP MySQL Insert Into用法

    摘要 腾兴网为您分享:PHP MySQL Insert Into用法,智影,招联金融,优路教育,一点英语等软件知识,以及cad2013注册机,业主名录采集软件,我查查,自选股软件,贝贝app,手机百度 ...

  4. C++ vector.insert的用法

    insert() 函数有以下三种用法: 在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,  在指定位置loc前插入num个值为val的元素  在指定位置loc前插入区间[start, ...

  5. insert oracle用法,insert into select的实际用法,insertselect

    insert into select的实际用法,insertselect INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,... ...

  6. insert overwrite 用法

    insert overwrite的用法: INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) ...

  7. oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?

    oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...

  8. python: insert()函数用法

    python insert()函数用于将指定对象插入列表的指定位置. list.insert(index, obj) 共有五种场景,但是暂时只用到这一种 index=0时,从头部插入obj.

  9. oracle insert all 用法

    今天看到侯圣文的博客,有insert的测试,我突然有兴趣, 我也试了一把,果然不错. 另外: 我还有个爱好,就是把大师的博客一一测试,把他们变为自己的东西,侯大师是一个幽默的人,从bolg一一读下来, ...

  10. string的insert的用法整理

    #include < iostream> #include < string> int main (){ std::string str="to be questio ...

最新文章

  1. python开发工程师面试题-超实用面试必看,Python工程师面试题
  2. Hadoop记录-JMX参数
  3. 模板标签及模板的继承与引用
  4. saiku 连接 MySQL_Saiku连接mysql数据库(二)
  5. python numeric_Python pandas.to_numeric函数方法的使用
  6. html 闪烁字,HTML最简单的文字闪烁代码
  7. php中crypt怎么还原,PHP crypt() 函数 - PHP 教程 - 菜鸟学堂-脚本之家
  8. 【NOI2002】银河英雄传说
  9. python实现观察者模式_举例讲解Python设计模式编程中的访问者与观察者模式
  10. 系统学习深度学习(三十六)--Actor-Critic
  11. 仿真器连接出现NO TARGET CONNECTED解决方法及cube配置方法
  12. oracle regexp_instr,Oracle REGEXP_INSTR 用法
  13. C语言中如何使用system函数
  14. ubuntu libxml2 使用
  15. 对称加密算法和非对称加密算法的完美结合
  16. 【office】无法卸载office?
  17. [4G5G专题-50]:物理层-数字波束赋型Beamforming及其数学原理
  18. PHP中的FPM是做什么的_fpm的配置与使用
  19. Grunt 的简单使用
  20. CTGU实验5_1-创建还书过程中的触发器

热门文章

  1. 冰汽时代机器人不用热_如何评价游戏《冰汽时代》?
  2. python_使用marshal模块序列化
  3. window10笔记本安装USB转VGA驱动,电脑重启后无法开机
  4. 有关南怀瑾、朱熹周易断卦法的个人观点
  5. python终端小游戏_我用Python玩小游戏“跳一跳”,瞬间称霸了朋友圈!
  6. 经典Java练习题 Mars Rover
  7. mac 电脑软件安装常见的问题
  8. 新技术在支付清算行业的创新应用
  9. SaaSBase:15个最佳免费HTML编辑器
  10. 报错ValueError: check_hostname requires server_hostnam ImportError: cannot import name ‘imread’ from