4 Star 3 Fork 0

yidasanqian / dynamic-add-date

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

dynamic-add-date

Build Status Maven Central LICENSE 996.icu

Dynamic-add-date是基于Mybatis插件原理开发的可以动态在InsertUpdate Sql语句中添加日期列和对应的值的插件。

可以解决MySQL 5.6.5之前的版本对自动初始化时间戳的限制:

  • DATETIME列不支持DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
  • DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP每张表最多可以使用在一个TIMESTAMP列上而且不能和另一个TIMESTAMP列一起使用。

要求

  • 支持jdk7及之后的版本
  • MySql

功能

  • 自定义要生成的日期列的名称
  • 自动处理原始Sql语句中已包含自定义日期列名
  • 支持插入、更新、批量插入和批量更新Sql语句日期列的生成
  • 支持INSERT INTO SELECT语句
  • 支持忽略表,表名支持正则表达式

在你的应用中添加Dynamic-add-date

添加下面的依赖到你的pom文件中:

<dependency>
    <groupId>io.github.yidasanqian</groupId>
    <artifactId>dynamic-add-date</artifactId>
    <version>1.1.0</version>
</dependency>

若使用Gradle/Grails:

compile 'io.github.yidasanqian:dynamic-add-date:1.1.0'

然后在mybatis-config.xml配置文件中加入如下设置即可:

<plugins>
        <plugin interceptor="io.github.yidasanqian.dynamicadddate.AddDateInterceptor">
        </plugin>
</plugins>

例如,原始Sql为:

insert into user(name, profession) values(?, ?)

使用该插件后Sql语句为:

insert into user(name, profession, gmt_create, gmt_modified) values(?, ?, '2017-10-15 10:10:10', '2017-10-15 10:10:10')

批量插入的情况:

insert into user(name, profession) values(?, ?), (?, ?), (?, ?)

使用该插件后Sql语句为:

insert into user(name, profession, gmt_create, gmt_modified) values(?, ?, '2017-10-15 10:10:10', '2017-10-15 10:10:10'),
(?, ?, '2017-10-15 10:10:10', '2017-10-15 10:10:10'), (?, ?, '2017-10-15 10:10:10', '2017-10-15 10:10:10')

支持INSERT INTO SELECT语句

原始sql:

insert into t_user(username, mobile, create_at)
       select r.`name`, ?, r.create_at from t_role r;

使用该插件后Sql语句为:

INSERT INTO t_user (username, mobile, create_at, update_at) SELECT r.`name`, ?, '2019-07-06 10:36:51.066', '2019-07-06 10:36:51.066' FROM t_role r

默认新建日期的列名为 gmt_create, 更新日期的列名为 gmt_modified

可以通过设置key createDateColumnNameupdateDateColumnName来分别指定日期列的名称:

<plugin interceptor="io.github.yidasanqian.dynamicadddate.AddDateInterceptor">
    <property name="createDateColumnName" value="gmt_create"/>
    <property name="updateDateColumnName" value="gmt_modified"/>
</plugin>

与Spring Boot集成

首先mybatis依赖

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.4</version>
</dependency>

其次写入自定义配置:

1)xml方式进行配置
也是在mybatis-config.xml配置文件中加入如下设置:

 <plugin interceptor="io.github.yidasanqian.dynamicadddate.AddDateInterceptor">
     <property name="createDateColumnName" value="gmt_create"/>
     <property name="updateDateColumnName" value="gmt_modified"/>
 </plugin>

然后在 application.properties加入如下配置即可:

mybatis.config-location=classpath:mybatis-config.xml

2)创建bean方式进行配置

@Bean
public AddDateInterceptor addDateInterceptor(){
    Properties properties = new Properties();
    properties.setProperty("createDateColumnName","gmt_create");
    properties.setProperty("updateDateColumnName","gmt_modified");
    AddDateInterceptor addDateInterceptor = new AddDateInterceptor();
    addDateInterceptor.setProperties(properties);
    return addDateInterceptor;
}

忽略表

实际应用中并不是所有的表都需要创建时间和更新时间字段,如何设置忽略处理的表呢?

1)xml方式
也是在mybatis-config.xml配置文件中加入如下设置:

<plugins>
    <plugin interceptor="io.github.yidasanqian.dynamicadddate.AddDateInterceptor">
        <property name="ignoreTables" value="^user.*,permission"/>
    </plugin>
</plugins>

2)创建Bean方式

@Bean
public AddDateInterceptor addDateInterceptor(){
    Properties properties = new Properties();
    properties.setProperty("createDateColumnName","gmt_create");
    properties.setProperty("updateDateColumnName","gmt_modified");
    properties.setProperty("ignoreTables","^user.*,permission");
    AddDateInterceptor addDateInterceptor = new AddDateInterceptor();
    addDateInterceptor.setProperties(properties);
    return addDateInterceptor;
}

其中name=ignoreTables属性值为固定,不能变,value的格式:表名,表名

其中value的值为表名,支持正则表达式,且多个表名以英文逗号,分隔并且之间不含空格。

The MIT License (MIT) Copyright (c) 2017 yidasanqian Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Dynamic-add-date是基于Mybatis插件原理开发的可以动态在Insert和Update Sql语句中添加日期列和对应的值的插件。 展开 收起
Java
MIT
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/yidasanqian/dynamic-add-date.git
git@gitee.com:yidasanqian/dynamic-add-date.git
yidasanqian
dynamic-add-date
dynamic-add-date
master

搜索帮助