博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis基本映射--INSERT
阅读量:6870 次
发布时间:2019-06-26

本文共 3791 字,大约阅读时间需要 12 分钟。

概述

本章学习Mysql基本映射--INSERT相关知识点。insert的用法比select要简单很多。

本系列文章是基于Mybatis 3.4.6 版本,数据库使用的是Mysql 5.7。

INSERT标签

insert标签常用属性:

  • id:可以理解为Mybatis执行语句的名称,与Mapper接口一一对应,此属性为必须属性,且在命名空间(mapper标签的namespace)中唯一。
  • parameterType:该属性的含义就是其字面意思,即传入语句的参数类型,是类的全限定类名,非必须。
  • flushCache:表示执行该语句将清空一级、二级缓存,默认为true。
  • timeout:超时时间,即程序提交sql语句到数据库等待的时间,超过此设置时间将抛出超时异常,默认设置是不超时,也就是说程序会一直等待直到有结果返回,单位为妙。
  • useGeneratedKeys:该属性是获取数据库内部生产的主键,默认为false。
  • keyProperty:赋值主键的属性名,即把数据库内部生产的主键赋值给该属性。
  • keyColumn:赋值主键的字段名,即把数据库内部生产的主键赋值给该字段。

不返回主键

此是插入数据最简单的用法,在上一章的基础上,需要编写mapper配置文件和mapper接口。

  • mapper配置文件

代码如下:

INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
  • mapper接口

接口代码如下:

// 返回值int为插入数据的行数public int insert(SysUser sysUser) throws Exception ;
  • 测试用例

测试用户代码如下:

@Testpublic void testInsert(){    // 获得sqlSession    SqlSession sqlSession = getSqlSession();    try{        // 获取Mapper接口        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);        SysUser user = new SysUser();        user.setUserAccount("admin");        user.setUserPassword("123");        user.setCreatedDate(new Date());        // 插入的条数        int count = sysUserMapper.insert(user);        // 提交事务,数据存入数据库        sqlSession.commit();    }catch (Exception e){        e.printStackTrace();    }finally {        sqlSession.close();    }}

返回自增主键

根据上面对INSERT标签属性的学习知道,如果要返回数据库自增的主键,可通过设置useGeneratedKeys和keyProperty以及keyCulomn(返回多个时需指定字段顺序)。

  • mapper配置文件

代码如下:

INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
  • mapper接口

接口代码如下:

// 返回值int仍然为插入影响的行数,数据库内部自增id值被封装到参数对象中public int insertAndResultAutoId(SysUser sysUser) throws Exception;
  • 测试用例

测试用户代码如下:

@Testpublic void testInsertAndResultAutoId(){    // 获得sqlSession    SqlSession sqlSession = getSqlSession();    try{        // 获取Mapper接口        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);        SysUser user = new SysUser();        user.setUserAccount("admin");        user.setUserPassword("123");        user.setCreatedDate(new Date());        // 插入前,id为空        System.out.println(user.getId());        // 插入的条数        int count = sysUserMapper.insertAndResultAutoId(user);        // 插入后,id的值为新插入数据的数据库自增id值        System.out.println(user.getId());        // 提交事务,数据存入数据库        sqlSession.commit();    }catch (Exception e){        e.printStackTrace();    }finally {        sqlSession.close();    }}

返回非自增主键

对于一些数据库不支持自增ID,比如Oracle数据库使用的序列,然后赋值给id字段,再执行数据库插入操作,此情况的实现如下:

  • mapper配置文件

代码如下:

SELECT LAST_INSERT_ID()
INSERT INTO sys_user (user_account, user_password, created_date) VALUES (#{userAccount}, #{userPassword}, #{createdDate})
  • mapper接口

接口代码如下:

// 返回值int仍然为插入影响的行数,数据库内部自增id值被封装到参数对象中public int insertAndSelectKey(SysUser sysUser) throws Exception;
  • 测试用例

测试用户代码如下:

@Testpublic void testInsertAndSelectKey(){    // 获得sqlSession    SqlSession sqlSession = getSqlSession();    try{        // 获取Mapper接口        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);        SysUser user = new SysUser();        user.setUserAccount("admin");        user.setUserPassword("123");        user.setCreatedDate(new Date());        // 插入前,id为空        System.out.println(user.getId());        // 插入影响的条数        int count = sysUserMapper.insertAndSelectKey(user);        // 插入后,id的值为新插入数据的数据库自增id值        System.out.println(user.getId());        // 提交事务,数据存入数据库        sqlSession.commit();    }catch (Exception e){        e.printStackTrace();    }finally {        sqlSession.close();    }}

批量插入

此部分内容将在动态SQL中进行学习。

总结

本节学习了mybatis的基本的insert的用法,希望对大家有帮助。

最后创建了qq群方便大家交流,可扫描加入,同时也可加我qq:276420284,共同学习、共同进步,谢谢!

转载地址:http://jmpfl.baihongyu.com/

你可能感兴趣的文章
我的朗科运维第六课(1)
查看>>
Windows Server 2012 存储去重
查看>>
小米手机M1和华为Honor荣耀U8860手机深入比较
查看>>
java.lang.NoClassDefFoundError
查看>>
PHP删除目录下所有目录文件
查看>>
应一些朋友要求发下Caffe 怎么安装 CPU环境 ubuntu脚本(记录 可用的)
查看>>
VC中窗口ID,句柄,指针三者相互转换函数
查看>>
解决Win8为硬件保留了XXXg内存 问题
查看>>
手动构建srping roo失败
查看>>
分布式锁简单入门以及三种实现方式介绍
查看>>
安装imagick扩展中出现了segmention fault解决的过程
查看>>
阿里巴巴Java开发手册
查看>>
redis配置文件redis.conf详细说明
查看>>
(七)Flask 学习 —— 单元测试
查看>>
Web前端规范--Javascript规范
查看>>
Dubbo相关
查看>>
scss 在webpack 编码问题
查看>>
TypeError: s[y] is not a function 表单提交错误
查看>>
java使用nircmd代替cmd解决管理员权限问题
查看>>
JPA mappedBy属性
查看>>