SSM+JSP实现销售记录展示,带分页功能、模糊查询及最新数据优先

本文提供SSM+JSP框架下实现销售记录展示的代码示例,包含分页功能、模糊查询功能,以及将最新数据展示在第一条的优化。示例代码涵盖数据库表设计、实体类、Mapper接口、Service接口与实现类、Controller以及JSP页面,并详细解释了实现过程。

1. 创建数据库表sale_record,包含字段id、product、customer、area、store、date等。

2. 创建SaleRecord实体类,对应数据库表字段。

public class SaleRecord {
    private Integer id;
    private String product;
    private String customer;
    private String area;
    private String store;
    private Date date;
    // getters and setters
}

3. 创建SaleRecordMapper接口,定义查询方法。

public interface SaleRecordMapper {
    List<SaleRecord> selectAll();
    List<SaleRecord> selectByKeyword(String keyword);
    List<SaleRecord> selectByPage(@Param("start") int start, @Param("pageSize") int pageSize);
    int count();
}

4. 创建SaleRecordMapper.xml,实现查询方法。

<mapper namespace="com.example.mapper.SaleRecordMapper">
    <select id="selectAll" resultType="com.example.entity.SaleRecord">
        SELECT * FROM sale_record ORDER BY date DESC
    </select>
    
    <select id="selectByKeyword" resultType="com.example.entity.SaleRecord">
        SELECT * FROM sale_record WHERE product LIKE #{keyword} OR customer LIKE #{keyword} OR area LIKE #{keyword} OR store LIKE #{keyword} OR date LIKE #{keyword}
    </select>
    
    <select id="selectByPage" resultType="com.example.entity.SaleRecord">
        SELECT * FROM sale_record ORDER BY date DESC LIMIT #{start}, #{pageSize}
    </select>
    
    <select id="count" resultType="int">
        SELECT COUNT(*) FROM sale_record
    </select>
</mapper>

5. 创建SaleRecordService接口和实现类,调用Mapper进行数据库操作。

public interface SaleRecordService {
    List<SaleRecord> getAll();
    List<SaleRecord> getByKeyword(String keyword);
    List<SaleRecord> getByPage(int pageNum, int pageSize);
    int getTotalCount();
}

@Service
public class SaleRecordServiceImpl implements SaleRecordService {
    @Autowired
    private SaleRecordMapper saleRecordMapper;
    
    @Override
    public List<SaleRecord> getAll() {
        return saleRecordMapper.selectAll();
    }
    
    @Override
    public List<SaleRecord> getByKeyword(String keyword) {
        return saleRecordMapper.selectByKeyword(keyword);
    }
    
    @Override
    public List<SaleRecord> getByPage(int pageNum, int pageSize) {
        int start = (pageNum - 1) * pageSize;
        return saleRecordMapper.selectByPage(start, pageSize);
    }
    
    @Override
    public int getTotalCount() {
        return saleRecordMapper.count();
    }
}

6. 创建SaleRecordController,处理前端请求。

@Controller
public class SaleRecordController {
    @Autowired
    private SaleRecordService saleRecordService;
    
    @RequestMapping("/saleRecords")
    public String saleRecords(Model model, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize, @RequestParam(value = "keyword", required = false) String keyword) {
        List<SaleRecord> saleRecords;
        int totalCount;
        
        if (keyword == null) {
            saleRecords = saleRecordService.getByPage(pageNum, pageSize);
            totalCount = saleRecordService.getTotalCount();
        } else {
            saleRecords = saleRecordService.getByKeyword(keyword);
            totalCount = saleRecords.size();
        }
        
        model.addAttribute("saleRecords", saleRecords);
        model.addAttribute("totalCount", totalCount);
        model.addAttribute("pageNum", pageNum);
        model.addAttribute("pageSize", pageSize);
        
        return "saleRecords";
    }
}

7. 创建JSP页面saleRecords.jsp,展示销售记录。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Sale Records</title>
</head>
<body>
    <h1>Sale Records</h1>
    
    <form action="saleRecords" method="get">
        <input type="text" name="keyword" placeholder="Keyword">
        <input type="submit" value="Search">
    </form>
    
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Product</th>
            <th>Customer</th>
            <th>Area</th>
            <th>Store</th>
            <th>Date</th>
        </tr>
        <c:forEach items="${saleRecords}" var="saleRecord">
            <tr>
                <td>${saleRecord.id}</td>
                <td>${saleRecord.product}</td>
                <td>${saleRecord.customer}</td>
                <td>${saleRecord.area}</td>
                <td>${saleRecord.store}</td>
                <td>${saleRecord.date}</td>
            </tr>
        </c:forEach>
    </table>
    
    <div>
        <c:choose>
            <c:when test="${totalCount <= pageSize}">
                <c:set var="totalPage" value="1" />
            </c:when>
            <c:otherwise>
                <c:set var="totalPage" value="${totalCount / pageSize + 1}" />
            </c:otherwise>
        </c:choose>
        
        <c:if test="${pageNum > 1}">
            <a href="saleRecords?pageNum=${pageNum - 1}&pageSize=${pageSize}&keyword=${keyword}">Previous</a>
        </c:if>
        
        <c:forEach begin="1" end="${totalPage}" step="1" varStatus="loop">
            <c:choose>
                <c:when test="${loop.index == pageNum}">
                    <b>${loop.index}</b>
                </c:when>
                <c:otherwise>
                    <a href="saleRecords?pageNum=${loop.index}&pageSize=${pageSize}&keyword=${keyword}">${loop.index}</a>
                </c:otherwise>
            </c:choose>
        </c:forEach>
        
        <c:if test="${pageNum < totalPage}">
            <a href="saleRecords?pageNum=${pageNum + 1}&pageSize=${pageSize}&keyword=${keyword}">Next</a>
        </c:if>
    </div>
</body>
</html>

以上代码示例实现了销售记录的展示、分页和模糊查询功能,并通过ORDER BY date DESC将最新数据展示在第一条。在SaleRecordController中,根据关键字判断是进行查询还是分页查询;在JSP页面中,通过循环展示销售记录的表格,并根据当前页和总页数生成分页链接。

优化建议:

  • 可以使用更加专业的分页组件,例如MyBatis的PageHelper或Spring Data JPA的PagingAndSortingRepository,简化分页功能的实现。
  • 可以将模糊查询的逻辑封装到Service层,提高代码可维护性和可复用性。
  • 可以使用缓存机制,例如Ehcache或Redis,提高数据读取效率。
  • 可以使用日志框架,例如Log4j或SLF4j,记录系统运行状态和异常信息,方便排查问题。

注意:

  • 实际应用中,请根据具体需求进行调整和完善。
  • 以上示例代码仅供参考,建议在实际项目中进行更深入的研究和学习。
SSM+JSP实现销售记录展示,带分页功能、模糊查询及最新数据优先

原文地址: https://www.cveoy.top/t/topic/hNLj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录