一.mybatis的分页插件的使用.
1.引入maven
<!-- 引入mybatis的 pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.mybatis的配置
<!-- 引入 pageHelper插件 -->
<!--注意这里要写成PageInterceptor, 5.0之前的版本都是写PageHelper, 5.0之后要换成PageInterceptor-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--reasonable:分页合理化参数,默认值为false,直接根据参数进行查询。
当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。-->
<!--<property name="reasonable" value="true"/>-->
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
</plugin>
</plugins>
3.使用:PageHelper.startPage(pageIndex, pageSize);的后面一句查询语句会自动帮我们分页,并且数据不要在下面查询 感觉有问题。所有推荐推荐serviceimpl下面
//利用PageHelper分页查询 注意:这个一定要放查询语句的前一行,否则无法进行分页,因为它对紧随其后第一个sql语句有效
PageHelper.startPage(pageIndex, pageSize);
//User user=(User)session.getAttribute("user");
List<Blog> blogList = blogMapper.findBlogAll(use_id);
PageInfo<Blog> pageInfo = new PageInfo<Blog>(blogList);
注意注意:当查询涉及到三个表推荐使用关联查询,因为在使用分页查询的时候分页的数目会对不上。嵌套查询会重新新生成一个表,然后把所有的数据放进去,这样会出现的状况是blog表相同,但是标签有其他,这样会出现多的行。
下图就是一个很好的列子 他生产成了第三个表,然后把数据一一放进去,这样看半部分都相同,但因为标签不同,所以就变成了两行数据,我们想要的是一个blog里面有一个label的集合。
二.嵌套查询
1.首先有三个表 blog、label、blogandlabel
2.blogmapper的写法:
<select id="findBlogAll" parameterType="Long" resultMap="BlogAllResult">
select b.*,la.id as laid,la.name
from blog b left join blogandlabel blo on b.id=blo.blog_id
left join label la on blo.label_id=la.id
where b.user_id=#{user_id}
</select>
<resultMap id="BlogAllResult" type="Blog">
<id property="id" column="id"></id>
<result property="header" column="header"></result>
<result property="content" column="content"></result>
<result property="user_id" column="user_id"></result>
<result property="createtime" column="createtime"></result>
<collection property="labelList" ofType="Label">
<id property="id" column="laid"></id>
<result property="name" column="name"></result>
</collection>
</resultMap>
4.然后通过分页插件查询数据就可以了。
三.关联查询
1.blogmapper
<select id="findBlogAll" parameterType="Long" resultMap="BlogAllResult">
select * from blog where user_id=#{user_id}
</select>
<resultMap id="BlogAllResult" type="Blog">
<id property="id" column="id"></id>
<result property="header" column="header"></result>
<result property="content" column="content"></result>
<result property="user_id" column="user_id"></result>
<result property="createtime" column="createtime"></result>
<collection property="labelList" ofType="Label" column="id"
select="com.wcy.mapper.LabelMapper.findLabel">
</collection>
</resultMap>
2.labelmapper
<select id="findLabel" parameterType="Long" resultType="Label">
select * from label where id in(
select label_id from blogandlabel where blog_id=#{id}
)
</select>
3.serviceimpl
public JSONObject findBlogAll(Long use_id,Integer pageIndex,Integer pageSize) {
JSONObject jsonObject = new JSONObject();
//利用PageHelper分页查询 注意:这个一定要放查询语句的前一行,否则无法进行分页,因为它对紧随其后第一个sql语句有效
PageHelper.startPage(pageIndex, pageSize);
//User user=(User)session.getAttribute("user");
List<Blog> blogList = blogMapper.findBlogAll(use_id);
PageInfo<Blog> pageInfo = new PageInfo<Blog>(blogList);
jsonObject.put("type","success");
jsonObject.put("bloglist",blogList);
jsonObject.put("count",pageInfo.getTotal());
System.out.println("第一个"+blogList);
System.out.println("第二个"+pageInfo);
return jsonObject;
}