今天尋找一個 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)