淘淘商城-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/springapplicationContext-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

Namespacescontexttxaopp

<?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

Namespacecontextpaoptx

<?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不是必须的, 如果不配置contextConfigLocationspringmvc的配置文件默认在: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注册中心。ZookeeperApacahe 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

启动zookeeperbin/zkServer.sh start

关闭zookeeperbin/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);

EasyUIDataGridResult getItemList(int page,int rows);

}

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

NameSpacecontextpaoptxdubbo

<?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-interfacemanager-pojotaotao-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.pagehelperPageHelper类所在包名 -->

   <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>

<!-- com.github.pagehelperPageHelper类所在包名 -->

       <plugin interceptor="com.github.pagehelper.PageHelper">

           <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->

           <property name="dialect" value="mysql" />

       </plugin>

    <!-- 配置分页插件 -->

    <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;

       }

}

 测试结果:





















猜你喜欢

转载自blog.csdn.net/guolongpu/article/details/80014324
今日推荐