Coder Social home page Coder Social logo

mybatis-pageable's Introduction

Mybatis Pageable

背景

实现分页基于以下想法,就是直接将分页请求对象(包括请求页面,页面大小等)作为参数传入,返回为需要的分页对象(包含总页数、总记录数、当前页码、当前页记录等)。没有对Mybatis的原理去做过多的了解,知道拦截器可以实现此功能,再加上网上借鉴了一些代码,先实现了想法。

使用方法和思路

拦截器会对Mapper方法中的参数进行分析,如果发现Pageable类型的参数,则认为是分页请求,将请求封装为数据库分页sql,查询出总记录数和当前页记录,封装为Page对象返回。Page对象代表了当前页的信息。

拦截器配置 在 mybatis-config.xml 中

<plugins>
    <plugin interceptor="org.buzheng.mybatis.pageable.MybatisPageableInterceptor">
	    <property name="dialectClass" value="org.buzheng.mybatis.pageable.MySQLDialect"/>
	</plugin>
</plugins>

Mapper接口方法写法

public interface UserMapper {
	public List<User> findAll();	
	public Page<User> findPage(Pageable pageRequest);	
	public Page<User> findPageByFirstName(@Param("firstName") String firstName, Pageable pageRequest);	
}

Mapper.xml 写法(和普通查询一样)

<mapper namespace="org.buzheng.mybatis.pageable.mapper.UserMapper">

  <select id="findAll" resultType="User">
    select * from user
  </select>
    
  <select id="findPage" resultType="User">
    select * from user
  </select>
  
  <select id="findPageByFirstName" resultType="User">
    select * from user where firstName = #{firstName}
  </select>
</mapper>

使用方法

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
		.build(inputStream);

SqlSession session = sqlSessionFactory.openSession();

try {
	UserMapper mapper = session.getMapper(UserMapper.class);
	List<User> users = mapper.findAll();
	logger.info("all users: {}", users);

	// 分页查询
	Pageable pageRequest = new Pageable(0, 15);
	Page<User> userPage = mapper.findPage(pageRequest);
	logger.info("page 0: {}", userPage);
	
	// 分页查询
	userPage = mapper.findPageByFirstName("san", pageRequest);
	logger.info("page 0: {}", userPage);

} finally {
	session.close();
}

具体使用方法,参看测试案例,位于 src/test/java中

  • 单独使用mybatis时,参考:org.buzheng.mybatis.pageable.MybatisPageableInterceptorMain
  • spring继承mybatis时,参看测试用例:org.buzheng.mybatis.pageable.UserMaperTest

问题

分页暂时只支持Mapper方法中的sql在 xml 中配置。

如果sql通过注解@Select来配置,则会报错:Caused by: java.lang.NoSuchMethodException: org.buzheng.mybatis.pageable.Page.<init>()


方言类和部分逻辑来源于 https://github.com/miemiedev/mybatis-paginator ,特此感谢。

mybatis-pageable's People

Contributors

buzheng avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.