有没有人有用tk.mybatis, 通用mapper的insert方法怎么返回主键吖

ixxxk 2018-06-09 05:16:02

@Id
@SequenceGenerator(name = "SEQ", sequenceName = "SEQ_ATTR_ID", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
private Long attr_id;

int row = mapper.insertSelective(attr);

该方法源码:

package tk.mybatis.mapper.common.base.insert;

import org.apache.ibatis.annotations.InsertProvider;
import tk.mybatis.mapper.provider.base.BaseInsertProvider;

/**
* 通用Mapper接口,插入
*
* @param <T> 不能为空
* @author liuzh
*/
public interface InsertSelectiveMapper<T> {

/**
* 保存一个实体,null的属性不会保存,会使用数据库默认值
*
* @param record
* @return
*/
@InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL")
int insertSelective(T record);

}

请问下该insert方法 怎么返回主键(主键使用的是oracle序列)

...全文
9217 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
zero0-1 2021-04-26
  • 打赏
  • 举报
回复
直接在insert(Object obj) 这个方法执行后,直接通过obj对象获取主键
Wilson.Huang 2020-11-05
  • 打赏
  • 举报
回复
@GeneratedValue(strategy = GenerationType.IDENTITY)这个貌似只适用于mysql
Wilson.Huang 2020-11-05
  • 打赏
  • 举报
回复
有两种方案: 1、@GeneratedValue(generator = "JDBC") 2、@GeneratedValue(strategy = GenerationType.IDENTITY) 以上两个是javax.persistence的解决方案; 3、@KeySql(useGeneratedKeys = true) 第三个是tk.mybatis的解决方案;
一口南瓜饼丶 2020-09-06
  • 打赏
  • 举报
回复
insertUseGeneratedKeys 返回主键自增,实体类ID需要加注解 自增注解 @GeneratedValue(generator = "JDBC")
Daidai2018 2020-06-24
  • 打赏
  • 举报
回复
@GeneratedValue(generator = "JDBC") 加到主键上,直接解决问题。
修|姱 2019-10-14
  • 打赏
  • 举报
回复
引用 24 楼 向柚看_ 的回复:
[quote=引用 19 楼 JC. Lin 的回复:] 其实还有一个更加简便的方法: @Table(name = "user") public class User { @Id @Column(name = "user_id") @GeneratedValue(generator = "JDBC")//此处加上注解 private Integer userId; 。。。 在insert User后直接调用get方法就可以拿到新增的主键ID。
正解![/quote] 在哪里使用get()方法,我这里怎么用不了
哈希塞特 2019-10-09
  • 打赏
  • 举报
回复
@GeneratedValue加了这个注解后会自动把主键返回到你那个插入的实体类,方便的很
小水牛OvO 2019-06-25
  • 打赏
  • 举报
回复 1
楼主,这个问题我同样也遇到了,我通过加这一行注解解决的 @GeneratedValue(generator = "JDBC")//此处加上注解 是楼上的解决方法,而你的那种方法我无法成功。
LIYAJUN2018 2019-05-01
  • 打赏
  • 举报
回复
引用 19 楼 JC. Lin 的回复:
其实还有一个更加简便的方法: @Table(name = "user") public class User { @Id @Column(name = "user_id") @GeneratedValue(generator = "JDBC")//此处加上注解 private Integer userId; 。。。 在insert User后直接调用get方法就可以拿到新增的主键ID。
优秀
SWhard 2019-03-25
  • 打赏
  • 举报
回复
引用 24 楼 向柚看_ 的回复:
[quote=引用 19 楼 JC. Lin 的回复:] 其实还有一个更加简便的方法: @Table(name = "user") public class User { @Id @Column(name = "user_id") @GeneratedValue(generator = "JDBC")//此处加上注解 private Integer userId; 。。。 在insert User后直接调用get方法就可以拿到新增的主键ID。
正解![/quote] 我发现我没有配置也能拿到插入的记录的主键。
向柚看_ 2019-02-20
  • 打赏
  • 举报
回复
引用 19 楼 JC. Lin 的回复:
其实还有一个更加简便的方法: @Table(name = "user") public class User { @Id @Column(name = "user_id") @GeneratedValue(generator = "JDBC")//此处加上注解 private Integer userId; 。。。 在insert User后直接调用get方法就可以拿到新增的主键ID。
正解!
湘楚2020 2019-02-07
  • 打赏
  • 举报
回复
@Id @KeySql(useGeneratedKeys = true, sql = "SELECT LAST_INSERT_ID()", order = ORDER.AFTER) private Integer id; sql = "SELECT LAST_INSERT_ID()", order = ORDER.AFTER 我测试过了,可以用了,可以返回主键
湘楚2020 2019-02-07
  • 打赏
  • 举报
回复
@Id @KeySql(useGeneratedKeys = true, sql = "SELECT LAST_INSERT_ID()", order = ORDER.AFTER) private Integer id; sql = "SELECT LAST_INSERT_ID()", order = ORDER.AFTER 这是才是关键,希望对你有帮助
webseeyou 2018-08-24
  • 打赏
  • 举报
回复
mapper里有这个方法可以解决:insertUseGeneratedKeys
「已注销」 2018-08-07
  • 打赏
  • 举报
回复
Options注解了解一下
JC. Lin 2018-08-01
  • 打赏
  • 举报
回复
其实还有一个更加简便的方法:
@Table(name = "user")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(generator = "JDBC")//此处加上注解
private Integer userId;
。。。
在insert User后直接调用get方法就可以拿到新增的主键ID。
咸鱼翻面 2018-06-28
  • 打赏
  • 举报
回复
引用 13 楼 u012171905 的回复:
主键会直接set进你insert用的那个实体类的吧。。。调用insert方法后直接get就好了

确实,使用tk.mybatis原生save方法,保存后,实体类直接getId就行了,自己找半天
ixxxk 2018-06-16
  • 打赏
  • 举报
回复
我已找到解决办法, 感谢楼上几位朋友的回答, 在spring boot启动类里面添加下面代码中mapperScannerConfigurer()方法用于配置mapper, 特别注意: @MapperScan(basePackages = "com.zr.mapper") 就不能再使用了, 必须删除.

package com.zr;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.github.pagehelper.PageHelper;

import tk.mybatis.spring.mapper.MapperScannerConfigurer;

@EnableScheduling
@SpringBootApplication // 启动
@ServletComponentScan // 拦截器
@EnableTransactionManagement // 事务管理
public class Startup {

	@Value("${myData.port.ajpport}")
	private int ajpport;

	@Bean
	public PageHelper pageHelper() {
		PageHelper pageHelper = new PageHelper();
		Properties p = new Properties();
		p.setProperty("offsetAsPageNum", "true");
		p.setProperty("rowBoundsWithCount", "true");
		p.setProperty("reasonable", "true");
		p.setProperty("dialect", "oracle");
		pageHelper.setProperties(p);
		return pageHelper;
	}
	//重点在于这个方法
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer() {
		MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
		mapperScannerConfigurer.setBasePackage("com.zr.mapper");
		Properties propertiesMapper = new Properties();
		// 通用mapper位置,不要和其他mapper、dao放在同一个目录
		propertiesMapper.setProperty("mappers", "com.zr.bean.MyMapper");
		propertiesMapper.setProperty("notEmpty", "false");
		// 主键UUID回写方法执行顺序,默认AFTER,可选值为(BEFORE|AFTER)
		propertiesMapper.setProperty("ORDER", "BEFORE");
		mapperScannerConfigurer.setProperties(propertiesMapper);
		return mapperScannerConfigurer;
	}
	public static void main(String[] args) {
		SpringApplicationBuilder builder = new SpringApplicationBuilder(Startup.class);
		// 修改Banner的模式为OFF
		builder.bannerMode(Banner.Mode.OFF).run(args);
	}

}

然后实体类id生成改成这样就好了.

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select SEQ_ID.nextval from dual")
	private Long id;
	private String name;
ixxxk 2018-06-16
  • 打赏
  • 举报
回复
引用 14 楼 stacksoverflow 的回复:
参考这个文档的3.2章,好像是配置IDENTITY=MYSQL类似。 https://github.com/abel533/Mapper/wiki/3.config
在半小时前, 我刚找到解决办法了, 我在楼下把方法发出来. 你发的这个我还没注意看,
ixxxk 2018-06-16
  • 打赏
  • 举报
回复
引用 13 楼 u012171905 的回复:
主键会直接set进你insert用的那个实体类的吧。。。调用insert方法后直接get就好了
问题就是之前没有返回, 需要配置其他东西, 就在半小时前, 我找到解决办法了.我在楼下发出来.
加载更多回复(14)

67,546

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧