1.一个 INSERT SQL 语句可以在<insert>元素在映射器 XML 配置文件中配置

例子:
  1. <insert id="insertStudentWithId" parameterType="Student">
  2.         INSERT INTO Student(id,name,sex,birthday,height,weight,score,address,email,hobby) values
  3.         (#{id},#{name},#{sex},#{birthday},#{height},#{weight},#{score},#{address},#{email},#{hobby})
  4.  </insert>
如果使用名空间(namspace)和语句id来调用的话,那么使用的是SqlSession对象的insert()方法,其返回值是执行INSER语句后所影响的行数。
注:在执行insert语句之后,SqlSession对象必须执行commit进行显式提交,否则数据库中的数据不会刷新
 
2.自动生成主键
在上述的 INSERT 语句中,我们为可以自动生成(auto-generated)主键的列 id插入值。 我们可以使用
useGeneratedKeys 和 keyProperty 属性让数据库生成 auto_increment 列的值,并将生成的值设置到其中一个
输入对象属性内:
例子:
xml code
  1. <insertid="insertStudentWithoutId"parameterType="Student"useGeneratedKeys="true"keyProperty="id"  >
  2.         INSERT INTO Student (name,sex,birthday,height,weight,score,address,email,hobby) values
  3.         (#{name},#{sex},#{birthday},#{height},#{weight},#{score},#{address},#{email},#{hobby})
  4. </insert>
java code
  1. @Test
  2.     publicvoid testInsertWithoutId()
  3.     {
  4.         SqlSession sqlSession =MyBatisSqlSessionFactory.openSession();
  5.         try{
  6.             StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
  7.             Student student =newStudent();
  8.             student.setName("小2");
  9.             student.setAddress("江苏南通");
  10.             student.setBirthday(newDate());
  11.             student.setEmail("xiao2@live.com");
  12.             student.setHeight(177);
  13.             student.setHobby("打篮球");
  14.             student.setScore(99);
  15.             student.setSex("男");
  16.             student.setWeight(120);
  17.             studentMapper.insertStudentWithoutId(student);
  18.             sqlSession.commit();
  19.             System.out.println(student);
  20.         }finally{
  21.             sqlSession.close();
  22.         }
  23.     }
注:有些数据库如 Oracle 并不支持 AUTO_INCREMENT 列,其使用序列(SEQUENCE)来生成主键值
方法一:

假设我们有一个名为 STUD_ID_SEQ 的序列来生成 SUTD_ID 主键值。使用如下代码来生成主键:

Xml Code
  1. <insertid="insertStudent"parameterType="Student">
  2.     <selectKeykeyProperty="id"resultType="int"order="BEFORE">
  3.         SELECT ELEARNING.STUD_ID_SEQ.NEXTVAL FROM DUAL
  4.     </selectKey>
  5.     INSERT INTO STUDENTS(id,name,email, address)
  6.     VALUES(#{id},#{name},#{email},#{address})
  7. </insert>
这里我们使用了<selectKey>子元素来生成主键值,并将值保存到 Student 对象的 id 属性上。 属性
order=“before”表示 MyBatis 将取得序列的下一个值作为主键值,并且在执行 INSERT SQL 语句之前将值设置到
id 属性上
 
方法二:
我们也可以在获取序列的下一个值时,使用触发器(trigger)来设置主键值,并且在执行 INSERT SQL 语句之
前将值设置到主键列上。 如果你采取这样的方式,则对应的 INSERT 映射语句如下所示:
Xml Code
  1. <insert id="insertStudent" parameterType="Student">
  2.        INSERT INTO STUDENTS(name,email, address)   VALUES(#{name},#{email},#{address})
  3.        <selectKey keyProperty="studId" resultType="int" order="AFTER">
  4.               SELECT ELEARNING.STUD_ID_SEQ.CURRVAL FROM DUAL
  5.         </selectKey>
  6. </insert>
 
3.Sql Server显式插入主键
Sql Server中可以设置主键自增,但是一旦设置为主键自增,我们不可以默认显式的插入主键值
开启显式插入主键值得sql语句:
SET IDENTITY_INSERT tableName ON (OFF为关闭的方法)
注:有时候我们并不需要手动去关闭显式插入主键值,因为在每一个新的数据库连接中SQL Server会自动调整为默认不开启
Xml Code
  1. <update id="setIdentityInsert" parameterType="java.lang.String">
  2.         SET IDENTITY_INSERT Student ${_parameter}
  3. </update>
注:MyBatis中传入String类型参数的时候,SQL语句中的参数名必须为_parameter
 
 
 

映射语句之INSERT语句的更多相关文章

  1. PHP执行insert语句报错“Data too long for column”解决办法

    PHP执行mysql 插入语句, insert语句在Navicat for mysql(或任意的mysql管理工具) 中可以正确执行,但是用mysql_query()函数执行却报错. 错误 : “Da ...

  2. 第四章 数据更新 4-1 数据的插入(INSERT 语句的使用方法)

    一.什么是INSERT 用来插入数据的SQL就是INSERT语句.   二.INSERT 语句的基本语法. 列清单 值清单 列清单和值清单的列数必须保持一致,如果不一致会出错.   原则上,执行一次I ...

  3. sql INSERT语句

    当我们需要向数据库表中插入一条新记录时,就必须使用INSERT语句. INSERT语句的基本语法是: INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1 ...

  4. SQL基础语法—insert语句

    1 insert语句 insert语句用于插入数据到表中,其基本语法有以下三种: Syntax: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IG ...

  5. shell随机生成身份证,姓名,电话,日期,分数,等级和insert语句

    #!/bin/bash#生成随机身份证号,性别,年龄,电话,姓名,日期,分数和对应等级,并生成insert语句#作者AiYS,2018-02-06,转载请注明http://www.cnblogs.co ...

  6. mybatis源码专题(2)--------一起来看下使用mybatis框架的insert语句的源码执行流程吧

    本文是作者原创,版权归作者所有.若要转载,请注明出处.本文以简单的insert语句为例 1.mybatis的底层是jdbc操作,我们先来回顾一下insert语句的执行流程,如下 执行完后,我们看下数据 ...

  7. 使用JDBC(Dbutils工具包)来从数据库拿取map类型数据来动态生成insert语句

    前言: 大家在使用JDBC来连接数据库时,我们通过Dbutils工具来拿取数据库中的数据,可以使用new BeanListHandler<>(所映射的实体类.class),这样得到的数据, ...

  8. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  9. PL/SQL客户端中执行insert语句,插入中文乱码

    问题描述:在PL/SQL客户端中执行insert语句,插入中文乱码 解决方案: 1.执行脚本 select userenv('language') from dual;    结果为AMERICAN_ ...

随机推荐

  1. 最准确的单点登录SSO图示和讲解(有代码范例)|手把手教做单点登录(SSO)系列之二

    写第一篇博客<手把手教做单点登录(SSO)系列之一:概述与示例>,就获得了园子里朋友们热情的评论和推荐,感谢各位. 我那篇文章同时发了CSDN和博客园.对比一下,更感受到博客园童鞋们的技术 ...

  2. sql注入基础(原理)

    一.注入的分类 按数据库分类:1.整形 2.字符型(需要考虑单引号闭合的问题,还有注释不必要的语句  #  ) eag:  id='admin'  id='admin and1=1'这样会报错  所以 ...

  3. PHP获取指定页面的指定内容

    在刚入手PHP的时候,经理让我自己做一个文章的管理系统为了方便管理微信端发的消息.除了简单的添加分类.管理分类.添加文章.管理文章,还有一个功能就是要从微信文章网址中拿到网址上的标题.作者以及发表时间 ...

  4. uname命令

    uname用于显示系统信息. 语法: uname [option]... 选项: -a:显示所有信息: -s:显示内核名称: -n:显示主机名: -r:显示内核版本: -v:显示更多的内核版本信息: ...

  5. (1)使用bash脚本实现批量添加用户

    脚本实现内容: 可以指定用户名前缀,指定添加数量的批量添加用户脚本,密码为10为随机小写字母,并把用户名和密码写入文件中. 脚本代码: #!/bin/bashread -p "用户名前缀:& ...

  6. maven(02)--简单的命令操作

    使用maven有什么好处呢? 这个问题留到该文的末尾进行总结>v< maven测试 在上一篇文章中介绍了如何简单的编译一个java文件,执行mvn compile命令后,你会发现在你新建的 ...

  7. 深入理解IOC

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...

  8. crontab的相关设置&linux定时备份数据库

    对于才了解crontab的人来说,应该按照以下的步骤来设置crontab 1.首先要检查是否装了crontab http://blog.sina.com.cn/s/blog_4881040d01011 ...

  9. RUN vs CMD vs ENTRYPOINT - 每天5分钟玩转 Docker 容器技术(17)

    RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...

  10. 搭建腾讯云Linux服务器(Centos6)入门教程

    搭建腾讯云我们需要准备WinSCP,支持文件上传和下载的客户端,界面操作,很方便快捷,有这个可以不用搭建SVN哦! SecureCRT 7.3,这个是很不错的Linux远程客户端哦,可以去CSDN下载 ...