增删改

Mybatis为我们提供了<insert>、<update>、<delete>标签来对应增删改操作

在接口中写增删改的抽象方法

  1. void addEmp(Employee e);  
  2.     
  3. void updateEmp(Employee e);  
  4.     
  5. void deleteEmp(Employee e);  

在映射文件中写sql语句

  1. <insert id="addEmp" parameterType="com.figsprite.bean.Employee">  
  2.     insert into tb_employee(last_name,email,gender)  
  3.     values(#{lastName},#{email},#{gender})  
  4. </insert>  
  5.     
  6. <update id="updateEmp" parameterType="com.figsprite.bean.Employee">  
  7.     update tb_empolyee  
  8.       set last_name=#{lastName},email=#{email},gender=#{genser}  
  9.       where id=#{id}  
  10. </update>  
  11.     
  12. <delete id="deleteEmp" parameterType="com.figsprite.bean.Employee">  
  13.     delete from tb_employee where id=#{id}  
  14. </delete>

顾名思义,parameterType就是参数类型,而我们通过#{字段名}的方式来传递对象中的属性,resultType允许使用String、Boolean等基本类型包作为返回值

测试

  1. @Test  
  2.     public void test3() throws IOException{  
  3.         SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  4.         SqlSession openSession = sqlSessionFactory.openSession();  
  5.         Employee e = new Employee();  
  6.         e.setGender("1");  
  7.         e.setLastName("Hello");  
  8.         e.setEmail("qwewqeqw");  
  9.         e.toString();  
  10.         try {  
  11.             EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);  
  12.             mapper.addEmp(e);  
  13.             openSession.commit();  
  14.         }finally {  
  15.             openSession.close();  
  16.         }  
  17.     
  18.     }  
  1. @Test  
  2.     public void test4() throws IOException{  
  3.         SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  4.         SqlSession openSession = sqlSessionFactory.openSession();  
  5.         Employee e = new Employee();  
  6.         e.setId(1);  
  7.         e.setGender("0");  
  8.         e.setEmail("qwq");  
  9.         e.setLastName("Jerry");  
  10.         try {  
  11.             EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);  
  12.             mapper.updateEmp(e);  
  13.             openSession.commit();  
  14.         }finally {  
  15.             openSession.close();  
  16.         }  
  17.     }  

这里我们要自动提交数据,我们也可以选择SqlSession openSession = sqlSessionFactory.openSession(true); 这样就不用手动提交了。

  1. @Test  
  2. public void test5 ()throws IOException{  
  3.     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  4.     SqlSession openSession = sqlSessionFactory.openSession();  
  5.     Employee e = new Employee();  
  6.     e.setId(1);  
  7.     try{  
  8.         EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);  
  9.         mapper.deleteEmp(e);  
  10.         openSession.commit();  
  11.     }finally {  
  12.         openSession.close();  
  13.     }  

insert获取自增主键值

我们在上面的例子中可以看到,我们插入时候并没有指定id,因为我们id是通过自增方式,JDBC里面提供了这样的方法

ResultSet getGeneratedKeys()

MyBatis也支持,当然它的底层,其实就是这个函数,我们仅需在<insert>标签里添加属性即可

useGeneratedKeys="true"

使用自增主键获取主键值策略,接着用keyProperty这个属性,指定对应主键属性,也就是Mybatis获取到逐渐使以后将它赋给JavaBean的对应属性

  1. <insert id="addEmp" parameterType="com.figsprite.bean.Employee"  
  2.     useGeneratedKeys="true" keyProperty="id">  

让我们做个测试

@Test

public void test3() throws IOException{

SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();

SqlSession openSession = sqlSessionFactory.openSession();

Employee e = new Employee();

e.setGender("1");

e.setLastName("Hello");

e.setEmail("qwewqeqw");

e.toString();

try {

EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);

mapper.addEmp(e);

openSession.commit();

System.out.println(e.getId());

}finally {

openSession.close();

}

}

如果我们没有写useGenerateKeys和KeyProperty,那么上述代码打印出来的将会是null

MyBatis映射文件1(增删改、insert获取自增主键值)的更多相关文章

  1. DAO以及获取自动生成主键值

    package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...

  2. mybatis oracle insert 返回新增的主键值

    <insert id="insertVmsTemplatePlayItem" parameterType="VmsTemplatePlayItem"> ...

  3. Mybatis --- 映射文件、参数处理、参数值的获取、select元素

    映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义:   - cache   命名空间的二级缓存配置 - cache-ref   其他命名空间缓存配置的引用. - result ...

  4. Spring中获取数据库表主键序列

    在程序开发中,我们经常有写数据库表的操作,数据表中经常带有主键自增序列,如何获取自增序列.spring中提供了相应的类 DataFieldMaxValueIncrementer. DataFieldM ...

  5. Python3+SQLAlchemy不使用字段名获取主键值教程

    一.说明 1.1 环境说明 user model如下,且其现有一个实例user_inst: class User(Base): __tablename__ = 'users' username = C ...

  6. MyBatis映射文件2(不支持自增的数据库解决方案/参数处理[单参、多参、命名参数])

    针对Oracle不支持自增的解决方案 Oracle不支持自增,但是它使用序列来模拟自增,每次插入数据的主键是从序列中拿到的值,那么如何获取这个值呢? <insert id="addEm ...

  7. SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis

    一:DAO实体编码 1:首先,在src目录下,新建org.myseckill.entity包,用于存放实体类: 2:实体类设计 根据前面创建的数据库表以及映射关系,创建实体类. 表一:秒杀商品表 对应 ...

  8. MyBatis映射文件 相关操作

    一.MyBatis映射文件 1.简介 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行 ...

  9. MyBatis 映射文件

    Mybatis映射文件简介 1) MyBatis 的真正强大在于它的映射语句.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉 ...

随机推荐

  1. .net core 2.1 Razor 超快速入门

    以下过程如有不明白的,可参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/?view=aspnetcore-2 ...

  2. 详解Transformer模型(Atention is all you need)

    1 概述 在介绍Transformer模型之前,先来回顾Encoder-Decoder中的Attention.其实质上就是Encoder中隐层输出的加权和,公式如下: 将Attention机制从Enc ...

  3. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  4. day15--认识模块、导入模块、自执行与模块的区别

    一.认识模块 什么是模块? 模块本质是一些功能的集合体 创建的一个py文件就是一个模块 使用模块: 在使用模块的py文件中 通过  import 或者 from import导入模块 模块的优点: 可 ...

  5. node.js api文档生成

    ApiDoc官网地址为:http://apidocjs.com/在Java中有Swagger及其升级版的Swagger2+Springfox自动生成接口管理文档.而在Node.js中则可以利用ApiD ...

  6. Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS

    关键词:VSS.RSS.PSS.USS._mapcount.pte_present.mem_size_stats. 在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/US ...

  7. Ubuntu使用小技巧

    1. Ubuntu下自由截图 Ubuntu下使用PrintScreen按键可以截取整个屏幕,但是很多时候并不需要那么多内容,还需要对图片进行编辑. 这时候就需要截图时,有矩形选择,更符合要求. 进入S ...

  8. 深入理解Redis Cluster

    Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式: slot = CRC16(key) & 16383 每个节点负责维护一部分槽以及槽所映射 ...

  9. React组件重构:嵌套+继承 与 高阶组件

    前言 在最近做的一个react项目中,遇到了一个比较典型的需要重构的场景:提取两个组件中共同的部分. 最开始通过使用嵌套组件和继承的方式完成了这次重构. 但是后来又用高阶组件重新写了一遍,发现更好一点 ...

  10. wtf_1234

    好无聊啊,今天困的厉害. 不想做任何事情 wtf bitch!