Mybatis基本映射--INSERT

概述

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

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

INSERT标签

insert标签经常使用属性:github

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

不返回主键

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

  • mapper配置文件

代码以下:数据库

<!-- insert标签最小配置 -->
<insert id="insert">
    INSERT  INTO sys_user (user_account, user_password, created_date)
    VALUES (#{userAccount}, #{userPassword}, #{createdDate})
</insert>
  • mapper接口

接口代码以下:缓存

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

测试用户代码以下:mybatis

@Test
public 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(返回多个时需指定字段顺序)。oracle

  • mapper配置文件

代码以下:app

<!-- 
    配置useGeneratedKeys=true,keyProperty="属性名"
    parameterType属性不是必须的,再次只是掩饰下它的用法,使用时按这样用就好了
-->
<insert id="insertAndResultAutoId" parameterType="com.github.dalianghe.model.SysUser"
        useGeneratedKeys="true" keyProperty="id">
    INSERT  INTO sys_user (user_account, user_password, created_date)
    VALUES (#{userAccount}, #{userPassword}, #{createdDate})
</insert>
  • mapper接口

接口代码以下:学习

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

测试用户代码以下:

@Test
public 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配置文件

代码以下:

<!-- 
    
-->
<insert id="insertAndSelectKey">
    <!-- 
        使用selectKey子标签返回数据生成的主键
        keyColumn、keyProperty与自增主键中含义同样,resultType是返回的数据类型
        order的值与数据库有关,mysql使用AFTER,oracle使用BEFORE
    -->
    <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT  INTO sys_user (user_account, user_password, created_date)
    VALUES (#{userAccount}, #{userPassword}, #{createdDate})
</insert>
  • mapper接口

接口代码以下:

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

测试用户代码以下:

@Test
public 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,共同窗习、共同进步,谢谢!

相关文章
相关标签/搜索