一、产品模块
1、产品列表
主要是分页——在此使用Mybatis
的PageHelper
分页插件
POM添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
Spring
修改 Mybatis
配置部分
<!-- Mybatis -->
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:Mapper/*.xml" />
<!--自动在下划线驼峰命名方式间转换 -->
<property name="configuration" >
<bean class="org.apache.ibatis.session.Configuration" >
<property name="mapUnderscoreToCamelCase" value="true" />
<property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
<!--"org.apache.ibatis.logging.log4j.Log4jImpl" --> <!-- 日志 -->
</bean>
</property>
<property name="plugins" >
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties"><!--参数配置详见其github,下面这些注释掉StartPage也能正常工作 -->
<value>
offsetAsPageNum=true <!-- 将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页-->
rowBoundsWithCount=true <!-- 使用 RowBounds 分页会进行 count 查询,需要使用PageInfo也得设置为true -->
reasonable=true <!-- ageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页 -->
</value>
</property>
</bean>
</array>
</property>
</bean>
<mybatis:scan base-package="com.bookstore.Dao" />
ProductController.java
package com.bookstore.Controller;
import com.bookstore.Domain.Product;
import com.bookstore.Service.ProductService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Controller
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping("/productlist")
public String productList(@RequestParam(required = false) String catagory, @RequestParam(value="page", required = false, defaultValue = "1") Integer curPage, Model model) {
Integer pageSize = 5;
List<Product> productList = productService.findProductsOnPage(curPage, pageSize, catagory); //实际类型分页插件修改后的Page<E>,它扩展了ArrayList
model.addAttribute("pageInfo", new PageInfo(productList));
model.addAttribute("productList", productList);
return "product_list";
}
}
ProductService.java
package com.bookstore.Controller;
import com.bookstore.Domain.Product;
import com.bookstore.Service.ProductService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
@Service
public class ProductService {
@Autowired
private ProductMapper productDao;
public List<Product> findProductsOnPage(Integer curPage, Integer pageSize, String catagory) {
ProductExample productExample = new ProductExample();
ProductExample.Criteria criteria = productExample.createCriteria();
if(catagory == null || "".equals(catagory)){
criteria.andCategoryIsNotNull();
}else{
criteria.andCategoryEqualTo(catagory);
}
PageHelper.startPage(curPage, pageSize