<!--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中如何实现字段默认值的自动填充,特别是针对`createTime`和`updateTime`这两个常见的日期类型字段。MybatisPlus是一个基于Mybatis和Spring的数据操作框架,它提供了丰富的 CRUD...
2. **tk.mybatis自动填充策略**:在tk.mybatis中,可以定义实体类的某些字段为"填充字段",例如`@TableField(fill = FieldFill.INSERT)`表示该字段在插入数据时自动填充,`@TableField(fill = FieldFill.INSERT_...
- MyBatis-Plus是一个为MyBatis提供简化操作的框架,它包含自动填充、条件构造器、多表关联查询等功能。 - MyBatis-Plus的核心组件包括:Entity(实体类)、Mapper(映射器接口)、XML/注解配置(SQL语句定义)、...
在创建或更新数据时,Mybatis-Plus支持数据自动填充,例如创建时间、修改时间和状态等字段,可以设置全局默认值或者根据特定规则自动填充,提高数据处理的规范性。 4. **自动关联查询**: 对于一对多、多对一等...
总结,通过SpringBoot集成Mybatis插件,我们能够灵活地扩展数据操作功能,比如自动填充创建人、创建时间、修改人和修改时间等信息。这不仅提高了代码的可维护性,也减少了手动处理这些细节的工作量。理解并掌握这种...
MP 不修改 MyBatis 的原有功能,而是作为一个增强工具,提供了许多便捷的功能,例如:自动 CRUD 操作、条件构造器、批量操作、缓存管理等。 在开始使用 MyBatisPlus 之前,需要了解的基础知识包括 Mybatis、Spring ...
然而,在某些场景下,开发者可能希望即使参数为null,也能够执行setter,例如,用于初始化对象或填充默认值。这就是`callSettersOnNulls`配置的作用。 当`callSettersOnNulls`设置为true时,MyBatis会在映射语句...
MybatisPlus是Mybatis的扩展插件,简化了对数据库的操作,提供了包括单表操作、关联查询、条件构造、分页查询、自定义填充字段等功能。相比于Mybatis,MybatisPlus提供了更多的便捷操作,例如:无需编写SQL和...
这是因为`datetime`类型不接受空值(NULL),如果未提供有效值,它将自动填充这个特定的历史日期。这个问题在SQL Server 2005及后续版本中尤为常见。然而,我们可以通过一些技巧来避免这种情况,确保数据的准确性和...
如果使用MyBatis,可以使用`insertSelective`方法,只插入设置了值的字段,数据库将填充默认值。 在数据库结构没有预设默认值,且无法更改的情况下,可以通过反射技术动态地为null字段赋予默认值。例如,可以编写一...
本文将深入探讨这两个工具及其在SSM(Spring、SpringMVC、MyBatis)框架中的应用。 **jasReport** jasReport是一款开源的报表生成工具,它提供了强大的报表设计功能,支持多种数据源,如数据库、XML、CSV等。...
- **填充NULL值**:在报表或数据分析中,有时我们需要将NULL值替换为某个默认值,如0或空字符串。COALESCE可以帮助我们实现这一点。 - **联合查询**:在合并多个表的数据时,如果某些字段可能在某些表中不存在...
这些SQL文件可以用来创建数据库表结构、填充初始数据或者设置一些默认值。通过执行这些脚本,你可以复现项目运行时的数据库环境,这对于理解数据存储和业务逻辑的关系至关重要。 学习这个OA项目实例,你可以掌握...
6. **空值处理**:在填充Java Bean时,BeanUtil可以设置策略来处理数据库中的空值,如将其转化为Java的null,或者默认值。 7. **自定义转换规则**:对于一些特殊需求,如特定字段的转换逻辑,BeanUtil允许用户...
在设计数据库时,可以为某些字段设置默认值,以便在插入新记录时自动填充这些字段。 #### 十八、MyBatis BaseMapper 在使用MyBatis时,可以不创建XML映射文件,而是直接在Java类中编写Mapper接口的方法定义。这种...
"db.sql" 文件很可能是数据库的初始化脚本,用于创建数据库表、填充初始数据或者设置默认值。在实训管理系统中,它可能会创建如用户表、实训项目表、成绩表等,并设定合适的外键约束,确保数据的一致性。 "说明文档...