mybatis 自定义插件

    科技2022-07-12  136

    mybatis插件扩展机制

    我们可以基于mybatis插件机制实现分页、分表、监控等功能,mybatis四大组件包括Executor、StatementHandler、ParameterHandler、ResultSetHandler,他们提供了简单易用的插件扩展机制。 插件扩展需两步:

    1、实现Interceptor /** * 通过Intercepts和Signature两个注解,定义插件拦截哪个核心对象里的哪个方法 */ @Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}) }) public class MyPlugin implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { System.out.println("---------增强逻辑-------------"); return invocation.proceed(); } /** * 把当前拦截器生成代理加入到拦截器链 * * @param target * @return */ @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { System.out.println("-------------获取配置文件-------------"); } } 2、修改核心配置文件 <plugins> <plugin interceptor="com.plugin.MySqlPagingPlugin"> <!--配置参数--> <property name="name" value="Bob"/> </plugin> </plugins>

    自定义分页插件

    MyBatis可以使用第三方的插件来对功能进行扩展,只需导入相关包,修改配置文件即可

    <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>3.2</version> </dependency> <!--注意:分页助手的插件配置在通用馆mapper之前*-->* <plugin interceptor="com.github.pagehelper.PageHelper"> <!—指定方言 —> <property name="dialect" value="mysql"/> </plugin>

    调用查询语句前,执行

    PageHelper.startPage(1,10); List<User> userList = userMapper.selectList(); PageInfo pageInfo = new PageInfo<>(userList);
    通用Mapper如何实现

    单表增删改查,基于mybatis的插件机制,不需要在dao中增加方法,只需要写好实体类,就能支持相应的增删改查方法。通用Mapper使用需5步:

    <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.5</version> </dependency>

    2.mybatis核心配置文件中增加配置项

    <plugins> <plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper"></property> </plugin> </plugins>

    3.在实体类中编写映射

    @Table(name="user") public class User{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; }

    4.定义接口UserMapper,继承Mapper<User>,就拥有了Mapper中封装的一些常用方法

    Processed: 0.009, SQL: 8