概述
本章学习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,共同学习、共同进步,谢谢!