资讯专栏INFORMATION COLUMN

Mybatis基本映射--INSERT

csRyan / 2304人阅读

摘要:概述本章学习基本映射相关知识点。表示执行该语句将清空一级二级缓存,默认为。赋值主键的字段名,即把数据库内部生产的主键赋值给该字段。

概述

本章学习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 ;

测试用例

测试用户代码如下:

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

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;

测试用例

测试用户代码如下:

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

代码如下:



    
    
        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;

测试用例

测试用户代码如下:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71253.html

相关文章

  • Mybatis学习笔记(一)——基本的CRUD操作

    摘要:将语句硬编码到代码中,修改语句需要重新编译代码设想使用配置文件配置。从结果集中遍历数据的时候存在硬编码。表示一个拼接符号,会引用注入,所以不建议使用。和表示查询出一条记录进行映射。 MyBatis是什么 mybatis是托管在github上的ORM框架,让程序员将主要精力放在SQL上,通过mybatis提供映射方式,自由灵活(SQL的可定制性较高,半自动化)生成满足需求的SQL语句。m...

    evin2016 评论0 收藏0
  • Mybatis常见面试题

    摘要:执行没有,批处理不支持,将所有都添加到批处理中,等待统一执行,它缓存了多个对象,每个对象都是完毕后,等待逐一执行批处理。 Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止...

    liuchengxu 评论0 收藏0
  • 通过项目逐步深入了解Mybatis<一>

    摘要:解决方法使用数据库连接池管理数据库连接。向中设置参数,对占位符号位置和设置参数值,硬编码在代码中,同样也不利于系统的维护。从中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。 Mybatis Mybatis 和 SpringMVC 通过订单商品案例驱动 官方中文地址:http://www.mybatis.org/mybati... 官方托管地址:https://...

    2bdenny 评论0 收藏0
  • Java Persistence with MyBatis 3读书笔记

    摘要:内部将通过创建事务管理应用服务器负责管理数据库连接生命周期使用。对于大型数据库而言这会导致很差的性能问题。这是指检索出的对象不会被共享并且可以被调用者安全地修改不会其他潜在的调用者或者线程的潜在修改干扰。 第一章 mybatis 简介 以下内容是自己在看本书时觉得重要的地方记录下来,一方面自己做个笔记也希望对其他同行有帮助 简介 mybatis: 是一个简化和实现了Java数据持久层的...

    JinB 评论0 收藏0
  • Java Persistence with MyBatis 3读书笔记

    摘要:内部将通过创建事务管理应用服务器负责管理数据库连接生命周期使用。对于大型数据库而言这会导致很差的性能问题。这是指检索出的对象不会被共享并且可以被调用者安全地修改不会其他潜在的调用者或者线程的潜在修改干扰。 第一章 mybatis 简介 以下内容是自己在看本书时觉得重要的地方记录下来,一方面自己做个笔记也希望对其他同行有帮助 简介 mybatis: 是一个简化和实现了Java数据持久层的...

    LiuZh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<