Closed yongfa365 closed 2 years ago
默认是没有的。。需要你创建一个基类接口覆盖默认的方法配置。
可以给写个demo吗,或者给个切入点的思路,何时从entity解析并最终insert后回写 or 初始化的时候改掉放入MappedStatement的keyProperty的设置
建议完整看一遍第2节的内容
这个我有细看过,方案是在各个Mapper接口里重写,加上自己的Options @Options(useGeneratedKeys = true, keyProperty = "{tablename}Id") 但这个就是在Mapper里处理了,如果能用Entity的注解实现那Mapper就干净了。不然几百个不好处理
当前的方案更通用,代价是特定场景使用会有点麻烦,因为我使用时只有SqlServer及Mysql
不是在各个Mapper接口重写。。通用的情况下,建一个自己的 MyMapper
基类接口配置。。其他接口都继承这个接口。
不通用,自动编号都是类似{tablename}Id这样的。这种能写个通用的处理的demo吗?如何从entity拿到这个id及赋值给keyProperty,不然无法下爪
题外话:一个组件并不一定非要各个点都做到通用吧,如:80%人用MySQL,那是不是可以向他倾斜下,5%用Oracle是不是可以牺牲下或将就下。
不通用的情况下建议通过代码生成器生成所有基础代码。
之所以通过注解配置,是为了不对 MyBatis 做太多侵入性的改动,让使用更可靠。
可以倾斜,不是在基础模块。。可以增加 mysql, oracle 等专用模块。
这个想法好,模块化,可以逐个精进
代码生成器可以看看这里demo: https://github.com/mybatis-mapper/mybatis-mapper-example-springboot
sharding-jdbc 示例,有分片,主键各不相同: https://github.com/mybatis-mapper/mybatis-mapper-example-springboot/tree/shardingsphere
@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "[ID]", insertable = false, updatable = false) private Integer ID;
当设置这个就可以了 @Options(useGeneratedKeys = true, keyProperty = "ID") 这个属于元数据,能不能从Entity里自动解析,不然可能每个Mapper都得改下这个