dubbo---springboot框架

1.common(公共大厅,maven项目),相当于三层架构中的dao层(放实体类,dao,dao的映射文件,还有service的接口,service接口也可以放在提供者项目里)
2.provider(提供者,springboot项目),相当于三层架构中的service层(放service实现类,也可以放service接口)
3.consumer(消费者,springboot项目,创建需要选择web中的springWeb),相当于三层架构中的controller层(放controller控制器)

运行项目需要先启动zookeeper,在启动tomcat

1.common(公共大厅,maven项目)
在这里插入图片描述
1.pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
<!--    自动生成的,但是提供者和消费者要复制的东西-->
    <groupId>cn.kgc</groupId>
    <artifactId>phone</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.8</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

</project>

2.pojo实体类(实现序列化,还有注解)

package cn.kgc.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Informations implements Serializable {
    private Long id;

    private String title;

    private String content;

    private Integer replyCount;

    private Integer viewCount;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date reportTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date lastPostTime;


}

2.provider(提供者,springboot项目)
在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.kgc</groupId>
    <artifactId>phone</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>phone</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--        common项目的组名,项目名,复制需要修改-->
        <dependency>
            <groupId>cn.kgc</groupId>
            <artifactId>phone</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
        </dependency>
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.7.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.application.yml文件

server:
  port: 8081
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/phone?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  dubbo:
    application:
      name: spring-boot-starter-dubbo-demo-provider
    registry:
      address: zookeeper://127.0.0.1:2181
    protocol:
      name: dubbo
      port: 20880
    scan: cn.kgc.serviceImpl
  # provider提供者项目中 service实现类--包路径
  # common项目中xxxmapper.xml映射文件的位置
  # common项目中(大厅)实体类--包路径
mybatis:
  #  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath:mappering/**.xml
  type-aliases-package: cn.kgc.pojo




3.PhoneApplication(启动类)
注:一定要加注解@MapperScan(“cn.kgc.mapper”),扫描common项目中的mapper包下的接口文件

package cn.kgc;

        import org.mybatis.spring.annotation.MapperScan;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("cn.kgc.mapper")
public class PhoneApplication {

    public static void main(String[] args) {
        SpringApplication.run(PhoneApplication.class, args);
    }
}

4.serviceImpl(实现类)
注:注解
@Component(“InformationsService”)
@Service(interfaceClass = InformationsService.class )(导入的是阿里巴巴的包)
public class InformationsServiceImpl implements InformationsService {
@Resource
private InformationsMapper informationsMapper;
}

package cn.kgc.serviceImpl;

import cn.kgc.mapper.InformationsMapper;
import cn.kgc.pojo.Informations;
import cn.kgc.service.InformationsService;
import cn.kgc.service.RepliesService;
import cn.kgc.until.Page;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component("InformationsService")
@Service(interfaceClass = InformationsService.class )
public class InformationsServiceImpl implements InformationsService {
    @Resource
    private InformationsMapper informationsMapper;


    @Override
    public Map findFen(int pageNo) {
        int pagesize = Page.PAGESIZE;

        List<Informations> fenList = informationsMapper.findFen((pageNo - 1) * pagesize, pagesize);
        int count = informationsMapper.findCount();

        int countPage=count%3==0 ? count/3 : (count/3)+1;    //三目运算
        Map<String,Object> phoneMap =new HashMap<>();
        phoneMap.put("fenList",fenList);
        phoneMap.put("count",count);
        phoneMap.put("pageNo",pageNo);
        phoneMap.put("countPage",countPage);
        
        return phoneMap;
    }

    @Override
    public int findCount() {
        return informationsMapper.findCount();
    }

    @Override
    //根据主键查询
    public Informations selectByPrimaryKey(Long aLong) {
        return informationsMapper.selectByPrimaryKey(aLong);
    }

    @Override
    //根据主键查询  集合
    public List<Informations> selectByPrimaryKey2(Long aLong) {
        return informationsMapper.selectByPrimaryKey2(aLong);
    }

    @Override
    //增加
    public int insertSelective(Informations informations) {
        return informationsMapper.insertSelective(informations);
    }

    @Override
    //修改 查看次数
    public int update(Long aLong,int viewCount) {
        return informationsMapper.update(aLong,viewCount);
    }

    @Override
    //修改 回复次数
    public int updateReplyCount(Long aLong,int replyCount) {
        return informationsMapper.updateReplyCount(aLong,replyCount);
    }

}

3.consumer(消费者,springboot项目,创建需要选择web中的springWeb)
在这里插入图片描述
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.kgc</groupId>
    <artifactId>phone</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>phone</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

 <!--        common项目的组名,项目名,复制需要修改-->
        <dependency>
            <groupId>cn.kgc</groupId>
            <artifactId>phone</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.57</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>



        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>



        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
        </dependency>

        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml(yml文件)

server:
  port: 8082
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/phone?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  #  thymeleaf 视图的配置
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    mode: html5
    servlet:
      content-type: text/html
  dubbo:
    application:
      name: spring-boot-starter-dubbo-demo-consumer
    registry:
      address: zookeeper://127.0.0.1:2181
    protocol:
      name: dubbo
      port: 20880
    scan: cn.kgc.controller
  #    controller所在的包路径
  mvc:
    static-path-pattern: /static/**

#
#  注意点:service的接口,注解:@Reference(import com.alibaba.dubbo.config.annotation.Reference;
#  )




1.controller类
@Controller
public class InformationsController {
@Reference //注意这边的注解和提供者的不一样
private InformationsService informationsService;
}

package cn.kgc.controller;

import cn.kgc.pojo.Informations;
import cn.kgc.service.InformationsService;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.Map;

@Controller
public class InformationsController {
    @Reference
    private InformationsService informationsService;

    //分页显示
    @RequestMapping("/login")
    public String login(){
        return "login";
    }
    @GetMapping("/doLogin")
    @ResponseBody
    public String findFen(int pageNo){
        System.out.println("控制层pageNo====="+pageNo);
        Map fen = informationsService.findFen(pageNo);
        System.out.println("分页====="+fen);
        return JSON.toJSONStringWithDateFormat(fen, "yyyy-MM-dd");
    }
}

2.前台页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>登录显示</title>
    <style>
        *{
            margin: 0;
        }
        body{
            width: 960px;
            margin: 0 auto;
        }
        h1{
            font-family: 新宋体;
            text-align: center;
            margin-top: 2em;
        }
        #sousuo{
            text-align: center;
            margin: 0 auto;
            margin-top: 2em;
        }
        table{
            font-family: 新宋体;
            border-collapse: collapse;
            width: 100%;
            margin-top: 1em;
        }
        table, td, th{
            border: 2px solid #A5A5A5;
        }
        th{height: 2em;}
        td{
            text-align: center;
            height: 1.5em;
        }
        a{
            margin: 0 5px;
        }

        table tr:nth-of-type(even){
            background: #dfdfdf;
        }
        #pageSpan{
            text-align: right;
            margin-top: 1em;
        }
    </style>
</head>
<body>
<h1>手机资讯</h1>
<table>
    <tr>
        <th>序号</th>
        <th>标题</th>
        <th>回复/查看</th>
        <th>创建时间</th>
        <th>最新回复</th>
    </tr>
</table>

<!--上一页,下一页-->
<div id="pageSpan"></div>
<input type="hidden" value="1" name="pageNo" id="pageNo">
<script type="text/javascript" src="/static/js/jquery-3.4.1.js" th:src="@{/static/js/jquery-3.4.1.js}"></script>
<script type="text/javascript">
    $(function () {
        var countPage2;
        function showinit() {
            var pageNo = $("#pageNo").val();
            $.getJSON("/doLogin","pageNo="+pageNo,success);
            function success(data) {
                countPage2= data.countPage;
                // 遍历  信息
                $("tr:gt(0)").remove();
                for(var i=0;i<data.fenList.length;i++){
                    var $str=$("<tr id='delTr"+data.fenList[i].id+"'></tr>");
                    $("table").append($str)
                    $str.append("<td>"+data.fenList[i].id+"</td>")
                        .append("<td><a href='/addReplies?id="+data.fenList[i].id+"'>"+data.fenList[i].title+"</a></td>")
                        .append("<td>"+data.fenList[i].replyCount+"/"+data.fenList[i].viewCount+"</td>")
                        .append("<td>"+data.fenList[i].reportTime+"</td>")
                        .append("<td>"+data.fenList[i].lastPostTime+"</td>")

                }
                //展现首页
                $("#pageSpan").html(" ");
                if(data.pageNo>1){
                    $("#pageSpan").append("<a href='#' id='firstPage'>首页</a><a href='#' id='prePage'>上一页</a>第<span>"+data.pageNo+"</span>页/第<span>"+data.countPage+"</span>页")
                }
                if(data.pageNo<data.countPage){
                    $("#pageSpan").append("<a href='#' id='nextPage'>下一页</a><a href='#' id='lastPage'>末页</a>第<span>"+data.pageNo+"</span>页/第<span>"+data.countPage+"</span>页")
                }

                // countPage2= data[3];
                // // 遍历  信息
                // $("tr:gt(0)").remove();
                // for (var i = 0;i < data[0].length;i++){
                //     var $str=$("<tr id='ddd"+data[0][i].id+"'></tr>");
                //     $( "table").append($str);
                //     $str.append("<td>"+data[0][i].id+"</td>")
                //         .append("<td><a href='/addReplies?id="+data[0][i].id+"'>"+data[0][i].title+"</a></td>")
                //         .append("<td>"+data[0][i].replyCount+"/"+data[0][i].viewCount+"</td>")
                //         .append("<td>"+data[0][i].reportTime+"</td>")
                //         .append("<td>"+data[0][i].lastPostTime+"</td>")
                // }
                // //显示  上一页  下一页
                // // 清空上一页、下一页等标签
                // $("#pageSpan").html(" ");
                // if(data[2]>1){
                //     $("#pageSpan").append("<a href='#' id='firstPage'>首页</a><a href='#' id='prePage'>上一页</a>")
                // }
                // if(data[2]<data[3]){
                //     $("#pageSpan").append("<a href='#' id='nextPage'>下一页</a><a href='#' id='lastPage'>末页</a>")
                // }


            }
        }//end of showinit
//点击换页(循环时候点击上一页,下一页)
        $(document).on("click","#firstPage,#prePage,#nextPage,#lastPage",function () {
            var clickId = $(this).attr("id");
            switch (clickId){
                case "firstPage":
                    $("#pageNo").val(1);
                    break;
                case "prePage":
                    var currPageNo = $("#pageNo").val();
                    var newPageNo = parseInt(currPageNo) - 1;
                    $("#pageNo").val(newPageNo);
                    break;
                case "nextPage":
                    var currPageNo = $("#pageNo").val();
                    var newPageNo = parseInt(currPageNo) + 1;
                    $("#pageNo").val(newPageNo);
                    break;
                case "lastPage":
                    $("#pageNo").val(countPage2);
            }
            showinit();
        })
        showinit();

    })//end of all
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值