首页 > 其他分享 >mybatis获取insert操作自增主键值

mybatis获取insert操作自增主键值

时间:2023-12-19 17:34:06浏览次数:30  
标签:语句 insert 数据库 键值 mybatis 默认值 属性

大家好,我是joker,希望你快乐。

在日常使用mybatis时,经常会遇到数据库表的主键是自增id的情况。数据库的表结构又设计成主子表的情况,在插入主表数据后,为了维护主子表关系,通常需要获取插入主表中的自增id。

代码示例

  1. mapper.xml

    <insert id="insertCity" parameterType="City" useGeneratedKeys="true"
                keyProperty="id">
            INSERT INTO `city` (`Name`, `CountryCode`, `District`, `Population`) VALUES (#{Name},#{CountryCode},#{District},#{Population})
    </insert>
    
  2. mapper.java

    public interface CityMapper {
        public int insertCity(City city);
    }
    
  3. serviceImpl.java

    @Service
    public class CityServiceImpl implements ICityService {
        @Autowired
        private CityMapper cityMapper;
    
        @Override
        public int insertCity(City city){
             int res = cityMapper.insertCity(city);
             System.out.println(city.getId());
             return res;
        }
    }
    

insert, update 和 delete属性说明

<insert
  id="insertAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  keyProperty=""
  keyColumn=""
  useGeneratedKeys=""
  timeout="20">

<update
  id="updateAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

<delete
  id="deleteAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

Insert, Update, Delete 元素相关属性说明

  • id

在命名空间中唯一的标识符,可以被用来引用这条语句。

  • parameterType

将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。

  • parameterMap

用于引用外部 parameterMap 的属性,目前已被废弃。请使用行内参数映射和 parameterType 属性。

  • flushCache

将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:(对 insert、update 和 delete 语句)true。

  • timeout

这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)。

  • statementType

可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。

  • useGeneratedKeys

(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。

  • keyProperty

(仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。

  • keyColumn

(仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。

  • databaseId

如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。

总结

到这里mybatis获取insert操作自增主键值就介绍完了,获取主键值的具体实现下一篇我们查看源码进行分析。

标签:语句,insert,数据库,键值,mybatis,默认值,属性
From: https://www.cnblogs.com/Crazy_Joker/p/17914288.html

相关文章

  • 最近在使用SpringBoot整合MyBatis-Plus时出现的问题
    版本信息:IDEA2022、jdk17、maven3.8.6、SpringBoot3+MyBatis-Plus依赖版本信息:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version&g......
  • 14. 现在有个外键值是area_id_id,我就想他叫area_id该怎么做
     如果你想将一个外键字段的数据库列名从默认的area_id_id更改为area_id,你可以使用db_column参数来指定自定义的数据库列名。以下是一个示例:pythonCopycodefromdjango.dbimportmodelsclassYourModel(models.Model):  area=models.ForeignKey(Area,on_delete=model......
  • MyBatis方法入参打@Param后,xml中的取值方式
    /***分页查询对账结果**@parampage*@paramrequestBO*@return*/Page<ReconcileDetailResultPageBO>pageDetailSettleDataAndResult(IPage<ReconcileDetailResultPageBO>page,@Param("requestBO")ReconcileDetailResultPageRequestBOrequestBO)......
  • JavaWeb - Day09 - Mybatis - 基础操作、XML映射文件、动态SQL
    01.Mybatis-基础操作-环境准备需求需求说明:根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。通过分析以上的页面原型和需求,我们确定了功能列表:查询根据主键ID查询条件查询新增更新删除根据主键ID删除根据......
  • 数据持久层框架mybatis学习:使用mybatis+SpringBoot完成增删改查
    目录一、MyBatis的应用配置二、使用mybatis+SpringBoot完成增删改查2.1代码实现2.2增删改查接口调用一、MyBatis的应用配置依赖pom.xml注意:版本号的依赖冲突问题<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xm......
  • mybatis-plus
    Mybatis-plus简介|MyBatis-Plus(baomidou.com)特性损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求支持Lambda......
  • 流畅的orm让我发现我抵触的是mybatis而不是java
    流畅的orm让我发现我抵触的是mybatis而不是java背景介绍开发.net也快10年了,到第三年的时候我已经渐渐瓶颈了,于是我在网上找各种资料但是大部分c#资料全是皮毛资料,稍微深一点点就再讲表达式expression,感觉完全没有那个深度,但是同时期的java讲解的都是基本原理,和框架思......
  • mybatis 注解开发
    注解开发<mappers><!--直接读取映射文件--><!--<mapperresource="kong/UserMapper.xml"/>--><!--获取dao文件xml文件存放的路径和dao接口的包名要对应--><packagename="com.kong.dao"/>......
  • Mybatis(黑马)
    1.框架概述课程介绍三层架构和ssm框架的对应关系jdbc操作数据库的问题分析jdbc代码回顾javapublicstaticvoidmain(String[]args){Connectionconnection=null;PreparedStatementpreparedStatement=null;ResultSetresultSet=null;try{//加载数据库......
  • Mybatis-Plus技术教程
    Mybatis-Plus课程目标了解Mybatis-Plus整合Mybatis-Plus通用CRUDMybatis-Plus的配置条件构造器Mybatis-Plus的Service封装代码生成器1Mybatis-Plus介绍1.1Mybatis-Plus介绍MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强......