测试整合结果
需求
根据商品id查询商品信息。
Sql语句
select * from tb_item where id=536563
Dao层
本来是写mapper接口和映射文件,但是对于单表查询,我们可以使用你想工程生成的mapper文件。
可以使用逆向工程生成的mapper文件。
Service层
接收商品id调用dao查询商品信息。返回商品pojo对象。
Dao层代码不需要写,我们写service。先新建一个service接口,就叫ItemService
Controller层
接收页面请求商品id,调用service查询商品信息。我们就不写页面了,直接返回一个json数据可以吗?可以。(返回jason需要什么?)需要使用@ResponseBody注解。
此时启动taotao-manager工程,在浏览器输入http://localhost:8080/
就会得到首页
但是我们要是在浏览器输入输入http://localhost:8080/item/536563(由于在web.xml中配置了/,那么就会拦截所有请求,然后交给springmvc来处理,这里面有扫描了包com.taotao.controller,就会有这些带有service注解的方法,会执行相应的方法)
但是这里报错了。
这是为什么呢?
Invalid bound statement (not found): com.taotao.mapper.TbItemMapper.selectByExample
我们明明有mapper映射文件,逆向工程生成的,为什么报错。我们在E:\workspace-itcast\JavaEE16\taotao-manager\taotao-manager-mapper\target\classes\com\taotao\mapper中看到只有mapper文件,但是没有mapper的映射文件。默认是不拷过去的,我们需要拷过去。
修改taotao-manager-mapper的pom文件
在pom文件中添加如下内容:
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
这次测试:OK
使用maven的tomcat插件时debug
先不细讲…
现在我们工程已经搭建好了,也进行测试了。那就要实现我们的功能啦,不忘初心哦,目的是商品列表的实现。
商品列表的实现
打开后台管理工程的首页
我们这里就把上面的index.jsp删掉了,因为已经没有用了。是测试用的。我们真正访问的是jsp下面的这些,就要真正展示jsp了。这里有一个index.jsp,这是真正的首页。我们要访问这个首页,但是它是在WEB-INF下面的,我们不能直接访问。要先写一个Controller做一下跳转。
分析:先写一个controller进行页面跳转展示首页。(这个很简单,也没有什么参数,就叫pageController吧)
输入网址:
首页是使用easyUI开发。
我们点击查询商品会出现商品列表
首页是使用easyUI开发。
点击index.jsp中的查询商品后,被Controller拦截(先被web.xml拦截),执行该方法,从而执行item-list这个jsp(会添加上前缀和后缀,在springmvc.xml中配置了),即执行item-list.jsp。
商品列表查询
需求分析
1.请求的url:/item/list
2、请求的参数:http://localhost:8080/item/list?page=1&rows=30 分页信息。(需要看官方的手册)
3、返回值。Json数据。数据格式:
Easyui中datagrid控件要求的数据格式为:(也是通过官方文档得知,必须有个tatal和rows)
{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}
那么接下来就是实现dao层、service层了。
Dao层
Sql语句:SELECT * FROM tb_item LIMIT 0,30
我们这里用了分页查询,但是mybits逆向生成的mapper不能实现分页查询,那该怎么办呢?
我们可以改生成的代码,但是何必呢?麻烦的一笔。
分页插件
官方网站
https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper
实现原理
其实就是在执行用mybatis框架执行sql语句之前,在语句上加了limit 0,10
就不具体说了
使用方法
第一步:引入pageHelper的jar包。(com.taotao.manager.mapper的pom文件中引入)
第二步:需要在SqlMapConfig.xml中配置插件。(因为这就是Mybatis的插件,这个文件限制终于不是空的了)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
第三步:在查询的sql语句执行之前,添加一行代码:
PageHelper.startPage(1, 10);
- 第一个参数是page,要显示第几页。
- 第二个参数是rows,没页显示的记录数。
第四步:取查询结果的总数量。
创建一个PageInfo类的对象,从对象中取分页信息。
分页测试
我们写一个测试方法吧,TestPageHelper
注意:分页插件对逆向工程生成的代码支持不好,不能对有查询条件的查询分页。会抛异常。
使用我修改过的版本就可以了。
我们这个项目里面使用的分页插件时老师修改过的插件。
下面:
Dao可以实现逆向工程生成的mapper文件+PageHelper实现。
Service层
接收分页参数,一个是page一个是rows。调用dao查询商品列表。并分页。返回商品列表。
返回一个EasyUIDateGrid支持的数据格式。需要创建一个Pojo。此pojo应该放到taotao-common工程中。(为什么要放到common里面,因为其他工程也可能要使用到这个)
这是pojo,EasyUIDateGrid支持的数据格式的封装类。
代码实现:
下面就是截图留念啦: