mybatis日志在线生成sql(日志参数填充,sql日志格式化)

背景:平时我们在看线上日志的时候,想知道一条执行sql的结果,需要把mybatis生成的日志copy出来,然后把参数一条条手动塞进去,简单sql还好,如果是复杂sql,尤其参数多达几十甚至上百个情况,这就头大.不仅非常耗时,而且容易出错.

针对上面出现的问题,我开发出了在线一键生成mybatis执行sql的网站,只需要把日志copy出来,点击一键转换就能轻松获得参数填充好的sql,大大节省了日志分析时间.

下面是使用方法:

1.将Preparing:日志 copy出来,粘贴到Preparing文本框中(注意copy出来的日志必须带有Preparing:)

2.将Parameters:日志 copy出来,粘贴到Preparing文本框中(注意copy出来的日志必须带有Parameters:)

3.点击转换按钮,在右面边就会有生成好的可以执行的sql

如下图:

一. 生成器模板路径可以引用相关变量 如 ${basepackage}/${className}.java,根据该变量生成输出文件 二. 自动搜索某个目录所有模板文件,无需配置 三.代码生成器模板可以引用的相关变量 1. g.generateByTable("table_name") 方法可以引用的变量 table : cn.org.rapid_framework.generator.provider.db.table.model.Table 2. g.generateByClass(UserInfo.class) 方法可以引用的变量 clazz : cn.org.rapid_framework.generator.provider.java.model.JavaClass 3. g.generateBySql("select * from user_info where pwd=:pwd") 方法可以引用的变量 sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有前缀 gg : 模板控制变量, cn.org.rapid_framework.generator.GeneratorControl 四.每个模板有gg变量可以控制自身的自定义配置 (每一个模板都会创建新的gg实例) 如是否生成,是否覆盖目标文件,甚至是生成其它文件 ${gg.setIgnoreOutput(true)}: 如果为true则不生成输出文件 ${gg.generateFile(outputFile,content)} 在模板中生成其它文件 ${gg.getProperty(key,defaultValue)}: 得到proproty,如果没有找到,则返回默认值 ${gg.getInputProperty(key)}: 会弹出一个输入框,提示用户输入值 具体参考: http://code.google.com/p/rapid-framework/wiki/rapid_generator_gg 五.支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除 六. 自动删除模板扩展名: .ftl,.vm 举例: 如你有一个模板 SqlMap.xml.ftl 将变为 SqlMap.xml 所以你要生成ftl扩展名的文件,应该将文件名从 list.ftl => list.ftl.ftl 七. 模板自动include所有父目录的:macro.include文件,可以存放公共的macro 示例: 如你的模板为 com/project/UserDao.java, 将自动include: com/project/macro.include, com/macro.include, macro.include 八. generator.xml (或者generator.properties)配置文件 1.类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME}, 引用System.getProperties()直接引用 2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"_dir"后缀 示例: pkg=com.company => pkg_dir=com/company 九.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式 (通过扩展名自动识别) 十. 数据库表配置,用于自定义生成器模板引用的table变量,配置文件必须存放在classpath: generator_config/table/table_name.xml (该文件生成器可以生成,自己再自定义修改)
### 回答1: Mybatis Plus 日期格式化可以通过在实体类中使用注解 @TableField 或者在 SQL 语句中使用 DATE_FORMAT 函数来实现。具体方法如下: 1. 在实体类中使用注解 @TableField 在实体类中,可以使用注解 @TableField 来指定日期格式化的方式。例如: ``` @TableField(value = "create_time", fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; ``` 其中,@TableField 注解中的 value 属性指定了数据库中对应的字段名,fill 属性指定了该字段的填充方式(这里是 INSERT,表示插入时自动填充),@JsonFormat 注解指定了日期格式化的方式。 2. 在 SQL 语句中使用 DATE_FORMAT 函数 在 SQL 语句中,可以使用 DATE_FORMAT 函数来对日期进行格式化。例如: ``` SELECT id, name, DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS create_time FROM user; ``` 其中,DATE_FORMAT 函数的第一个参数是要格式化的日期字段,第二个参数是日期格式化的模板。这里的模板是 '%Y-%m-%d %H:%i:%s',表示年-月-日 时:分:秒 的格式。 ### 回答2: Mybatis-Plus是一款优秀的Mybatis增强工具,在日常开发中经常会用到日期格式的转换,而Mybatis Plus提供了多种方式来实现日期格式化。 一、使用Mybatis Plus自带的类型处理器(TypeHandler) Mybatis-Plus自带了三种日期类型处理器: - com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler(依赖于jackson-databind) - com.baomidou.mybatisplus.extension.handlers.LocalDateTypeHandler - com.baomidou.mybatisplus.extension.handlers.LocalDateTimeTypeHandler 这三种类型处理器可以直接在实体类的日期属性上加上注解@TypeHandler来使用。 例如:在实体类中,使用Jackson的日期类型处理器来转换日期属性,代码如下: ``` public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @TypeHandler(value = JacksonTypeHandler.class) private Date createTime; // getter/setter } ``` 此时,Mybatis Plus会自动将createTime属性使用JacksonTypeHandler来进行日期格式化转换。 二、使用自定义的类型处理器 如果Mybatis Plus自带的类型处理器不能满足需求,也可使用自定义的类型处理器来实现日期格式化转换。 首先,需要自定义一个类型处理器,实现接口org.apache.ibatis.type.TypeHandler。 例如:自定义一个处理LocalDateTime类型的转换器,代码如下: ``` public class LocalDateTimeTypeHandler implements TypeHandler<LocalDateTime> { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override public void setParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException { if (parameter == null) { ps.setNull(i, Types.VARCHAR); } else { ps.setString(i, parameter.format(FORMATTER)); } } @Override public LocalDateTime getResult(ResultSet rs, String columnName) throws SQLException { String str = rs.getString(columnName); if (StringUtils.isEmpty(str)) { return null; } return LocalDateTime.parse(str, FORMATTER); } @Override public LocalDateTime getResult(ResultSet rs, int columnIndex) throws SQLException { String str = rs.getString(columnIndex); if (StringUtils.isEmpty(str)) { return null; } return LocalDateTime.parse(str, FORMATTER); } @Override public LocalDateTime getResult(CallableStatement cs, int columnIndex) throws SQLException { String str = cs.getString(columnIndex); if (StringUtils.isEmpty(str)) { return null; } return LocalDateTime.parse(str, FORMATTER); } } ``` 然后,在实体类的日期属性上加上注解@TypeHandler,指定使用自定义的处理器。 例如:在实体类中,使用自定义的LocalDateTime类型处理器来转换日期属性,代码如下: ``` public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; @TypeHandler(value = LocalDateTimeTypeHandler.class) private LocalDateTime createTime; // getter/setter } ``` 此时,Mybatis Plus会自动将createTime属性使用LocalDateTimeTypeHandler来进行日期格式化转换。 总结: 使用Mybatis-Plus进行日期格式化转换,可以使用自带的类型处理器或自定义类型处理器,可以根据具体业务需求来选择使用不同的处理方式。在实际开发中,使用Mybatis-Plus进行日期格式化转换,不仅可以提高开发效率,还能使代码更加简洁、易读。 ### 回答3: Mybatis Plus 是 Mybatis 的增强版,是一款优秀的 ORM 框架,具有简化开发工作、提高效率的功能。对于日期格式化Mybatis Plus 提供了多种方式进行处理。 1. 注解方式:使用 @TableField 注解指定日期格式化方式,可以通过 value 属性设置日期格式,例如: ```java @TableField(value = "create_time", fill = FieldFill.INSERT) @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") private Date createTime; ``` 这样,在查询结果时,将会使用指定的日期格式进行格式化。 2. 全局配置:在 Mybatis Plus 配置文件中添加配置,用于对所有日期类型字段进行格式化,例如: ```yaml mybatis-plus: type-handlers-package: com.example.typehandler global-config: db-config: # 日期格式化 logic-delete-value: 1 logic-not-delete-value: 0 field-strategy: not_empty db-type: mysql id-type: auto table-prefix: mp_ column-format: yyyy-MM-dd HH:mm:ss ``` 这里为所有的日期字段指定了格式化方式为“yyyy-MM-dd HH:mm:ss”,可以自定义对应的 TypeHandler 实现类。 3. 自定义 TypeHandler:自定义处理器用于将数据库中的日期类型转换为 Java 对象,或者将 Java 对象转换为数据库中的日期类型,可以通过实现 TypeHandler 接口来实现。 ```java public class DateTypeHandler extends BaseTypeHandler<Date> { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException { String dateStr = DateFormatUtils.format(date, DATE_FORMAT); preparedStatement.setString(i, dateStr); } @Override public Date getNullableResult(ResultSet resultSet, String s) throws SQLException { String str = resultSet.getString(s); if (StringUtils.isEmpty(str)) { return null; } return DateUtils.parseDate(str, DATE_FORMAT); } @Override public Date getNullableResult(ResultSet resultSet, int i) throws SQLException { String str = resultSet.getString(i); if (StringUtils.isEmpty(str)) { return null; } return DateUtils.parseDate(str, DATE_FORMAT); } @Override public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException { String str = callableStatement.getString(i); if (StringUtils.isEmpty(str)) { return null; } return DateUtils.parseDate(str, DATE_FORMAT); } } ``` 然后,在实体类中使用 @TableField 注解指定该字段使用自定义的 TypeHandler 即可。 推荐的方式是使用注解来指定日期格式化,这样也更加灵活。如果需要对全局进行设置,可以在配置文件中进行配置。使用自定义 TypeHandler 可以满足特定情况的需求。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值