`
terry0501
  • 浏览: 313606 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mybatis 自动填充默认值

 
阅读更多
<!--mybatis-config-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<settings>
		<setting name="cacheEnabled" value="true" />
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="multipleResultSetsEnabled" value="true" />
		<setting name="useColumnLabel" value="true" />
		<setting name="useGeneratedKeys" value="false" />
		<setting name="autoMappingBehavior" value="PARTIAL" />
		<setting name="defaultExecutorType" value="SIMPLE" />
		<setting name="defaultStatementTimeout" value="25" />
		<setting name="safeRowBoundsEnabled" value="false" />
		<setting name="mapUnderscoreToCamelCase" value="true" />
		<setting name="localCacheScope" value="SESSION" />
		<setting name="jdbcTypeForNull" value="OTHER" />
		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
		<setting name="defaultStatementTimeout" value="600"/>
		<setting name="logImpl" value="SLF4J" />
	</settings>

	<plugins>
		<!-- com.github.pagehelper为PageHelper类所在包名 -->
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<property name="helperDialect" value="oracle"/>
			<property name="offsetAsPageNum" value="true"/>
			<property name="rowBoundsWithCount" value="true"/>
			<property name="pageSizeZero" value="false"/>
			<property name="reasonable" value="false"/>
			<property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/>
			<property name="supportMethodsArguments" value="true"/>
			<property name="returnPageInfo" value="none"/>
		</plugin>
		<plugin interceptor="com.xushen.customer.account.interceptor.DBInterceptor">
			<property name="databaseType" value="Oracle"/>
		</plugin>
		<plugin interceptor="com.xushen.run.mybatis.interceptor.AutoDateInterceptor">
			<property name="createDateColumnName" value="CRT_TIMESTAMP"/>
			<property name="updateDateColumnName" value="MTN_TIMESTAMP"/>
		</plugin>
	</plugins>
	
</configuration>




//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

import java.lang.reflect.Field;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Intercepts({@Signature(
    type = Executor.class,
    method = "update",
    args = {MappedStatement.class, Object.class}
)})
public class AutoDateInterceptor implements Interceptor {
    private final Logger log = LoggerFactory.getLogger(this.getClass());
    private static final String METHOD_PREPARE = "prepare";
    private static final String METHOD_SETPARAMETERS = "setParameters";
    private static final String METHOD_UPDATE = "update";
    private static String createDateColumnName;
    private static String updateDateColumnName;
    private static DbType dbType;
    public static String createDateFieldName;
    public static String updateDateFieldName;

    public AutoDateInterceptor() {
    }

    public Object intercept(Invocation invocation) throws Throwable {
        if("update".equals(invocation.getMethod().getName())) {
            MappedStatement statement = (MappedStatement)invocation.getArgs()[0];
            Object parameter = invocation.getArgs()[1];
            SqlCommandType sqlCommandType = statement.getSqlCommandType();
            Date d = new Date();
            if(parameter instanceof Map) {
                Iterator var6 = ((Map)parameter).values().iterator();

                while(var6.hasNext()) {
                    Object o = var6.next();
                    if(SqlCommandType.INSERT == sqlCommandType) {
                        this.create(o, d);
                    } else if(SqlCommandType.UPDATE == sqlCommandType) {
                        this.update(o, d);
                    }
                }
            } else if(SqlCommandType.INSERT == sqlCommandType) {
                this.create(parameter, d);
            } else if(SqlCommandType.UPDATE == sqlCommandType) {
                this.update(parameter, d);
            }
        }

        return invocation.proceed();
    }

    public void create(Object o, Date d) {
        try {
            Field f1 = ReflectionUtils.getDeclaredField(o, createDateFieldName);
            if(f1 != null) {
                ReflectionUtils.setFieldValue(o, f1, d);
            }

            Field f2 = ReflectionUtils.getDeclaredField(o, updateDateFieldName);
            if(f2 != null) {
                ReflectionUtils.setFieldValue(o, f2, d);
            }
        } catch (Exception var5) {
            this.log.error(var5.getMessage(), var5);
        }

    }

    public void update(Object o, Date d) {
        try {
            Field f = ReflectionUtils.getDeclaredField(o, updateDateFieldName);
            if(f != null) {
                ReflectionUtils.setFieldValue(o, f, d);
            }
        } catch (Exception var4) {
            this.log.error(var4.getMessage(), var4);
        }

    }

    public Object plugin(Object o) {
        return Plugin.wrap(o, this);
    }

    public void setProperties(Properties properties) {
        createDateColumnName = properties.getProperty("createDateColumnName", "gmt_create");
        updateDateColumnName = properties.getProperty("updateDateColumnName", "gmt_modified");
        dbType = DbType.get(properties.getProperty("dbType", "oracle"));
        createDateFieldName = StringUtil.underlineToHump(createDateColumnName);
        updateDateFieldName = StringUtil.underlineToHump(updateDateColumnName);
    }
}

 

分享到:
评论

相关推荐

    MybatisPlus常用字段默认值自动填充.docx

    在本文中,我们将深入探讨MybatisPlus中如何实现字段默认值的自动填充,特别是针对`createTime`和`updateTime`这两个常见的日期类型字段。MybatisPlus是一个基于Mybatis和Spring的数据操作框架,它提供了丰富的 CRUD...

    java springboot tk mybatis

    2. **tk.mybatis自动填充策略**:在tk.mybatis中,可以定义实体类的某些字段为"填充字段",例如`@TableField(fill = FieldFill.INSERT)`表示该字段在插入数据时自动填充,`@TableField(fill = FieldFill.INSERT_...

    mybatis-plus源码(mybatis-plus-3.5.1.tar.gz)

    - MyBatis-Plus是一个为MyBatis提供简化操作的框架,它包含自动填充、条件构造器、多表关联查询等功能。 - MyBatis-Plus的核心组件包括:Entity(实体类)、Mapper(映射器接口)、XML/注解配置(SQL语句定义)、...

    mybatis-plus框架的拓展包,在框架原有基础上做了进一步的轻度封装,增强内容

    在创建或更新数据时,Mybatis-Plus支持数据自动填充,例如创建时间、修改时间和状态等字段,可以设置全局默认值或者根据特定规则自动填充,提高数据处理的规范性。 4. **自动关联查询**: 对于一对多、多对一等...

    my_springboot_01.rar

    总结,通过SpringBoot集成Mybatis插件,我们能够灵活地扩展数据操作功能,比如自动填充创建人、创建时间、修改人和修改时间等信息。这不仅提高了代码的可维护性,也减少了手动处理这些细节的工作量。理解并掌握这种...

    MyBatisPlus.docx

    MP 不修改 MyBatis 的原有功能,而是作为一个增强工具,提供了许多便捷的功能,例如:自动 CRUD 操作、条件构造器、批量操作、缓存管理等。 在开始使用 MyBatisPlus 之前,需要了解的基础知识包括 Mybatis、Spring ...

    callSettersOnNulls-test

    然而,在某些场景下,开发者可能希望即使参数为null,也能够执行setter,例如,用于初始化对象或填充默认值。这就是`callSettersOnNulls`配置的作用。 当`callSettersOnNulls`设置为true时,MyBatis会在映射语句...

    SpringBoot+MybatisPlus+maven项目架构,下载就能直接用

    MybatisPlus是Mybatis的扩展插件,简化了对数据库的操作,提供了包括单表操作、关联查询、条件构造、分页查询、自定义填充字段等功能。相比于Mybatis,MybatisPlus提供了更多的便捷操作,例如:无需编写SQL和...

    探讨:sql插入空,默认1900-01-01 00:00:00.000的解决方法详解

    这是因为`datetime`类型不接受空值(NULL),如果未提供有效值,它将自动填充这个特定的历史日期。这个问题在SQL Server 2005及后续版本中尤为常见。然而,我们可以通过一些技巧来避免这种情况,确保数据的准确性和...

    在CRUD操作中与业务无关的SQL字段赋值的方法

    如果使用MyBatis,可以使用`insertSelective`方法,只插入设置了值的字段,数据库将填充默认值。 在数据库结构没有预设默认值,且无法更改的情况下,可以通过反射技术动态地为null字段赋予默认值。例如,可以编写一...

    jasReport+ireport

    本文将深入探讨这两个工具及其在SSM(Spring、SpringMVC、MyBatis)框架中的应用。 **jasReport** jasReport是一款开源的报表生成工具,它提供了强大的报表设计功能,支持多种数据源,如数据库、XML、CSV等。...

    MySql COALESCE函数使用方法代码案例

    - **填充NULL值**:在报表或数据分析中,有时我们需要将NULL值替换为某个默认值,如0或空字符串。COALESCE可以帮助我们实现这一点。 - **联合查询**:在合并多个表的数据时,如果某些字段可能在某些表中不存在...

    OA项目实例

    这些SQL文件可以用来创建数据库表结构、填充初始数据或者设置一些默认值。通过执行这些脚本,你可以复现项目运行时的数据库环境,这对于理解数据存储和业务逻辑的关系至关重要。 学习这个OA项目实例,你可以掌握...

    beanutil数据库操作工具

    6. **空值处理**:在填充Java Bean时,BeanUtil可以设置策略来处理数据库中的空值,如将其转化为Java的null,或者默认值。 7. **自定义转换规则**:对于一些特殊需求,如特定字段的转换逻辑,BeanUtil允许用户...

    一个java程序员的经验总结

    在设计数据库时,可以为某些字段设置默认值,以便在插入新记录时自动填充这些字段。 #### 十八、MyBatis BaseMapper 在使用MyBatis时,可以不创建XML映射文件,而是直接在Java类中编写Mapper接口的方法定义。这种...

    springboot560实训管理系统的设计与实现修改后代码(1)pf.rar

    "db.sql" 文件很可能是数据库的初始化脚本,用于创建数据库表、填充初始数据或者设置默认值。在实训管理系统中,它可能会创建如用户表、实训项目表、成绩表等,并设定合适的外键约束,确保数据的一致性。 "说明文档...

Global site tag (gtag.js) - Google Analytics