日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis-08MyBatis注解方式之@Insert

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis-08MyBatis注解方式之@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.單元測試

@Testpublic void insertSysRoleTest() {logger.info("insertSysRoleTest");// 獲取SqlSessionSqlSession 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);// 只插入一條數據 ,期望是1Assert.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 ");}} 2018-04-19 01:49:02,496 INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully 2018-04-19 01:49:02,501 INFO [main] (BaseMapperTest.java:29) - reader close successfully 2018-04-19 01:49:02,506 INFO [main] (RoleMapperTest.java:120) - insertSysRoleTest 2018-04-19 01:49:02,992 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Preparing: insert into sys_role(id, role_name, enabled, create_by, create_time) values(?, ?, ?, ?, ?) 2018-04-19 01:49:03,076 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 99(Long), 小工匠(String), 1(Integer), test(String), 2018-04-19 01:49:02.52(Timestamp) 2018-04-19 01:49:03,083 DEBUG [main] (BaseJdbcLogger.java:145) - <== Updates: 1 2018-04-19 01:49:03,088 INFO [main] (RoleMapperTest.java:140) - sysRole:SysRole [id=99, roleName=小工匠, enabled=1, createBy=test, createTime=Thu Apr 19 01:49:02 BOT 2018, user=null, privilegeList=null] 2018-04-19 01:49:03,090 INFO [main] (RoleMapperTest.java:148) - 為了保持測試數據的干凈,這里選擇回滾,不寫入mysql,請觀察日志,回滾完成 2018-04-19 01:49:03,092 INFO [main] (RoleMapperTest.java:151) - 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.單元測試

@Testpublic void insertSysRoleTest2() {logger.info("insertSysRoleTest2");// 獲取SqlSessionSqlSession 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);// 只插入一條數據 ,期望是1Assert.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 ");}} 2018-04-19 01:50:16,054 INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully 2018-04-19 01:50:16,057 INFO [main] (BaseMapperTest.java:29) - reader close successfully 2018-04-19 01:50:16,060 INFO [main] (RoleMapperTest.java:157) - insertSysRoleTest2 2018-04-19 01:50:16,588 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Preparing: insert into sys_role(role_name, enabled, create_by, create_time) values(?, ?, ?, ?) 2018-04-19 01:50:16,684 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 小工匠2(String), 1(Integer), test2(String), 2018-04-19 01:50:16.075(Timestamp) 2018-04-19 01:50:16,690 DEBUG [main] (BaseJdbcLogger.java:145) - <== Updates: 1 2018-04-19 01:50:16,696 INFO [main] (RoleMapperTest.java:176) - sysRole:SysRole [id=105, roleName=小工匠2, enabled=1, createBy=test2, createTime=Thu Apr 19 01:50:16 BOT 2018, user=null, privilegeList=null] 2018-04-19 01:50:16,702 INFO [main] (RoleMapperTest.java:184) - 為了保持測試數據的干凈,這里選擇回滾,不寫入mysql,請觀察日志,回滾完成 2018-04-19 01:50:16,704 INFO [main] (RoleMapperTest.java:187) - 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.單元測試

@Testpublic void insertSysRoleTest3() {logger.info("insertSysRoleTest3");// 獲取SqlSessionSqlSession 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);// 只插入一條數據 ,期望是1Assert.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 ");}} 2018-04-19 01:50:01,398 INFO [main] (BaseMapperTest.java:26) - sessionFactory bulit successfully 2018-04-19 01:50:01,403 INFO [main] (BaseMapperTest.java:29) - reader close successfully 2018-04-19 01:50:01,406 INFO [main] (RoleMapperTest.java:193) - insertSysRoleTest3 2018-04-19 01:50:01,954 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Preparing: insert into sys_role(role_name, enabled, create_by, create_time) values(?, ?, ?, ?) 2018-04-19 01:50:02,039 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 小工匠3(String), 1(Integer), test3(String), 2018-04-19 01:50:01.428(Timestamp) 2018-04-19 01:50:02,043 DEBUG [main] (BaseJdbcLogger.java:145) - <== Updates: 1 2018-04-19 01:50:02,046 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Preparing: SELECT LAST_INSERT_ID() 2018-04-19 01:50:02,046 DEBUG [main] (BaseJdbcLogger.java:145) - ==> Parameters: 2018-04-19 01:50:02,072 TRACE [main] (BaseJdbcLogger.java:151) - <== Columns: LAST_INSERT_ID() 2018-04-19 01:50:02,072 TRACE [main] (BaseJdbcLogger.java:151) - <== Row: 104 2018-04-19 01:50:02,075 DEBUG [main] (BaseJdbcLogger.java:145) - <== Total: 1 2018-04-19 01:50:02,079 INFO [main] (RoleMapperTest.java:212) - sysRole:SysRole [id=104, roleName=小工匠3, enabled=1, createBy=test3, createTime=Thu Apr 19 01:50:01 BOT 2018, user=null, privilegeList=null] 2018-04-19 01:50:02,082 INFO [main] (RoleMapperTest.java:220) - 為了保持測試數據的干凈,這里選擇回滾,不寫入mysql,請觀察日志,回滾完成 2018-04-19 01:50:02,083 INFO [main] (RoleMapperTest.java:223) - sqlSession close successfully

總結

以上是生活随笔為你收集整理的MyBatis-08MyBatis注解方式之@Insert的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。