基于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类型这一功能,方便了接下来向前台页面发送。











转载于:https://www.cnblogs.com/waklWithWind/p/11171999.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值