• 电商后台项目 + 源码


    项目总体样式如下:

     重点功能:模糊条件分页查询功能:

     

     一、前期准备

    PageBean实体类:

    1. package com.itheima.pojo;
    2. import java.util.List;
    3. /**
    4. * PageBean: 分页查询功能用来封装数据传递给前端的
    5. */
    6. public class PageBean<T> { // 这里自定义一个泛型
    7. // 总商品数
    8. private int totalCount;
    9. // 当前页数据 ( 把当前页查询出来的数据以List集合的形式封装到属性当中传递给前端 )
    10. private List<T> rows;
    11. /**
    12. * 这里用自定义的泛型T : 因为以后开发项目的时候 我们有可能有Brand实体类,也有可能有User实体类等。
    13. * 我们自定义好泛型之后,以后谁new 这个PageBean类 这个泛型里面就是谁
    14. */
    15. // getter and setter
    16. public int getTotalCount() {
    17. return totalCount;
    18. }
    19. public void setTotalCount(int totalCount) {
    20. this.totalCount = totalCount;
    21. }
    22. public List<T> getRows() {
    23. return rows;
    24. }
    25. public void setRows(List<T> rows) {
    26. this.rows = rows;
    27. }
    28. }

    二、代码如下

    2.1、mapper层 (BrandMapper)

    1. package com.itheima.mapper;
    2. import com.itheima.pojo.Brand;
    3. import org.apache.ibatis.annotations.*;
    4. import java.util.List;
    5. public interface BrandMapper {
    6. /**
    7. * 1、查询所有商品功能
    8. *
    9. */
    10. @Select("select * from tb_brand")
    11. @ResultMap("brandResultMap")
    12. List<Brand> selectAll();
    13. /**
    14. * 2、添加商品功能
    15. */
    16. @Insert("insert into tb_brand values (null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
    17. void add(Brand brand);
    18. /**
    19. * 3、批量删除功能
    20. *
    21. * 批量删除:因为我们不知道客户端会传过来几个删除id,因此这里我们要用动态sql 并且不能用注解的形式了
    22. */
    23. void deleteByIds(int[] ids);
    24. /**
    25. * 4、 查询当前页的数据功能
    26. * 思路: 拿到客户端请求的 ”第几页页数“ 和 “每页展示数据数”,我们拿到之后,再把这页的数据全部查询出来展示给客户端
    27. */
    28. @Select("select * from tb_brand limit #{begin},#{size}")
    29. @ResultMap("brandResultMap")
    30. List<Brand> selectByPage(@Param("begin") int begin, @Param("size") int size);
    31. /**
    32. * 5、查询数据库商品总数功能
    33. * 把数据库商品的总个数查询出来响应给前端
    34. */
    35. @Select("select count(*) from tb_brand")
    36. int selectTotalCount();
    37. /**
    38. * 6、分页模糊条件查询功能
    39. *
    40. * 接收前端请求的“页码数”和“每页展示数据数”和“模糊查询的数据请求”(在前端页面看:客户端模糊查询请求的数据只有三个:当前状态、企业名称、品牌名称)
    41. *
    42. * (因为模糊条件查询:比如说客户端就请求了一个企业名称:“阿里巴巴”,但是我们数据库当中会有什么不同的关于“阿里巴巴”的数据,
    43. * 因为是模糊查询所以会查出来很多的数据,前端呢因为怕查询出来的数据太多了所以想分页,所以我们后端接收到前端请求的 “当前页码”,
    44. * “每页展示数据个数” 和“模糊查询的数据” 进行模糊分页查询就可以了
    45. * 就是按一页几条数据来进行查询响应给前端即可了 )
    46. *
    47. *
    48. * begin: 当前页码
    49. * size: 每页展示数据个数
    50. * brand对象: 模糊查询的前端数据请求
    51. *
    52. * 注意:@Param("") 里面的数据对应的是SQL语句的参数占位符 也就是SQL语句中 #{} 内的数据
    53. *
    54. * @return
    55. */
    56. List<Brand> selectByPageAndCondition(@Param("begin") int begin, @Param("size") int size, @Param("brand") Brand brand);
    57. /**
    58. * 7、查询模糊查询出来的总商品数量功能
    59. * 因为这里面就一个brand对象 所以对象的属性名就相对应着SQL语句的 #{"参数占位数"}
    60. */
    61. int selectTotalCountByCondition(Brand brand);
    62. }

    BrandMapper.xml:

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.itheima.mapper.BrandMapper">
    6. <resultMap id="brandResultMap" type="brand">
    7. <result property="brandName" column="brand_name" />
    8. <result property="companyName" column="company_name" />
    9. </resultMap>
    10. <delete id="deleteByIds">
    11. delete from tb_brand where id in
    12. <foreach collection="ids" item="id" separator="," open="(" close=")">
    13. #{id}
    14. </foreach>
    15. </delete>
    16. <!-- where brand_name = #{brand.brandName}-->
    17. <select id="selectByPageAndCondition" resultMap="brandResultMap">
    18. select *
    19. from tb_brand
    20. <where>
    21. <if test="brand.brandName != null and brand.brandName != '' ">
    22. and brand_name like #{brand.brandName}
    23. </if>
    24. <if test="brand.companyName != null and brand.companyName != '' ">
    25. and company_name like #{brand.companyName}
    26. </if>
    27. <if test="brand.status != null">
    28. and status = #{brand.status}
    29. </if>
    30. </where>
    31. limit #{begin} , #{size}
    32. </select>
    33. <select id="selectTotalCountByCondition" resultType="java.lang.Integer">
    34. select count(*)
    35. from tb_brand
    36. <where>
    37. <if test="brandName != null and brandName != '' ">
    38. and brand_name like #{brandName}
    39. </if>
    40. <if test="companyName != null and companyName != '' ">
    41. and company_name like #{companyName}
    42. </if>
    43. <if test="status != null">
    44. and status = #{status}
    45. </if>
    46. </where>
    47. </select>
    48. </mapper>

     

    2.2、service业务逻辑层

    BrandService接口:(基本上和代理接口代码是一样的)

    1. package com.itheima.service;
    2. import com.itheima.pojo.Brand;
    3. import com.itheima.pojo.PageBean;
    4. import org.apache.ibatis.annotations.Param;
    5. import org.apache.ibatis.annotations.ResultMap;
    6. import org.apache.ibatis.annotations.Select;
    7. import java.util.List;
    8. public interface BrandService {
    9. /**
    10. * 1、查询所有商品
    11. *
    12. * @return
    13. */
    14. List<Brand> selectAll();
    15. /**
    16. * 2、添加商品
    17. *
    18. * @param brand
    19. */
    20. void add(Brand brand);
    21. /**
    22. * 3、批量删除
    23. */
    24. void deleteByIds(int[] ids);
    25. /**
    26. * 4、查询当前页数据功能 & 查询数据库商品的总个数
    27. *
    28. * @param begin : 当前页数
    29. * @param size : 每一页的展示数据个数
    30. * @return
    31. */
    32. PageBean<Brand> selectByPage(int begin, int size);
    33. /**
    34. * 6、分页模糊条件查询功能 & 模糊查询出总商品数功能
    35. * @return
    36. */
    37. PageBean<Brand> selectByPageAndCondition( int begin, int size, Brand brand);
    38. }

    BrandServiceImpl:(实现BrandService接口)【该BrandServiceImpl实现了BrandService接口中的所有方法,因为BrandService接口中写的代码逻辑基本上和mapper层的代理接口一样,所以我们在BrandServiceImpl类中做业务逻辑同样相当于以前单独的一个BrandService类中的形式是一样的。】

    细节1:使用BrandServiceImpl类实现BrandService接口做业务逻辑作用:降低了service层和web层的耦合度

    细节2:所有的逻辑基本上就在业务逻辑层做处理,比如模糊查询需要用到%%,把查询的数据封装到对象属性中等、

    1. package com.itheima.service.impl;
    2. import com.itheima.mapper.BrandMapper;
    3. import com.itheima.pojo.Brand;
    4. import com.itheima.pojo.PageBean;
    5. import com.itheima.service.BrandService;
    6. import com.itheima.util.SqlSessionFactoryUtils;
    7. import org.apache.ibatis.session.SqlSession;
    8. import org.apache.ibatis.session.SqlSessionFactory;
    9. import java.util.List;
    10. /**
    11. * 用这个类实现接口(BrandService)的最终目的:
    12. * 降低service业务逻辑层和web层的servlet之间的耦合度
    13. *
    14. * 原因: 以前的BrandService类(业务逻辑层)里面是用的方法,把增删改查等全部写成了方法返回到servlet层的
    15. * 现在是把这些增删改查的方法单独写到了实现BrandService接口的这个类当中了,降低了耦合度
    16. */
    17. public class BrandServiceImpl implements BrandService {
    18. // 1. 创建工厂对象
    19. SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
    20. /**
    21. * 1、查询所有商品
    22. *
    23. * @return
    24. */
    25. @Override
    26. public List<Brand> selectAll() {
    27. // 2. 获取Session
    28. SqlSession sqlSession = factory.openSession();
    29. // 3. 映射出BrandMapper接口
    30. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    31. // 4. 调用BrandMapper接口中的查询所有的方法
    32. List<Brand> brands = brandMapper.selectAll();
    33. // 释放资源
    34. sqlSession.close();
    35. return brands;
    36. }
    37. /**
    38. * 2、添加商品
    39. *
    40. * @param brand
    41. */
    42. @Override
    43. public void add(Brand brand) {
    44. // 2. 获取Session
    45. SqlSession sqlSession = factory.openSession();
    46. // 3. 映射出BrandMapper接口
    47. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    48. // 4. 调用BrandMapper接口中的查询所有的方法
    49. brandMapper.add(brand);
    50. // 5. 提交事务
    51. sqlSession.commit();
    52. // 6. 释放资源
    53. sqlSession.close();
    54. }
    55. /**
    56. * 3、批量删除
    57. */
    58. @Override
    59. public void deleteByIds(int[] ids) {
    60. // 2. 获取Session
    61. SqlSession sqlSession = factory.openSession();
    62. // 3. 映射出BrandMapper接口
    63. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    64. // 4. 调用BrandMapper接口中的批量删除的方法
    65. brandMapper.deleteByIds(ids);
    66. // 5. 提交事务
    67. sqlSession.commit();
    68. // 6. 释放资源
    69. sqlSession.close();
    70. }
    71. /**
    72. * 4、查询当前页数据功能 & 查询数据库商品的总个数
    73. *
    74. * 思路: 把查询出来的当前页数据和数据库商品的总个数 封装到PageBean对象的属性当中,然后把PageBean对象返回给前端
    75. *
    76. * @param begin : 当前页数
    77. * @param size : 每一页的展示数据个数
    78. */
    79. @Override
    80. public PageBean<Brand> selectByPage(int begin,int size) {
    81. // 4.2. 获取Session
    82. SqlSession sqlSession = factory.openSession();
    83. // 4.3. 映射出BrandMapper接口
    84. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    85. /**
    86. * 重点: 在这里进行一下SQL语句分页查询的计算
    87. * 如: select * from emp limit 0,8; # 计算公式:起始索引(页数)从0开始 起始索引 =(当前查询的页数-1)*每页展示数据数
    88. * 我们拿到的客户端请求的页数是第begin页,那么我们的SQL查询起始索引就是(begin-1)* size
    89. */
    90. // 4.4、计算起始索引
    91. int begin1 =(begin-1)*size;
    92. // 4.5、计算每页展示的数据个数
    93. int size1 =size;
    94. /**
    95. * 4.6、调用BrandMapper接口的查询当前页数据的功能
    96. */
    97. List<Brand> brands =brandMapper.selectByPage(begin1,size1);
    98. /**
    99. * 4.7、调用BrandMapper接口的查询数据库商品总数的功能
    100. */
    101. int totalCount =brandMapper.selectTotalCount();
    102. /**
    103. * 4.8、
    104. * 把 6、7 查询出来的数据封装到PageBean对象的属性当中 返回给前端
    105. */
    106. PageBean<Brand> pageBean =new PageBean<>();
    107. // 把数据封装到PageBean对象属性当中
    108. pageBean.setRows(brands);
    109. pageBean.setTotalCount(totalCount);
    110. /**
    111. * 4.9、把pageBean对象返回给前端(属性中已经封装好查询出来的数据咯)
    112. */
    113. sqlSession.close();
    114. return pageBean;
    115. }
    116. /**
    117. * 5、 分页模糊条件查询功能 & 模糊查询出总商品数功能
    118. * @param begin :当前页数
    119. * @param size : 每页中展示的数据数
    120. * @param brand : 模糊条件查询的数据
    121. * @return
    122. */
    123. @Override
    124. public PageBean<Brand> selectByPageAndCondition(int begin, int size, Brand brand) {
    125. // 5.2. 获取Session
    126. SqlSession sqlSession = factory.openSession();
    127. // 5.3. 映射出BrandMapper接口
    128. BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
    129. /**
    130. * 5.4、 调用BrandMapper接口中的 "分页模糊条件查询功能" ( 把模糊查询的结果按分页的形式查询出来,等会响应给前端 )
    131. *
    132. * 注意:这里传参之前要把brand对象当中各属性加上 ”%属性名%“ (因为brand对象属性当中封装了前端模糊查询的请求数据,
    133. * 又因为模糊查询SQL语句是: like %数据% 所以要处理属性)
    134. *
    135. * // !!!! 1、这里要进行一下判断 不判断的话 如果有为null的 那下面模糊处理 就成了 %null% 就会使SQL语句错误了
    136. * // !!!! 2、还要进行分页查询的计算
    137. */
    138. // 处理模糊表达式
    139. String brandName =brand.getBrandName();
    140. if (brandName!=null && brandName.length() >0){ // 这里要进行一下判断 不判断的话 如果有为null的 那下面模糊处理 就成了 %null% 就会使SQL语句错误了
    141. brand.setBrandName("%" +brandName+ "%"); // 再把客户端请求的数据做一下模糊表达式处理(如:"%华为%")),然后再封装到属性当中 传给代理接口进行SQL语句查询
    142. System.out.println(brand.getBrandName());
    143. }
    144. String companyName =brand.getCompanyName();
    145. if (companyName!=null && companyName.length() >0){ // 不为null 说明前端请求的有值
    146. brand.setCompanyName("%" +companyName+ "%"); // 再把客户端请求的数据做一下模糊表达式处理(如:"%华为%")),然后再封装到属性当中 传给代理接口进行SQL语句查询
    147. }
    148. // 分页计算
    149. int begin1 =(begin-1)*size;
    150. int size1 =size;
    151. List<Brand> brands =brandMapper.selectByPageAndCondition(begin1,size1,brand); // 这里再传的对象属性就是进行过模糊处理的属性数据
    152. /**
    153. * 5.5、 调用BrandMapper接口中的查询 "模糊查询出来的总商品数量" 功能方法 ( 把模糊查询查询出来的总商品数量查询出来,等会响应给前端 )
    154. */
    155. int counts =brandMapper.selectTotalCountByCondition(brand);
    156. /**
    157. * 5.6、 把 5.4、5.5 查询出来的结果 封装到PageBean对象属性当中,传递响应给前端
    158. */
    159. PageBean<Brand> pageBean =new PageBean<>();
    160. // 封装数据到属性当中
    161. pageBean.setTotalCount(counts);
    162. pageBean.setRows(brands);
    163. // 释放资源,返回PageBean对象
    164. sqlSession.close();
    165. return pageBean;
    166. }
    167. }

    2.3、web层 

    (使用优化后的servlet。 作用:减少了servlet的个数,以前我们做增删改查的时候就要写增删改查的servlet,需要写4个,太繁琐 ,优化后把每个servlet写成对象方法了 直接调用即可)

    可以说因为BsaeServlet继承了HttpServlet,又BrandServlet继承了BsaeServlet,BrandServlet头上又写了访问的路径,所以可以说BrandServlet继承了HttpServlet并自带访问路径地址,可以说和以前的doGet、doPost使用方法又一样了

    BsaeServlet:

    这个类继承了HttpServlet,能继承service()方法 【可以理解为该方法是doPost,doGet他爹】

    1. package com.itheima.web.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.lang.reflect.InvocationTargetException;
    8. import java.lang.reflect.Method;
    9. public class BaseServlet extends HttpServlet {
    10. @Override
    11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. // 1. 获取请求路径
    13. String url =req.getRequestURI();
    14. // 获取最后一段路径(方法名)
    15. int index =url.lastIndexOf("/"); // 从路径后面数 第一次出现“/”的位置
    16. String methodName =url.substring(index+1); // 获取到从“/”开始截取的后面的路径 (这里我们不要/ 所以+1)
    17. // System.out.println(methodName);
    18. // 2. 执行BrandServlet对象中的selectAll方法
    19. // 2.1 获取BrandServlet 字节码对象 Class (映射)
    20. Class<? extends BaseServlet> cls =this.getClass();
    21. /**
    22. * 注意:这个 this代表的是谁?
    23. * 因为BrandServlet继承了该BaseServlet,所以可以说BrandServlet类当中也有BaseServlet类当中的
    24. * service()方法,当客户端请求路径 @WebServlet("/brand/*") 格式的时候,会进入到BaseServlet资源
    25. * 路径下,会自动调用该service()方法,所以谁调用该方法,this就代表哪个对象
    26. * 因为实际上是BrandServlet类中调用的service()方法 所以this代表BrandServlet对象
    27. */
    28. // 2.2 获取方法 Method对象(映射)
    29. try {
    30. Method method =cls.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
    31. // 2.3 调用该方法 (映射)
    32. method.invoke(this,req,resp); // 把客户端的请求数据传到service方法参数中
    33. } catch (NoSuchMethodException e) {
    34. e.printStackTrace();
    35. } catch (InvocationTargetException e) {
    36. e.printStackTrace();
    37. } catch (IllegalAccessException e) {
    38. e.printStackTrace();
    39. }
    40. }
    41. }

    BrandServlet: (继承了BsaeServlet类):

    1. package com.itheima.web.servlet;
    2. import com.alibaba.fastjson.JSON;
    3. import com.alibaba.fastjson.JSONObject;
    4. import com.itheima.pojo.Brand;
    5. import com.itheima.pojo.PageBean;
    6. import com.itheima.service.BrandService;
    7. import com.itheima.service.impl.BrandServiceImpl;
    8. import javax.servlet.ServletException;
    9. import javax.servlet.annotation.WebServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import java.io.BufferedReader;
    13. import java.io.IOException;
    14. import java.util.List;
    15. /**
    16. * BrandServlet 继承父类BaseServlet
    17. * 父类中继承了HttpServlet 所以还是相当于BrandServlet继承了HttpServlet
    18. *
    19. * 父类BaseServlet中有service方法 (该方法当客户端访问相对应路径时自动调用该方法中)
    20. * 子类继承了父类 也就是说:这个BrandServlet中实际上也有个service方法 当访问该 @WebServlet("/brand/*")路径时
    21. * 其实调用的是BrandServlet类当中的service()方法
    22. *
    23. */
    24. @WebServlet("/brand/*")
    25. public class BrandServlet extends BaseServlet{
    26. // 获取业务逻辑层对象
    27. private BrandService brandService =new BrandServiceImpl();
    28. /**
    29. * 1、 查询所有商品功能
    30. */
    31. public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    32. // 1. 调用BrandServiceImpl完成查询所有功能
    33. List<Brand> brands =brandService.selectAll();
    34. // 2. 将Java对象数据转换成JSON格式数据,响应给前端
    35. response.setContentType("text/json;charset=utf-8"); // 中文乱码问题
    36. String toString = JSON.toJSONString(brands);
    37. // 3. 响应给前端数据
    38. response.getWriter().write(toString);
    39. }
    40. /**
    41. * 2、 添加商品功能
    42. */
    43. public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    44. // 1. 通过抓包拿到前端请求过来的数据(演示的是前端的数据为JSON格式)
    45. BufferedReader bufferedReader =request.getReader();
    46. String rl =bufferedReader.readLine(); // 拿到前端请求的JSON数据
    47. // 2. 将JSON数据转换成Java数据 (也就是说将JSON数据转换成Brand对象类型,将数据封装到对象属性中了)
    48. Brand brand =JSON.parseObject(rl,Brand.class);
    49. // 3. 调用BrandService接口中的添加商品方法
    50. brandService.add(brand);
    51. // 4. 响应给前端success的标识信号
    52. response.getWriter().write("success");
    53. }
    54. /**
    55. * 3、批量删除商品功能
    56. * 思路:把客户端请求的删除id 封装到int数组里面 然后传递给代理接口 供SQL语句使用 (SQL语句要用增强for 遍历该数组删除数据即可)
    57. */
    58. public void deleteByIds(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    59. // 1、抓包 ( 前端是以JSON数据格式请求数据的,所以需要先抓包 )
    60. BufferedReader bufferedReader =request.getReader();
    61. String params =bufferedReader.readLine();
    62. // System.out.println(params); // 拿到前端请求的JSON数据格式: [1,2,3,4,5]
    63. // 2、把JSON数据转换成Java的数组格式
    64. int[] ids =JSON.parseObject(params,int[].class);
    65. // 3、调用业务逻辑层的批量删除方法 (将数组传到sql语句当中去)
    66. brandService.deleteByIds(ids);
    67. // 4、删除完成后,响应给前端成功的标识
    68. response.getWriter().write("success");
    69. }
    70. /**
    71. * 4、查询当前页码数据功能 & 查询数据库商品的总个数
    72. */
    73. public void selectByPage(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    74. // 1、接收前端请求过来的 ”当前页码数“ 和 “每页展示的数据个数”
    75. // 假设:前端的访问类型:url?currentPage=1&pageSize=5 (表示:第一页,每一页有五条数据)
    76. // 因为前端不是以JSON格式数据请求的,所以用request域当中的方法就可以获取前端的请求(和doPost doGet方法一样)
    77. String _currentPage =request.getParameter("currentPage");
    78. String _pageSize =request.getParameter("pageSize");
    79. // 2、把String字符串类型转换成int类型
    80. int currentPage =Integer.parseInt(_currentPage);
    81. int pageSize =Integer.parseInt(_pageSize);
    82. // 3、调用查询方法 (把 ”当前页码“ 和 “每页展示的数据个数” 传递过去)
    83. PageBean<Brand> o =brandService.selectByPage(currentPage,pageSize);
    84. // 4. 将Java对象数据转换成JSON格式数据,响应给前端
    85. response.setContentType("text/json;charset=utf-8"); // 中文乱码问题
    86. String toString = JSON.toJSONString(o);
    87. // 5. 响应给前端数据
    88. response.getWriter().write(toString);
    89. }
    90. /**
    91. * 4、分页模糊条件查询功能 & 模糊查询出总商品数功能
    92. */
    93. public void selectByPageAndCondition(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    94. // 解决POST乱码问题
    95. request.setCharacterEncoding("UTF-8");
    96. // 1、接收前端请求过来的 ”当前页码数“ 和 “每页展示的数据个数” 和”模糊条件查询请求的数据参数“ (模糊条件查询请求的数据参数:前端是以JSON数据请求过来的)
    97. String _currentPage =request.getParameter("currentPage");
    98. String _pageSize =request.getParameter("pageSize");
    99. // 2、把String字符串类型转换成int类型
    100. int currentPage =Integer.parseInt(_currentPage);
    101. int pageSize =Integer.parseInt(_pageSize);
    102. // 3、获取前端模糊条件查询的请求参数
    103. // 3.1、先抓包
    104. BufferedReader bufferedReader =request.getReader();
    105. // 3.2、读一行
    106. String params =bufferedReader.readLine(); // 拿到前端模糊查询请求参数的JSON数据格式
    107. // 3.3、将JSON数据 转换成 Java对象形式
    108. Brand brand =JSON.parseObject(params,Brand.class); // brand对象属性中封装好了前端模糊请求的数据
    109. // 4、 调用 分页模糊条件查询功能
    110. PageBean<Brand> o =brandService.selectByPageAndCondition(currentPage,pageSize,brand);
    111. String jsonString = JSON.toJSONString(o);
    112. // 5、 将查询出来的Java对象数据转换成JSON格式数据,响应给前端
    113. response.setContentType("text/json;charset=utf-8"); // 中文乱码问题
    114. // 6、 响应给前端数据
    115. response.getWriter().write(jsonString);
    116. }
    117. }

    其他代码找我要即可~

  • 相关阅读:
    有什么自定义表单工具功能较好?
    Linux shell编程学习笔记27:tputs
    03.爬楼梯 04.使用最小花费爬楼梯
    为什么选择clickhouse?
    抠图专题1:抠出白色陶瓷杯(每天一个PS小项目)
    渐进式JavaScript框架---Vue.js
    超长表单分页校验,下一页和上一页功能
    数字化工厂建设方案探讨
    shell语法(一)
    【故障公告】龙卷风来袭:突增的并发请求,撑不住的CPU
  • 原文地址:https://blog.csdn.net/lwj_07/article/details/125632828