美文网首页
Mybatis实例整理记录

Mybatis实例整理记录

作者: 怕冻的南方人 | 来源:发表于2019-02-12 21:48 被阅读0次

前言

这篇博文收录了我平时工作和学习中关于Mybatis使用中的常见的一些操作,包括配置问题和具体mapperXml的编写等,用于回顾和技术积累。

配置问题收录

233

mapperXml收录

1. 为插入的一条数据手动生成主键并将其返回

业务代码示例

// dao文件的目标接口
public interface ImageDao {
    // 返回值int为本次操作影响的数据条数,返回值0代表插入失败
    public int saveIgnorePK(Image image);
}

// mapper映射的实现方法1,通过中间表建立子查询(MySQL特殊)
<insert id="saveIgnorePK" useGeneratedKeys="true" keyProperty="imageId" >
    INSERT INTO t_image( image_id, image_name, image_type, image_size, image_location,
                         like_count, download_count, uploader_id, upload_time, update_time)
    VALUES ( (select id from (select max(image_id)+1 as id from t_image) as a),
             #{imageName}, #{imageType}, #{imageSize}, #{imageLocation}, 
             #{likeCount}, #{downloadCount}, #{uploaderId}, #{uploadTime}, #{updateTime})
</insert>

// mapper映射的实现方法2,使用<selectKey>的通用解决方案
<insert id="saveIgnorePK" useGeneratedKeys="true" keyProperty="imageId" >
    <!-- 这里的id会覆盖原参数的 -->
    <selectKey order="BEFORE" resultType="java.lang.Integer" keyProperty="imageId" statementType="">
        select max(image_id)+1 from t_image;
    </selectKey>
    INSERT INTO t_image( image_id, image_name, image_type, image_size, image_location,
                         like_count, download_count, uploader_id, upload_time, update_time)
    VALUES ( #{imageId}, #{imageName}, #{imageType}, #{imageSize}, #{imageLocation},
             #{likeCount}, #{downloadCount}, #{uploaderId}, #{uploadTime}, #{updateTime});
</insert>

测试代码示例

public void testSQL(){
    Image image = new Image();
    image.setAll();
      
    Integer res = imageDao.saveIgnoreAndReturnPK(image);
    System.out.println(res);  // 输出 1
    System.out.println(image.getImageId());  // 输出 10071
}

相关解析

  • mapper方案1中,建立一个子查询,在插入的时候手动摘出当前表的最大值,由于MySQL的读写安全策略,其不允许在同一条SQL中同时读和写,所以建立一个中间表来绕过读写安全策略。
  • mapper方案2中,使用Mybatis的<selectKey>标签来辅助建立查询,其常用的4个属性在示例中已经给出了。
  • 在实际操作中,由于我们传参全部都是引用传递且使用了单例模式,所以在执行到mapper的过程中,当我们为image对象设置image_id的时候,其实就为image对象调用了setImageId方法,并将我们生成的主键值注入了image对象,所以在方法完成后,我们可以直接使用image.getImageId()获取数据。

业务SQL收录

233

相关文章

  • Mybatis实例整理记录

    前言 这篇博文收录了我平时工作和学习中关于Mybatis使用中的常见的一些操作,包括配置问题和具体mapperXm...

  • mybatis 原理

    《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

  • mybatis 实例

    增 批量 删 批量 改 批量 批量修改需设置db.properties新增 &allowMultiQueries=...

  • mybatis 实例

    官方文档链接 一、添加依赖 maven project 注:Mac 上开发,使用SqlServer,所以需要jtd...

  • MyBatis 实例

    确定依赖 确定目前的目录结构 编写log4j配置文件 编写log4j配置文件在resource目录下新建log4j...

  • Mybatis源码分析

    Mybatis简单实例 Mybatis四大重要对象 Executor:用于执行mybatis的增删改查操作 Sta...

  • MyBatis 实用篇

    以下是 MyBatis 实用篇整理分享的文章 MyBatis 概念MyBatis 示例-简介MyBatis 示例-...

  • 初识MyBatis

    MyBatis学习笔记(一) 1、什么是MyBatis2、安装3、第一个mybatis实例 前言 1、ORM:Ob...

  • MyBatis逆向工程中的Mapper接口以及Example

    mapper接口中的方法解析 example实例解析 MyBatis的逆向工程中会生成实例及实例对应的exampl...

  • mybatis使用实例

    一、插入数据时,主键回填给对象,有两种实现: 1、用selectKey标签,内容为select last_inse...

网友评论

      本文标题:Mybatis实例整理记录

      本文链接:https://www.haomeiwen.com/subject/rtkleqtx.html