基於Mybatis框架的分頁查詢(基礎篇)


 

  相信大多數人對基於mybatis框架的查詢很熟悉了,這里我簡要概述一下流程。

  假訂我們已經有了一個省份信息的數據庫,一個省份的Pojo類,那么接下要做什么呢?

  首先我們要寫DAO層,定義功能接口,以省份查詢ProvinceDao為例,在其中定義方法,比如查詢全部省份。List<Province> findAll();返回值是Province這個類的List集合

接下來要完成mapper.xml文件的編寫了對吧,為了方便我就把代碼放在這里了。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空間,用於隔離sql -->
<mapper namespace="這里寫剛剛定義功能接口的相對路徑,由於我們的方法沒有參數,所以parameterType不用寫">
<!-- //查詢全部 根據KEY詞 result + 包名 parameter + 數據類名
findAll
-->
<select id="findAll" resultType="返回值類型pojo的相對路徑">
select id,pId,pName from provinces
</select>
</mapper>
  到這里我們的查詢全部省份信息的mapper文件就完成了,我們還需要一個mybatis-config.xml文件用來連接數據庫,代碼如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- 通過這個配置文件完成mybatis與數據庫的連接 -->
<configuration>
<typeAliases>
<!-- <typeAlias alias="User" type="cn.smbms.pojo.User"/> -->
<package name="san.jilian.dong.pojo.*"/>
</typeAliases>
<!-- 配置分頁插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--helperDialect 方言:就表示此插件針對哪個數據庫進行優化處理
這個方言可以不配置,因為此插件可以依據你的 url 的信息來推斷出
你用的數據庫是哪一個
-->
<property name="offsetAsPageNum" value="false"/>

<property name="rowBoundsWithCount" value="false"/>

<property name="pageSizeZero" value="true"/>
<!--分頁合理化參數-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
<environments default="development">
<environment id="development">
<!--配置事務管理,采用JDBC的事務管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED:mybatis自帶的數據源,JNDI:基於tomcat的數據源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>

<!-- 將mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="你的mapper.xml文件名"></mapper>
</mappers>
</configuration>
  這里我們一定要養成一個好習慣,在測試類中試一下,能否從DB中拿到對象,如果測試出不能拿到數據,逐一檢查mapper,config,sql語句,易寫錯的是namespace,id,resultType,parameterType
測試類代碼如下:
  
public class test0711 {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
ProvinceMapper mapper = sqlSession.getMapper(ProvinceMapper.class);
List<Province> provinces = mapper.findAll();
     //在這里我們輸出一下 如果能拿到這個集合 就說明之前的操作都是沒問題的
     System.out.println(provinces);    
    }

}
  上面就是我們常用的mybatis框架進行查詢操作的流程,我們開始接下來的分頁操作。
  分頁操作的我使用的工具是PageHelper,使用其中的PageInfo擔任數據暫存站的角色
  首先,導入依賴
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>

  在service層中,寫一個PageService接口,用於規定獲得PageInfo的方法
import com.github.pagehelper.PageInfo;

public interface PageService {
/**
* pageHelper中有一個類 PageInfo
* 需要把所有的數據都放到pageInfo里
   * pageNum代表當前頁碼, pageSize代表一頁放多少條數據
   *
     */
PageInfo getPageInfo(int pageNum,int pageSize);
}
  接着寫接口實現類:
  
import java.util.List;

/**
* pageHelper 的使用
* 注意PageHelper.startPage()在最前面
*/
public class PageServiceImp implements PageService {
@Override
public PageInfo getPageInfo(int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
SqlSession sqlSession = MybatisUtil.getSqlSession();
ProvinceMapper mapper = sqlSession.getMapper(ProvinceMapper.class);
List<Province> all = mapper.findAll();
PageInfo<Province> provincePageInfo = new PageInfo<>(all);
return provincePageInfo;
}
}
在實現類中,通過前面的測試類直接拿到我們要進行分頁操作的對象。

拿到對象后,把他放入(盒子)PageInfo中,等待下一步處理。

WEB層:
  
新建一個servlet持有對pageService的引用,並初始化,新建一個PageServiceImp()用於調用方法
@WebServlet(name = "PageServlet",urlPatterns = "pageTest.do")
public class PageServlet extends HttpServlet {
//持有對pageService的引用
private PageService ps;
//初始化pageService
@Override
public void init() throws ServletException {
new PageServiceImp();
}

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletUtil.SetCharset(req,resp);
//后端數據進行分頁,裝載在PageInfo中
PageInfo pageInfo = ps.getPageInfo(1, 5);
/**
* 將數據轉換成JSON格式 發送到前台
*/
//將對象 轉為 JSON格式的字符串
String string = JSON.toJSONString(pageInfo);
resp.getWriter().write(string);
}
}

    利用PageHelper中的PageInfo,實現了查詢的數據從對象類型(或者集合)轉換成JSON類型這一功能,方便了接下來向前台頁面發送。












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM