#通用Mapper UUID简单示例
<强> # #不可回写的UUID 强>
通用映射器中对UUID的用法主要提到了一种专有的写法,如下写法:
@GeneratedValue(发电机=UUID)
这种方式实现很容易理解,就是在你插入之前,调用UUID的公共方法在<代码> & lt; bind> 代码标签中生成了一个值,插入到了数据库,由于这个值是临时的,并没有<代码>设置> 代码到对象,因此这种方式是不支持回写的。
由于回写方式很常见,因此用这种方式很难满足要求。
而且在文档中也提到了一种可以回写的方式,由于没有提供例子,导致很多人不理解或者尝试失败,因此很早就有必要写一篇如何使用可回写UUID的方式(我曾经远程协助一个朋友解决过这个问题,这个朋友答应我把自己的用法写下来分享给大家,可惜食言了)。
<强> # #可回写的UUID 强>
最简单的可回写UUID方式就是像Oracle序列那样直接写一个返回UUID的SQL就能实现,这是第一种写法:
@ id=GenerationType @GeneratedValue(策略。身份,发电机="选择uuid () ") 私人字符串id;
使用这种方式的时候必须注意,由于是执行SQL,所以底层是使用<代码> & lt; selectKey> 代码>实现的,并且因为需要先得到UUID的值才能插入数据库,因此还需要配置<代码> 代码>属顺序性,使用Java方式配置时,用下面的方式进行配置:
配置配置=new配置();//其他配置//主键自增回写方法执行顺序,默认后,可选值为(之前|之后) config.setOrder(“之前”);mapperHelper.setConfig(配置);
使用春天的方式进行配置时如下:
& lt; bean类=皌k.mybatis.spring.mapper.MapperScannerConfigurer”比; & lt;属性名=" basePackage " value=" https://www.yisu.com/zixun/com.isea533.mybatis.mapper "/比; & lt;属性名="属性"比; & lt; value> 映射器=tk.mybatis.mapper.common.Mapper 之前订单=& lt;/value> & lt;/property> & lt;/bean>
注意是增加<代码>订单=> 代码之前这一行,如果你还有其他配置,都可以按这种方式一行一个<代码>键=值代码>。
这么配置以后就可以正确的获取UUID的值了。
<强> # #任意类型的主键回写值强>
你可能没注意到上面UUID类型的主键中,<代码> id 代码>属性的类型是<代码>字符串> 代码,因为<代码>选择UUID() 代码>返回的字符串,所以Java中的类型要和数据库类型匹配。
因此,如果你使用一个<代码>选择myId() 代码>函数返回一个自定义类型的主键值,你需要让Java中的类型和这个匹配。
<强> # #通用主键SQL配置强>
如果你每一个实体类中都有一个id <代码> 代码>属性,并且配置的注解都一样,都执行同样的SQL去返回值。如果都去配置这个注解会很麻烦。想要解决这种重复性配置,最简单的方式就是提取基类,让使用相同方式主键策略的实体类继承同一个基类就能解决。
解决方案看这里:https://github.com/guozilanTK/base/tree/master/base-id
引用>但是如果你需要适用不同的数据库,这种方式麻烦点的解决办法就是针对不同的数据库创建不同的基类,放在不同的项目中,但是使用相同的包名,具体应用到生产环境时使用对应数据库的基类的jar包就可以。除此之外还有一种方式,这种方式就是使用身份,这个参数用于配置取回主键的方式。
默认提供的<代码> 代码>身份可选值参考文档GenerationType。身份。
这个参数除了这些可选值外,还可以是可以执行的SQL,也就是说最前面的配置方式可以改为:
@ id @GeneratedValue(策略=GenerationType.IDENTITY) 私人字符串id;在Java方式中用下面的方式进行配置:
配置配置=new配置();//其他配置 配置。setIDENTITY(“选择uuid ()”);//主键自增回写方法执行顺序,默认后,可选值为(之前|之后) config.setOrder(“之前”);mapperHelper.setConfig(配置);使用春天的方式进行配置时如下:
& lt; bean类=皌k.mybatis.spring.mapper.MapperScannerConfigurer”比; & lt;属性名=" basePackage " value=" https://www.yisu.com/zixun/com.isea533.mybatis.mapper "/比; & lt;属性名="属性"比; & lt; value> 映射器=tk.mybatis.mapper.common.Mapper 身份=选择uuid () 之前订单=& lt;/value> & lt;/property> & lt;/bean>Java通用Mapper UUID简单示例