mybatis plug 只查id_mybatis插件plugin配置

一 前言

mybatis的插件配置还是十分重要,不管是进行sql增强,还是日志,异常处理都是很不错的选择,本文的示例对插入的数据进行参数增强;

二 mybatis插件实现

2.1 建表语句

CREATE TABLE `order` (

`id` int(11) NOT NULL COMMENT '订单编号',

`order_name` varchar(255) DEFAULT NULL COMMENT '订单名称',

`create_time` datetime DEFAULT NULL COMMENT '创建时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

实体

public class Order {

// 主键

private Long id;

// 订单名称

private String order_name;

// 创建时间

private LocalDateTime create_time;

// 省略set get

}

2.2 mapper

sql 映射文件

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

insert into `order` (

order_name

,create_time)

values (

#{order_name},

#{create_time}

)

mapper接口

public interface OrderMapper {

int addOrder(Order order);

}

2.3 plugin

实现思路是实现Interceptor接口,然后获取参数,对参数进行增强,在继续执行方法,最后将拦截器注入mybatis配置中

/**

* @Author lsc

*

mybatis 插件

*/

@Intercepts({ @Signature(type = Executor.class, method = "update"

, args = { MappedStatement.class, Object.class}) })

public class AddPlugin implements Interceptor {

public Object intercept(Invocation invocation) throws Throwable {

MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];

String sqlId = mappedStatement.getId();

// 参数-此时为order 对象

Object parameter = invocation.getArgs()[1];

// 参数:com.zszxz.plugin.entity.Order@48503868

System.out.print("参数:"+parameter);

// 拦截参数,对参数进行增强

Order order = (Order) parameter;

order.setCreate_time(LocalDateTime.now());

// 此时插入数据库,会有时间插入

return invocation.proceed();

}

public Object plugin(Object target) {

return Plugin.wrap(target,this);

}

public void setProperties(Properties properties) {

}

}

@Signature是签名,为一个数组,可以在同一个拦截器里面拦截不同的方法参数;

method中可以指定query表示查询,update表示增删改;具体的方法看拦截接口提供的方法;

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

除了type除了对Executor 进行拦截还能对下面的接口进行拦截:拦截参数的处理ParameterHandler (getParameterObject, setParameters)

拦截结果集的处理ResultSetHandler (handleResultSets, handleOutputParameters)

预编译处理StatementHandler (prepare, parameterize, batch, update, query)

mappedStatement.getSqlCommandType();可以获得执行语句的类型通常进行判断时很有用

public enum SqlCommandType {

UNKNOWN,

INSERT,

UPDATE,

DELETE,

SELECT,

FLUSH;

private SqlCommandType() {

}

}

2.4 配置

mybatis-config.xml 中添加插件配置,

源码在知识追寻者专栏说明,或者公主号有源码链接;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值