Java通用Mapper UUID简单示例

  

#通用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简单示例