今天寻找一个 mybatis 的分页方法,后来寻找到一个不错的插件,顺便记录 mybatis 如何安装插件
分页插件
网上的关于 mybatis 分页插件有很多,最后采用的这个。
ps:mybatis 原本采用的是内存分页。
git地址
maven 依赖
<dependencies>
...
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>1.2.17</version>
</dependency>
...
</dependencies>
安装方法
在 mybatis 配置文件中
<configuration>
<plugins>
<plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
<property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"/> <!-- 这里填写的是有关于数据库的选择 -->
</plugin>
</plugins>
</configuration>
在 spring 配置文件中
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:/mybatis/mybatis-config.xml">
</property>
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations">
<list>
<value>classpath*:/mybatis/*-*.xml</value>
</list>
</property>
<property name="plugins">
<list>
<bean class="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
<property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect">
</property>
</bean>
</list>
</property>
</bean>
java 配置
@Configuration
public class MyBatisConfig implements TransactionManagementConfigurer {//1
@Autowired //2
DruidDataSource druidDataSource;
private final Log logger = LogFactory.getLog(this.getClass());
@Bean(name = "sqlSessionFactory")//3
public SqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(druidDataSource);
bean.setTypeAliasesPackage("com.xxx.xxx.xxx.domain");
//添加插件
OffsetLimitInterceptor interceptor = new OffsetLimitInterceptor();
Properties properties = new Properties();
properties.setProperty("dialectClass", "com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect");
interceptor.setProperties(properties);
bean.setPlugins(new Interceptor[]{interceptor});
org.apache.ibatis.session.Configuration ibatisConfiguration = new org.apache.ibatis.session.Configuration();
ibatisConfiguration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(ibatisConfiguration);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath:/sqlMapper/*Mapper.xml"));
return bean.getObject();
} catch (Exception e) {
logger.error("mybatis config error:" + e.getMessage());
throw new RuntimeException(e);
}
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
logger.info("SqlSessionTemplate set sqlSessionFactory");
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
logger.info("DataSourceTransactionManager set datasource");
return new DataSourceTransactionManager(druidDataSource);
}
}
支持的数据库
使用方法
dao
//pageList 继承 List 借口,是由插件自带,PageBounds 也是插件自带
//这里的 dao 层采用借口的形式
@Select("select * from table where name = #{query.name}")
PageList<xxx> selectSellerListByQuery(@Param("query") Query query, PageBounds pageBounds);
service
//page:页数,limit:页大小
PageBounds pageBounds = new PageBounds(page, limit);
//query 是自己编写的类,不影响
PageList<xxx> list = xxxDao.selectXxxListByQuery(query, pageBounds);
//此方法返回总条数
list.getPaginator().getTotalCount()
这个插件还可以选择是否进行排序,或其他单独的参数。
public PageBounds(int page, int limit, Order... order)
public PageBounds(int page, int limit, List<Order> orders)
public PageBounds(int limit)
public PageBounds(Order... order)