• 映射语句之INSERT语句


    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
     
     
     





  • 相关阅读:
    智能指针之 auto_ptr
    UML在线绘图
    inline使用
    工作随笔—2017-12-12
    链表排序
    转——浅谈如何提高服务器并发处理能力
    使用re开发python计算器
    Linux-centos7下python3 环境设置
    C语言中的static 详细分析
    pycharm import pygame 出现报错:No module named 'pygame'
  • 原文地址:https://www.cnblogs.com/xiao2/p/5728788.html
Copyright © 2020-2023  润新知