增删改

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. 解决y7000笔记本ubuntu18.04下 休眠挂起后唤醒花屏

    定位问题,切换到核显后发现一点问题也没有,基本确定是显卡驱动的问题 但是由于配置环境比较复杂,不想重新装N卡驱动,所以另寻方法 sudo gedit /etc/default/grub 修改前 # I ...

  2. ansible批量免秘登录

    ansible批量免秘登录   主控机 10.22.0.185 centos7 被控机 10.22.0.186 centos7 一.主控机安装ansible yum install epel-rele ...

  3. Python学习笔记(3)-字符串

    创建字符串 一对单引号或双引号 >>> 'hello world' 'hello world' >>> "hello world" 'hello ...

  4. SpringMVC配置多视图-内容协商原理

    SpringMVC配置多视图-内容协商原理 2014年03月06日 16:46:59 日积月累_滴水石穿 阅读数:10964更多 个人分类: SpringMVC   Spring Framework ...

  5. 20175310 《Java程序设计》第7周学习总结

    20175310 <Java程序设计>第7周学习总结 本周博客: https://www.cnblogs.com/xicyannn/p/10705376.html 教材学习内容总结 这周学 ...

  6. python读写修改配置文件(ini)

    python 有时候参数需要保存到配置文件中  接下来总结一下 配置文件的读写和修改的操作 代码如下: #!/usr/bin/env python # -*- coding: utf- -*- # 读 ...

  7. JPA和分布式事务简介

    1. Transaction 分两种,Local Transaction 和 Global Transaction. 涉及到一个Connection的Commit,称为Local Transactio ...

  8. eclipse svn 删除不了项目,合并不了问题

    window/preferences  下  Teme  >svn  svn接口选择跟删除不了有关 但是合并 需要选择 JavaHl svn 服务端 1.8 eclipse选则 http://s ...

  9. java 基础03 继承

  10. 我去年码了个表(WPF MvvM)

    又快个把月没写博客了(最近忙着学JAVA去了,都是被逼的/(ㄒoㄒ)/~~),然后用WPF码了个表,其实想加上那种提醒功能什么的,额,就这样了吧,主要是感受一下数据驱动的思想. 效果如下: 前端XAM ...