@Insert的用法
找了许久@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的用法相关推荐
- 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 ...
- linux insert最后一行,insert基础用法及进阶
转载一波春光 yangbosos@126.com的 一.Insert基础用法 语法: Insert Into 表名 (字段1,字段2,字段3...) Values (值1,值2,值3...) 例子: ...
- php 中insert into,数据库insert_PHP MySQL Insert Into用法
摘要 腾兴网为您分享:PHP MySQL Insert Into用法,智影,招联金融,优路教育,一点英语等软件知识,以及cad2013注册机,业主名录采集软件,我查查,自选股软件,贝贝app,手机百度 ...
- C++ vector.insert的用法
insert() 函数有以下三种用法: 在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 在指定位置loc前插入num个值为val的元素 在指定位置loc前插入区间[start, ...
- insert oracle用法,insert into select的实际用法,insertselect
insert into select的实际用法,insertselect INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,... ...
- insert overwrite 用法
insert overwrite的用法: INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) ...
- oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?
oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...
- python: insert()函数用法
python insert()函数用于将指定对象插入列表的指定位置. list.insert(index, obj) 共有五种场景,但是暂时只用到这一种 index=0时,从头部插入obj.
- oracle insert all 用法
今天看到侯圣文的博客,有insert的测试,我突然有兴趣, 我也试了一把,果然不错. 另外: 我还有个爱好,就是把大师的博客一一测试,把他们变为自己的东西,侯大师是一个幽默的人,从bolg一一读下来, ...
- string的insert的用法整理
#include < iostream> #include < string> int main (){ std::string str="to be questio ...
最新文章
- python开发工程师面试题-超实用面试必看,Python工程师面试题
- Hadoop记录-JMX参数
- 模板标签及模板的继承与引用
- saiku 连接 MySQL_Saiku连接mysql数据库(二)
- python numeric_Python pandas.to_numeric函数方法的使用
- html 闪烁字,HTML最简单的文字闪烁代码
- php中crypt怎么还原,PHP crypt() 函数 - PHP 教程 - 菜鸟学堂-脚本之家
- 【NOI2002】银河英雄传说
- python实现观察者模式_举例讲解Python设计模式编程中的访问者与观察者模式
- 系统学习深度学习(三十六)--Actor-Critic
- 仿真器连接出现NO TARGET CONNECTED解决方法及cube配置方法
- oracle regexp_instr,Oracle REGEXP_INSTR 用法
- C语言中如何使用system函数
- ubuntu libxml2 使用
- 对称加密算法和非对称加密算法的完美结合
- 【office】无法卸载office?
- [4G5G专题-50]:物理层-数字波束赋型Beamforming及其数学原理
- PHP中的FPM是做什么的_fpm的配置与使用
- Grunt 的简单使用
- CTGU实验5_1-创建还书过程中的触发器
热门文章
- 冰汽时代机器人不用热_如何评价游戏《冰汽时代》?
- python_使用marshal模块序列化
- window10笔记本安装USB转VGA驱动,电脑重启后无法开机
- 有关南怀瑾、朱熹周易断卦法的个人观点
- python终端小游戏_我用Python玩小游戏“跳一跳”,瞬间称霸了朋友圈!
- 经典Java练习题 Mars Rover
- mac 电脑软件安装常见的问题
- 新技术在支付清算行业的创新应用
- SaaSBase:15个最佳免费HTML编辑器
- 报错ValueError: check_hostname requires server_hostnam ImportError: cannot import name ‘imread’ from