关于mybatis的拦截器 请移步 mybatis 拦截器实现
我们今天就根据这个插件 实现根据值hash分表功能
首先 准备一个 注解类
Share
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Share {
public int size();
/** 分片策略 */
public ShareStrategy strategy() default ShareStrategy.HASH;
static enum ShareStrategy {
/** hash分片 */
HASH;
}
}
在基础实体上添加注解
Model
@Share(size=2)
@Table(name = "model")
public class Model {
@Id
@Column(name = "id")
private Integer id;
//......
}
最重要的拦截器类
ShareStatementPlugin
/**
* @author :sunla
* @descript:构建分片sql
*/
@Intercepts({
@Signature(type = StatementHandler.class, method = "prepare", args = {
Connection.class }),
@Signature(type = StatementHandler.class, method = "parameterize", args = {
Statement.class }),
@Signature(type = StatementHandler.class, method = "batch", args = {
Statement.class}),
@Signature(type = StatementHandler.class, method = "update", args = {
Statement.class }),
@Signature(type = StatementHandler.class, method = "query", args = {
Statement.class,ResultHandler.class })})
public class ShareStatementPlugin