我们可以基于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);单表增删改查,基于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中封装的一些常用方法