• 淘淘商城-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;

           }

    }

     测试结果:





















  • 相关阅读:
    Harbor私有镜像仓库(下)
    项目课---企业级Memcached服务应用实践(八)
    项目课---OpVEN架构实施方案(七)
    项目课---Mha-Atlas-MySQL高可用方案实践(六)
    Nginx 反向代理
    Ansible搭建LNMP
    Ansible
    Ansible运维自动化
    JAVA企业级应用服务器之TOMCAT实战
    ssh自动分发密匙脚本样板
  • 原文地址:https://www.cnblogs.com/ncepu/p/13695002.html
Copyright © 2020-2023  润新知