mybatis返回自增主键问题踩坑】的更多相关文章

1 <insert id="insert" keyProperty="id" useGeneratedKeys="true"
 parameterType="com.demo.domain.User">
 2 insert into User_t(name,age,addr) values(#{name},#{age},#{addr}) 3 </insert> /**在service中获取 在contr…
背景 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 使用传统的代码结构controller-->service-->dao dao传入实体,int insertEntity(Entity ent…
面试过好多人,包括自己也属于这么一个情况: 遇到问题直接去网上查,一般都可以查到解决方案.其中也包括一些基本的面试资料的答案. 其实有很多答案也都是正确的,但是还是存在一些压根就是胡乱抄来的答案,也不经过验证就直接贴在自己博客上 简直是害人害己,这开发工程师的圈子大了真是什么偷懒的都有.杜绝这一现象从我做起吧.以前写的代码很少有返回主键值的,都是记录生成记录的条数,所以我也是第一次做,特此记录 今天说下 oracle 能像mysql 和 sql server 一样返回主键: 1:创建你的表,然后…
重点是获取对象的主键值而不是insert的返回值 Mybatis获取插入数据的主键时,返回值总是1xml里的写法 第一种方式 <insert id="insertLogin" parameterType="com.xyt.p2p.pojo.LoginInfo" keyColumn="userId" useGeneratedKeys="true" keyProperty="userId"> INS…
我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:useGenerateKeys和keyProperty. 2.不支持生成自增主键的数据库:<selectKey>. 但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少. Mybatis官网资料提供如下: First, if your database supports auto-generated key fields (e.g. MySQL and SQL…
1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数,那么这个时候我们想要得到相应的这条新增数据的ID,该怎么办呢? 2.插入数据返回自增主键ID方法(一) 在映射器中配置获取记录主键值 xml映射: 在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn分别代表数…
使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可以把自增主键的值放到实体中返回 这是实体类的定义(实体类必须有一个字段接收主键的值) public class UserEntity { private Long id; private String username; private String type; private String nam…
接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制. Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值的方法 :KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值 代码: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLE…
公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了. 其中涉及到插入实体要求返回主键id的问题,以前用ssh配合oracle很容易实现,因为有sequence,而且mysql也基本没用过,所以只好去百度了. 这个内容还是比较好查的,如下: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapp…
方法有很多,参考 mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey 这里记录一下工作中自己用到的selectkey方法的详细过程. pojo类: public class Client { /** * 客户id */ @Id private Integer id; /** * 客户名称 */ private String name; //其他的一些域自己补充,对应get/set方法也要添加 /** * 获取客户id * * @ret…
主要是注解@Options起作用,语句如下: @Insert({ "INSERT INTO application_open_up ( " + "app_open_hospital_id, " + "application_id, " + "service_time, " + "createdby, " + "createdon, " + "modifiedby, "…
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 情景一:针对自增主键的表,在插入时不需要主键,而是在插入过程自动获取一个自增的主键,比如MySQL,可以采用如下两种配置方式 <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType=&q…
pojo: public class User { private Integer id; private String name; private String pwd; setter和getter.... } 数据库: 1.获取自增主键的值 映射文件: <!-- UserMapper接口 public void addUser(User user); --> <insert id="addUser" parameterType="com.workhah.…
mybaits两种获取自增主键ID的方法:一种是使用useGeneratedKeys,第二种是selectKey方法获取. useGeneratedKeys <insert id="insert" parameterType="com.github.chengbin.auth.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into sys…
首先把实体类贴出来(这里只贴出属性,其它的就是getter和setter方法): public class Around {     private String xccd;  //对应主键     private String xcnm;     private String stcd;     private String sttp;     private BigDecimal lnth;     private String lead;     private String mans; …
在开发中碰到用户注册的功能需要用到用户ID,但是用户ID是数据库自增生成的,这种情况上网查询后使用下面的方式配置mybatis的insert语句可以解决: <insert id="insert" keyProperty="id" useGeneratedKeys="true"
 parameterType="com.demo.domain.User">
 insert into User_t(name,age,ad…
一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法:插入一条数据,只插入不为null的字段,不会影响有默认值的字段支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长 controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用…
mapper.xml 代码 <insert id="insert" parameterType="com.Student" > <selectKey keyProperty="id" resultType="long" order="AFTER"> select last_insert_id(); </selectKey> insert into student(id,,…
XML <insert id="insert" parameterType="com.stone.model.Person"> <!-- selectKey 是做主键返回的 keyProperty 接受返回主键的属性 order: insert语句和生成主键的sql执行顺序:mysql是AFTER,在oracle中是BEFORE resultType:返回主键的数据类型 生成主键的sql: select LAST_INSERT_ID() -->…
业务中,会遇到这样的问题,就是感觉返回的主键,插入作为其他表的外键. 那么问题来了,如何去实现,其实方法比较简单,这里就是重点记录下,会出现的误区. 用自动生成sql工具的话,加上下面这句话 <generatedKey column="id" sqlStatement="JDBC" identity="true" /> 生成的sql文件就会带 useGeneratedKeys="true" keyProperty=…
1.Java代码: 1.1 entity类: User.java public class User { private int userId; private String userName; private String password; private String comment; //这里要添加 setter and getter  略 } 1.2 DAO类: UserDao.java public interface UserDao { public int insertAndGe…
1.配置文件变化 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.BookMapper&…
useGeneratedKeys="true" keyProperty="id" 方法1: <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id"> insert into person(name,pswd) values(#{name},#{pswd}) <…
<insert id="saveOne" parameterType="com.buwei.entity.User" > INSERT into user(name, password) value(#{name},#{password}) <selectKey keyProperty="id" order="AFTER" resultType="int"> select last_…
摘要 我们经常使用useGenerateKeys来返回自增主键,避免多一次查询.也会经常使用on duplicate key update,来进行insertOrUpdate,来避免先query 在insert/update.用起来很爽,但是经常踩坑,还不知为何.本篇就是深入分析获取自增主键的原理. 问题 首先摘两段我司一些老代码的bug 批量插入用户收藏 for (tries = 0; tries < MAX_RETRY; tries++) { final int result = colle…
一.Mybatis配置 <insert id="insert" parameterType="com.test.TestDO" keyProperty="id" useGeneratedKeys="true"> useGeneratedKeys=“true”时 , mybatis会将自增ID值 填充到 TestDO对象中的 id (keyProperty指定)属性. 二.JDBC java.sql.Statemen…
mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同.基本上经常会遇到的就是Oracle Sequece 和 MySQL 自增主键,至于其他的手动生成唯一主键的问题在这里就不讨论了,这里主要说明下在mybatis中对于自增主键的配置. 不返回自增主键值 如果考虑到插入数据的主键不作为其他表插入数据的外键使用,那么可以考虑使用这种方式. Oracle Sequence 配置 <sql id='TABLE_NAME'>TEST_US…
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在SqlMapConfig.xml中加载. n 通过Mybatis环境等配置信息构造SqlSessionFactory,即会话工厂. n 由会话工厂创建SqlSession即会话,操作数据库需要通过SqlSession进行. n Mybatis底层自定义了Executor执行器接口操作数据库,Exec…
今天在敲代码的时候遇到一个问题,就是往数据库里插入一条记录后需要返回这个新增记录的ID(自增主键), 公司框架用的是mybatis的通用Mapper接口,里面的插入方法貌似是不能把新纪录的ID回填到对象中的,于是大家都懂的 去网络的海洋里寻找答案,答案还是很好找的 <insert id="xxx" parameterType="xxx.xxx.xxx.entity" useGeneratedKeys="true" keyColumn=&qu…