增删改

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. Mysql 关键字的优先级 分组 多表联查

    查看模式 select @@global.sql_mode; 关键字的优先级 from 来自 where 条件 group by 分组 having 筛选 select 查询 distinct 去重 ...

  2. 设计模式のBuilderPattern(创建者模式)----创建模式

    一.产生背景 要组装一台电脑,它的组装过程基本是不变的,都可以由主板.CPU.内存等按照某个稳定方式组合而成.然而主板.CPU.内存等零件本身都是可能多变的.将内存等这种易变的零件与电脑的其他部件分离 ...

  3. python入门学习:9.文件和异常

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  4. P1577 切绳子(二分)

    思路:先来分析一下数据范围,是1e4个数据,但是,是double类型,结果不超过0.01那么在绳子最大的情况下,单纯的找正确答案暴力的话就是1e7的时间复杂度,再乘上1e4的数据,这样肯定不行.那么很 ...

  5. java 方法超时

    public void getcd() { logger.info("任务开始!-------------------------------------"); final Exe ...

  6. 005_python对整数的拼接

    一. (1)需要把整数组成的列表或整数字符串混合的列表拼接成字符串,实现如下: arr=[1,2,3,4,"5"] print ','.join(map(str,arr)) pri ...

  7. linux命令之df

    功能:查看文件系统的磁盘空间使用情况 常用选项: -a 包含虚拟文件系统 -h 可易读单位显示 -i 显示 inode 信息而非块使用量 -k 1K 块的数量 -t 只显示指定文件系统为指定类型的信息 ...

  8. 浅谈SQL注入

    先看一个sql语句: select * from admin where username='(此处为用户输入的数据)'; 在没有任何过滤的情况下,如果用户输入:' or 1=1 -- 这条语句就为: ...

  9. (折扣计算)需求说明:普通顾客购物满100元打9折;会员购物打8折;会员购物满200元打7.5折(判断语句if-else和switch语句的嵌套结

    package com.summer.cn; import java.util.Scanner; /** * @author Summer *折扣计算 需求说明:普通顾客购物满100元打9折:会员购物 ...

  10. BottomNavigationBar

    重点: bottomNavigationBar: BottomAppBar( shape: CircularNotchedRectangle(),//这个就是设置floatingactionbutto ...