电商模块开发-第四天

 1. 实现点击一级目录情况下,展现二级目录。并提供简易的搜索商品的功能。

 2. 一二级目录结构如下所示:

 

  • 实现的功能简述:点击①的时候,右边仅显示所有的手机(对讲机、、均不显示),并且在②的下拉单中显示所有的二级目录,选中其中一个,可以查询到该类商品(点击苹果,商品仅显示苹果手机),且支持模糊查询。
  • 由一级目录来获取二级目录
//dao层
@Repository("articleTypeDao") public interface ArticleTypeDao { @Select("select * from ec_article_type where length(code)=4") public List<ArticleType> selectFirstLevel(); //由一级目录获取二级目录 @Select("select * from ec_article_type where code like #{firstLevel} and length(code)=#{n}") public List<ArticleType> selectSecondLevel(@Param("firstLevel") String firstLevel, @Param("n") int n); }
//业务层接口及其实现
public interface ArticleTypeService {
    public List<ArticleType> getFirstLevel();
//由一级目录来获取二级目录
    public List<ArticleType> getSecondLevel(String firstLevel);
}

@Service("articleTypeService")
public class ArticleTypeServiceImp implements ArticleTypeService {
    @Resource
    private ArticleTypeDao articleTypeDao;

    @Override
    public List<ArticleType> getFirstLevel() {
        return articleTypeDao.selectFirstLevel();
    }
//由一级目录来获取二级目录 @Override
public List<ArticleType> getSecondLevel(String firstLevel) { return articleTypeDao.selectSecondLevel(firstLevel+"%",firstLevel.length()+4); //二级目录的前四位和一级目录是相同的。 } }
  • 由一级目录来获取属于一级目录的商品
//dao层及其实现。后两个参数表示:后续的功能中,点击一级目录后,选中二级目录中一项,展示其商品,栗如:选中一级目录中手机,二级目录中苹果,商品列表此时仅展示苹果手机。在当前情况下,搜索框搜索iPhone4, 商品列表仅展示iPhone4.
public
List<Article> selectArticleByFirst(@Param("firstLevel") String firstLevel,@Param("secondLevel") String secondLevel,@Param("title") String title);
//使用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">
<mapper namespace="per.lc.sms.dao.ArticleDao">
<select id="selectAllArticle" resultType="Article">
select
* from ec_article
</select>
<select id="selectArticleByFirst" resultType="Article">
select * from ec_article
<where>
<if test="firstLevel !=null&amp;&amp;firstLevel !='' ">
and TYPE_CODE like CONCAT("",#{firstLevel},"%")
</if>
<if test="secondLevel !=null&amp;&amp;secondLevel!=''">
and TYPE_CODE=#{secondLevel}
</if>
<if test="title!=null&amp;&amp;title!=''">
and title like CONCAT("%",#{title},"%")
//模糊查询的实现:“%”表示通配符,重要一段文字中有两个百分号中间的部分就可以被搜索出来。
</if>
//关键字 CONCAT()实现字符串的拼接
</where>
</select>
</mapper>
//业务层接口及其实现类
public interface ArticleService {
    public List<Article> getAllArticle();
    public List<Article> getArticleByFirst(String firstLevel,String secondLevel,String title);
}
@Service(
"articleService") public class ArticleServiceImp implements ArticleService { @Resource private ArticleDao articleDao; @Override public List<Article> getAllArticle() { return articleDao.selectAllArticle(); } @Override public List<Article> getArticleByFirst(String firstLevel,String secondLevel,String title) { //方法名是刚开始起的,后来功能增多,也就没改。 return articleDao.selectArticleByFirst(firstLevel,secondLevel,title); } }
//servlet处理请求
@WebServlet("/list") public class ListServlet extends HttpServlet { private HttpServletRequest request; private HttpServletResponse response; private ArticleService service1; private ArticleTypeService typeService; @Override public void init() throws ServletException { super.init(); ServletContext servletContext=this.getServletContext(); WebApplicationContext context= WebApplicationContextUtils.getWebApplicationContext(servletContext); service1=(ArticleService) context.getBean("articleService"); typeService=(ArticleTypeService)context.getBean("articleTypeService"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.request=req; this.response=resp; request.setCharacterEncoding("UTF-8"); String method=request.getParameter("method"); switch (method){ case "getAll": getAll(); break; } } private void getAll() throws ServletException, IOException { String firstLevel=request.getParameter("typeCode"); //获取二级目录的值 String secondLevel=request.getParameter("secondType"); String title=request.getParameter("title"); request.setAttribute("secondType",secondLevel); request.setAttribute("title",title); if (!StringUtils.isEmpty(firstLevel)){ request.setAttribute("typeCode",firstLevel); //二级目录 List<ArticleType> articleTypes=typeService.getSecondLevel(firstLevel); request.setAttribute("secondTypes",articleTypes); } //一级目录 List<ArticleType> articleTypes=typeService.getFirstLevel(); request.setAttribute("articleTypes",articleTypes);     //获取商品信息,根据不同的查询条件。第一次查询,所有参数为空,检索所有的商品。都在dao层的映射文件中配置。动态sql. List<Article> articles=service1.getArticleByFirst(firstLevel,secondLevel,title); request.setAttribute("articleList",articles); request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request,response); } }

3.Mybatis异常:There is no getter for property named 'XXX' in 'class java.lang.String'

解决办法:

public List<ArticleType> selectSecondLevel(@Param("firstLevel") String firstLevel, @Param("n") int n);

在Dao层的方法中,对于字符串类型的参数使用@Param()来起别名。

猜你喜欢

转载自www.cnblogs.com/liu-chen/p/11717128.html