淘淘商城-day02[框架整合,后台系统搭建]
学习目录
1. Ssm框架整合
1.1. 数据库,表导入
数据库使用mysql数据库,要求5.5以上版本。
环境:Vmware12/Centos7/MySQL5.6 115.25.201.30 OS》root/root mysql》root/root
1、在mysql数据库中>创建数据库taotao
2、将创建数据库的脚本导入到taotao中,导入后有11个表。
1.2. Mybatis逆向工程
使用mybatis官方提供的mybatis-generator生成三种文件:pojo、mapper接口件、映射文件。
pojo文件 》 toatao-manager-pojo 》 /src/main/java 》类com.taobao.pojo
mapper接口文件、映射文件》 taotao-manager-dao 》 /src/main/java 》类com.taobao.dao
注意点:重新逆向工程时,需要删除之前逆向生成的文件,否则只是自动追加。
导入 import… >Exitstring projects into workspace >Copy to 工作空间。
b.1. 修改generatorConfig.xml > MySQL信息,IP,用户名,密码。
b.2. 运行main()程序,刷新项目。
b.3. 拷贝,生成文件》 相应的文件夹中。
https://github.com/mybatis/mybatis-3 mybatis-3.4.6.zip https://github.com/mybatis/generator mybatis-generator-core-1.3.6.zip 最新版本,2018年4月份。 对黑马程序营,老师提供的逆向生成器分析。 新建java project,然后进行操作 ① 新建lib文件夹,加入JAR包。 build path>configure build path…>libraries项>add jars..>选择该项目下lib中jar包>导入。 log4j log4j-1.2.16.jar mybatis mybatis-3.2.3.jar mybatis-generator-core mybatis-generator-core-1.3.2.jar MySQL驱动 mysql-connector-java-5.1.28-bin.jar Oracel驱动 ojdbc14.jar ② 配置文件,拷贝即可。 generatorConfig.xml log4j.properties ③ Main程序,拷贝即可。 GeneratorSqlmap.java main() ④ 另外四个org.mybatis.generator.plugins包,comment,field,page,rename直接拷贝即可。 |
整合思路
1、Dao层:
taotao-manager-service/src/main/resources/mybatis 》SqlMapConfig.xml taotao-manager-service/src/main/resources/properties》 db.properties taotao-manager-service/src/main/resources/spring》applicationContext-dao.xml |
SqlMapConfig.xml也命名mybatis-config.xml
mybatis整合spring,通过spring管理SqlSessionFactory、mapper代理对象。
properties文件编辑,安装插件Find:propertires 》Properties Editor
2、Service层:
所有的service实现类都放到spring容器中管理。由spring创建数据库连接池,并有spring管理实务
taotao-manager-service/src/main/resources/spring 》applicationContext-service.xml taotao-manager-service/src/main/resources/spring 》applicationContext-trans.xml taotao-manager-service/src/main/webapp/WEB-INF》 web.xml |
spring容器,属spring框架,父容器。
3、Views层:
taotao-manager-web/src/main/resources/spring 》springmvc.xml taotao-manager-web/src/main/webapp/WEB-INF 》 web.xml |
springmvc框架,由springmvc的DispatcherServlet管理controller。
springmvc容器,属spring框架,子容器
Dao整合
1. 创建SqlMapConfig.xml配置文件
manager-service>resources > 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>
</configuration> |
2. Spring整合mybatis
创建manager-service > resources >spring
New>other>spring>spring Bean Configuration File> applicationContext-dao.xml
Namespaces:context,tx,aop,p
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" http://www.springframework.org/schema/beans/spring-beans-4.2.xsd> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:properties/db.properties" /> <!-- 数据库连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driver}" /> <property name="maxActive" value="10" /> <property name="minIdle" value="5" /> </bean> <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.taotao.mapper" /> </bean> </beans> |
db.properties manager-service> resources > properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8 jdbc.username=root jdbc.password=root |
备注:
Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。
Service整合
1. 管理Service
applicationContext-service.xml manager-service > resources > spring
Namespace:context,p,aop,tx
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<context:component-scan base-package="com.taotao.service" /> </beans> |
2. 事务管理
applicationContext-trans.xml manager-service > resources > spring
NameSpace : context , p , aop , tx<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> </bean>
<!-- 通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 传播行为 --> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="create*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice>
<!-- 切面 --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.taotao.service.*.*(..))" /> <!-- 上面第1个* 任意返回值;第2个* 所有类名;第3 * 所有方法名;(..)任意参数 --> </aop:config> </beans> |
3. Web.xml
manager-service> web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>taotao-manager</display-name> <!-- 加载spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> |
3. 表现层整合
1. Springmvc.xml
这里补充一点。spring子父容器关系
只有前端时,只配置dispathcherServlet,没有配置ContextLoaderLister也是可以的。
访问规则:子容器可以访问父容器的对象,父容器不可以访问子容器的对象。
manager-web> resources >spring>springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.taotao.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans> |
2. web.xml
manager-web> src>main>WEB-INF>web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>taotao-manager-web</display-name> <welcome-file-list> <welcome-file>login.html</welcome-file> </welcome-file-list> <!-- 解决post乱码 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<!-- springmvc的前端控制器 --> <servlet> <servlet-name>taotao-manager</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>taotao-manager</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
系统间通信
如何实现远程通信?
1、Webservice:效率不高基于soap协议。项目中不推荐使用。
2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。当然选用,Dubbo.
什么是dubbo
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
Dubbo就是资源调度和治理中心的管理工具。
Dubbo的架构
这个Dubbo是可以理解成是中间件。
项目中使用这个中间件,它就是服务层的Bean搞到Zookeeper服务器里,在表现层它可以把Bean从Zookeeper中搞出来。
二部分,项目中引用Dubbo,centos服务器安装zookeeper.
使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
Zookeeper的安装:Vmware 》 Centos中
第一步:安装jdk, 第二步:解压缩zookeeper压缩包 http://zookeeper.apache.org/ 3.4.10 http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz/home/ cd /home/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz tar -xvf zookeeper-3.4.10.tar.gz -C /usr/local/ ln -s /usr/local/ zookeeper-3.4.10 / /usr/local/zookeeper 第三步:将conf文件夹下zoo_sample.cfg复制一份,改名为zoo.cfg mv zoo_sample.cfg zoo.cfg mkdir /data/zookeeper vim zoo.cfg dataDir=/data/zookeeper 第四步:修改配置dataDir属性,指定一个真实目录 第五步:./zkServer.sh start or sh zkServer.sh start 启动zookeeper:bin/zkServer.sh start 关闭zookeeper:bin/zkServer.sh stop 查看zookeeper状态:bin/zkServer.sh status 注意要关闭linux的防火墙。 clientPort=2181 firewall-cmd --permanent --zone=public --add-port=2181/tcp firewall-cmd --reload |
上面服务器搞好zookeeper了。接下来是。
整合测试
1. 需求
根据商品id查询商品信息,并将商品信息使用json数据返回。
2. 分析
请求的url:/item/{itemId}
参数:商品id,从请求的url中获得
返回值:TbItem对象,逆向工程生成的pojo(响应json数据)
3. Dao层
根据商品id查询商品信息,单表查询可以使用逆向工程生成的代码。
4. Service层
taotao-manager-interface》 com.taotao.service.ItemService接口类
publicinterface ItemService { TbItem getItemById(longitemId);
} |
taotao-manager-Service》 com.taotao.service.impl.ItemSeviceImpl实现类
需要导interface的包,因为是对taotao-manager-interface类的具体实现。
@Service publicclass ItemServiceImpl implements ItemService {
@Autowired private TbItemMapper itemMapper;
@Override public TbItem getItemById(longitemId) { TbItem tbItem = itemMapper.selectByPrimaryKey(itemId); returntbItem; } } |
5. 发布服务
taotao-manager-Service中添加dubbo依赖的jar包,注意排除[spring,netty]的依赖。
<!-- dubbo相关 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> |
spring的配置文件中添加dubbo的约束,然后使用dubbo:service发布服务。
taotao-manager-service > applicationContext-service.xml
NameSpace:context,p,aop,tx,dubbo,
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<context:component-scan base-package="com.taotao.service" />
<!-- 使用dubbo发布服务 --> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="taotao-manager" /> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout=300000 /> <--itemServiceImpl是没有定义的,manager-servcie有应该类,会自动创建,首字母小写--> </beans> |
6. 引用服务
taotao-manager-web 》添加dubbo依赖的jar包,需排除[spring,netty]的依赖。
同时,manager-interface、manager-pojo、taotao-common也需要导入。
<!-- dubbo相关 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> |
manager-web > springmvc.xml配置文件中》添加服务的引用
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.taotao.controller" /> <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
<!-- 引用dubbo服务 --> <dubbo:application name="taotao-manager-web"/> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
</beans> |
Controller manager-web > com.taotao.controller
@Controller publicclass ItemController {
@Autowired private ItemService itemService;
@RequestMapping("/item/{itemId}") @ResponseBody public TbItem getItemById(@PathVariable Long itemId) { //根据商品id查询商品信息 TbItem tbItem = itemService.getItemById(itemId); returntbItem; } } |
测试:http://127.0.0.1:8091/item/151133427725347
7. 解决mapper映射文件不发布问题
在taotao-manager-dao工程的pom文件中添加如下内容:默认是src/main/resources,修改后resources不会生成在目标文件了
<!-- 如果不添加此节点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> |
pojo都要进行序列化,即都implements Serializable,因为要在网上传输,接收方要反序列。
项目启动顺序:先启动manager ,再web。
上在调试通了,但是你想过,zookeeper服务器里到底放了什么吗?那就装Dubbo监控器。可以看到。。。
Dubbo监控中心
需要安装tomcat,然后部署监控中心即可。 http://dubbo.io/
1、部署监控中心:
#cp dubbo-admin-2.5.4.war apache-tomcat-7.0.47/webapps/dubbo-admin.war
2、启动tomcat
3、访问http://192.168.25.167:8080/dubbo-admin/
http://115.25.201.30:8080/dubbo-admin-2.5.4/
该应用报错,JDK应该java7
用户名:root 密码:root
如果监控中心和注册中心在同一台服务器上,可以不需要任何配置。
如果不在同一台服务器,需要修改配置文件:
/webapps/dubbo-admin/WEB-INF/dubbo.properties
上面是查询,根据商品id,查找,单个商品。
下面是查询,商品列表。
展示后台首页
1. 功能分析
请求的url:/
参数:无
返回值:逻辑视图String
2. Controller
manager-web > com.taotao.controller
@Controller publicclass PageController {
@RequestMapping("/") public String showIndex() { return"index"; }
@RequestMapping("/{page}") public String showPage(@PathVariable String page) { returnpage; } } |
3. 整合静态页面
静态页面的位置:参考资料 \ 后台管理系统静态页面
使用方法:
把静态页面添加到taotao-manager-web工程中的WEB-INF下:
由于在web.xml中定义url拦截形式为“/”表示拦截所有的url请求,包括静态资源例如css、js等。
所以需要在springmvc.xml中添加资源映射标签:js/ css/ 斜杆要注意
js,css文件夹,放WEBAPP/WEB-INF目录 <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/> |
建议:js,css文件夹,放WEBAPP目录,jsp文件夹放/WEB-INF目录 <mvc:resources location="/js/" mapping="/js/**"/> <mvc:resources location="/css/" mapping="/css/**"/> //**表示含后面多级目录 |
1.1.1. 商品列表页面
对应的jsp为:item-list.jsp
请求的url:/item/list
请求的参数:page=1&rows=30
响应的json数据格式:Easyui中datagrid控件要求的数据格式为:
{total:”2”,rows:[{“id”:”1”,”name”:”张三”},{“id”:”2”,”name”:”李四”}]}
1.1.1. 响应的json数据格式EasyUIResult
manager-common > com.taotao.common.pojo 注意序列化,此类。
新版的PageHelp 》total变为long型了。
publicclass EasyUIDataGridResult {
private Integer total;
private List<?> rows;
public EasyUIResult(Integer total, List<?> rows) { this.total = total; this.rows = rows; }
public EasyUIResult(Long total, List<?> rows) { this.total = total.intValue(); this.rows = rows; }
public Integer getTotal() { returntotal; }
publicvoid setTotal(Integer total) { this.total = total; }
public List<?> getRows() { returnrows; }
publicvoid setRows(List<?> rows) { this.rows = rows; }
} |
1.1.2. 分页处理
逆向工程生成的代码是不支持分页处理的,如果想进行分页需要自己编写mapper,这样就失去逆向工程的意义了。为了提高开发效率可以使用mybatis的分页插件PageHelper。
1.1. 分页插件PageHelper
1.1.1. Mybatis分页插件 - PageHelper说明
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
官网:https://pagehelper.github.io/ 最新版本5.1.3
1.1.2. 使用方法
第一步:把PageHelper依赖的jar包添加到工程中。官方提供的代码对逆向工程支持的不好,使用参考资料中的pagehelper-fix。采用最新版本,可以不用pagehelper-fix
第二步:在Mybatis配置xml中配置拦截器插件:
taobao-manager-service/src/main/resources/mybatis/SqlMapConfig.xml
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugininterceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<propertyname="dialect"value="mysql"/>
</plugin>
</plugins>
第二步:在代码中使用
1、设置分页信息:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);
2、取分页信息
//分页后,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
Page<Country>listCountry = (Page<Country>)list;
listCountry.getTotal();
3、取分页信息的第二种方法
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page =new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
1.1.3. 分页测试
taotao-manager-service/src/test/java/com/taotao/pagehelper/TestPageHelper.java
Run As……Junit Test 》 POM文件需要引入Juint JAR包
@Test publicvoid testPageHelper() throws Exception { //初始化spring容器 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml"); //获得Mapper的代理对象 TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper.class); //设置分页信息 PageHelper.startPage(1, 30); //执行查询 TbItemExample example = new TbItemExample(); List<TbItem> list = itemMapper.selectByExample(example); //取分页信息 PageInfo<TbItem> pageInfo = new PageInfo<>(list); System.out.println(pageInfo.getTotal()); System.out.println(pageInfo.getPages()); System.out.println(pageInfo.getPageNum()); System.out.println(pageInfo.getPageSize()); } |
5.3节的pagerhelp内容都可作废,测试代码可用。
可以用最新版本,PageHelpe 5.0.1,但mybatis配置的xml文件需要修改,如下。
<configuration>
<!-- 配置分页插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!--分页参数合理化 --> <property name="reasonable" value="true" /> </plugin> </plugins> </configuration> |
Service层
参数:int page ,int rows
业务逻辑:查询所有商品列表,要进行分页处理。
返回值:EasyUIDataGridResult
manger-interface >com.taotao.service > ItemService.java
EasyUIDataGridResult getItemList(intpage, introws); |
manager-service > com.taotao.service.impl> ItemServiceImpl.java
@Override public EasyUIDataGridResult getItemList(intpage, introws) {
//设置分页信息 PageHelper.startPage(page, rows); //执行查询 TbItemExample example = new TbItemExample(); List<TbItem> list = itemMapper.selectByExample(example); //取分页信息 PageInfo<TbItem> pageInfo = new PageInfo<>(list);
//创建返回结果对象 EasyUIDataGridResult result = new EasyUIDataGridResult(); result.setTotal(pageInfo.getTotal()); result.setRows(list);
returnresult; } |
1. 发布服务
<!-- 发布dubbo服务 --> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="taotao-manager" /> <!-- 注册中心的地址 --> <dubbo:registry address="115.25.201.30:2181" protocol="zookeeper" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service ref="itemServiceImpl" interface="com.taotao.service.ItemService" timeout="300000"/>
|
2. 表现层
引用服务:
<!-- 引用dubbo服务 --> <dubbo:application name="taotao-manager-web" /> <dubbo:registry protocol="zookeeper" address="115.25.201.30:2181" /> <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
|
1、初始化表格请求的url:/item/list
2、Datagrid默认请求参数:
1、page:当前的页码,从1开始。
2、rows:每页显示的记录数。
3、响应的数据:json数据。EasyUIDataGridResult
@RequestMapping("/item/list") @ResponseBody public EasyUIDataGridResult getItemList(Integer page, Integer rows) { EasyUIDataGridResult result = itemService.getItemList(page, rows); returnresult; } |
|
Controller层》com.taobao.controller 》ItemController.java 添加
@RequestMapping("/item/list") @ResponseBody public EasyUIDataGridResult getItemList(Integer page, Integer rows) { EasyUIDataGridResult result = itemService.getItemList(page, rows); returnresult; } |
|
Controller层》com.taobao.controller 》 PageController.java
package com.taobao.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;
@Controller public class PageController {
@RequestMapping("/") public String showIndex() { return "index"; }
@RequestMapping("/{page}") public String showPage(@PathVariable String page) { return page; }
} |
测试结果: