dubbo+zookeeper+springboot+mybatis使用

在dubbo中服务间的调用方式分为三种

1.点对点调用
2.通过注册中心调用
3.通过广播的方式

在这里详尽讲解第二种方式。
在此之前需要下载好zookeeper,
这个自己网上找吧。

可以根据目录来查看。

一、建两个maven项目

provider、consumer两个项目。

provider->pom.xml

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

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>provider</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.31.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
    </dependencies>
</project>

consumer->pom.xml

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

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>consumer</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.31.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
    </dependencies>

</project>

二、建包和启动类

在这里插入图片描述

ProviderApplication.java

package com.fafa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author: FA
 * @Date: 2020/9/7 10:56
 * @Email: 214177702@qq.com
 * @Description:  启动类
 */
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

三、创建dao、service、serviceimpl、controller、mapper这些业务类

我是用idea的easycode插件进行一键生成。对我自己一个项目的一个表做例子,如下是一个房间表。
1.先建好数据库,我是 hotelbook
2.生成表,导入下面sql

room.sql

/*
Navicat MySQL Data Transfer

Source Server         : 本地mysql8.0.17
Source Server Version : 80017
Source Host           : localhost:3306
Source Database       : hotelbook

Target Server Type    : MYSQL
Target Server Version : 80017
File Encoding         : 65001

Date: 2020-09-07 11:15:25
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `room`
-- ----------------------------
DROP TABLE IF EXISTS `room`;
CREATE TABLE `room` (
  `roomId` int(10) NOT NULL,
  `roomType` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `roomPrice` int(20) DEFAULT NULL,
  `roomStock` int(20) DEFAULT NULL,
  `image` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`roomId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of room
-- ----------------------------
INSERT INTO `room` VALUES ('1', '标准单人房', '100', '45', 'single1.jpg', '面积:38m^2<br>床型:大床<br>网络:包含无限、宽带<br>客房设施:空调,电视');
INSERT INTO `room` VALUES ('2', '标椎双人房', '250', '30', 'double1.jpg', '面积:72m^2<br>床型:大床<br>网络:包含无限、宽带<br>客房设施:空调,电视');
INSERT INTO `room` VALUES ('3', '情侣套房', '500', '15', 'couple.jpg', '面积:84m^2<br>床型:大床<br>网络:包含无限、宽带<br>客房设施:空调,电视');
INSERT INTO `room` VALUES ('4', '豪华单人间', '500', '20', 'ebcb869747b64967a1d0abd6b63bb8da.jpeg', '面积:50m^2<br>床型:大床<br>网络:包含无限、宽带<br>客房设施:空调,电视');
INSERT INTO `room` VALUES ('5', '高级双床间', '485', '10', 'c79a29d8355a42a38eba11b10180dcea.jpeg', '客房面积:30m^2<br>景观:城境<br>床型:2张双人床<br>娱乐设施:电话,免费WIFI,有线电视');
INSERT INTO `room` VALUES ('6', '小型双床套房', '780', '10', '04757cf7759446a198a953fb242b6f1f.jpeg', '客房面积:49m^2<br>景观:城境<br>床型:2张双人床<br>娱乐设施:电话,免费WIFI,有线电视');
INSERT INTO `room` VALUES ('7', '套房', '2000', '2', 'd32af97859c54ae0b23930b759120a05.jpeg', '客房面积:80m^2<br>床型:2个床<br>娱乐设施:电话,免费WIFI,有线电视');
INSERT INTO `room` VALUES ('8', '白金行政套房', '2200', '2', '107048c847ce473da2f5597801b07ba5.jpeg', '客房面积:85m^2<br>床型:2个床<br>娱乐设施:电话,免费WIFI,有线电视');
INSERT INTO `room` VALUES ('9', 'VIP套房', '3000', '1', 'df14262dbb424a17a09669ef857431b3.jpeg', '客房面积:95m^2<br>床型:2个大床<br>娱乐设施:电话,免费WIFI,有线电视,配备泳池');
INSERT INTO `room` VALUES ('10', 'string', '0', '0', 'string', 'string');

,我用的idea 的easycode生成代码如下
在这里插入图片描述
结果如下:
在这里插入图片描述
注意:一定要在RoomDao上加上@Mapper注解

四、resource文件的增加

  • 增加logback-spring.xml
  • 增加application.yml
  • 添加dubbo文件夹
  • 在dubbo文件夹下创建dubbo-provider(consumer).xml
  • 在dubbo文件夹下创建application-dubbo-export.xml和application-dubbo-export.xml
    在这里插入图片描述

log4j.properties

log4j.rootLogger=info,error,CONSOLE,DEBUG
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender     
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout     
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n     
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info   
log4j.appender.info.append=true   
log4j.appender.info.File=d://logs/server_info.log
log4j.logger.error=error  
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error   
log4j.appender.error.append=true   
log4j.appender.error.File=d://logs/server_error.log
log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout     
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG   
log4j.appender.DEBUG.append=true   
log4j.appender.DEBUG.File=d://logs/server_debug.log

application.yml

server:
    port: 8001
spring:
    datasource:
      url: jdbc:mysql://localhost:3306/hotelbook?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
      username: root
      password: 123456
  #spring.datasource.driver-class-name=com.mysql.jdbc.Driver   mysql6以上用加cj,以下的不加cj
      driver-class-name: com.mysql.cj.jdbc.Driver
    jpa:
      database: mysql

  #Mybatis扫描路径
mybatis:
  mapper-locations: classpath*:mapper/*.xml
  #对应我们的实体类所在的包
  type-aliases-package: com.fafa.entity

#配置日志
logging:
  level:
    root: INFO
    org:
     springframework:
       web: DEBUG
     hibernate: ERROR
  # logging.path=D:\\demo1
  file: D:\\dubbo-study\\mydubbo-study\\logs\\server.log

dubbo-provider.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    					http://www.springframework.org/schema/beans/spring-beans.xsd
    					http://code.alibabatech.com/schema/dubbo
    					http://souche.oss-cn-hangzhou.aliyuncs.com/files/dubbo/dubbo.xsd">

    <!--过滤器配置-->

    <dubbo:application name="${dubbo.application}"  />
    <dubbo:registry address="${dubbo.registry}" backupProvider="${dubbo.provider.backup}"/>
    <dubbo:provider filter="providerTraceFilter"  export="${dubbo.export}" token="${dubbo.token}" />
    <dubbo:protocol name="dubbo" port="${dubbo.port}" host="${dubbo.host}" />
    <dubbo:monitor protocol="registry"/>
    <dubbo:consumer timeout="${dubbo.timeout}" filter="customerTraceFilter"/>

    <!--声明服务引用,与服务声明接口类型一致-->
    <import resource="application-dubbo-import.xml"></import>
    <import resource="application-dubbo-export.xml"></import>


</beans>


application-dubbo-export.xml

注意要在接口的实现类上加@service+名称即ref里面那个

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    					http://www.springframework.org/schema/beans/spring-beans.xsd
    					http://code.alibabatech.com/schema/dubbo
    					http://souche.oss-cn-hangzhou.aliyuncs.com/files/dubbo/dubbo.xsd">

    <!-- 声明需要暴露的服务接口 ,我们选一个例子来,需要在接口的实现类上加@service+名称即ref里面那个-->
    <dubbo:service interface="com.fafa.service.RoomService" ref="roomService" />


</beans>

application-dubbo-import.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:dubbp="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    					http://www.springframework.org/schema/beans/spring-beans.xsd
    					http://code.alibabatech.com/schema/dubbo
    					http://souche.oss-cn-hangzhou.aliyuncs.com/files/dubbo/dubbo.xsd">
    <!-- 声明需要引入的服务接口 ,这里是提供者,不需要引入 -->
<!--    <dubbo:reference id="roomService" interface="com.fafa.service.RoomService"/>-->

</beans>

五、启动类添加注解

启动类上加上这些注解

@EnableDubbo
@ImportResource({"classpath:dubbo/dubbo-provider.xml"})

六、启动

首先要启动zookeeper的zkServer.cmd,zkCli.cmd
在这里插入图片描述

七、开始编写consumer模块

因为是消费者,通过dubbo调用接口即可。下面是简单的调用实例。
前面已经创建并导入了依赖了。
所以先开始建包

需要最基础的三个包:

  • controller类,用于业务逻辑作业和接口调用
  • service类,和provider的接口类对应,不用写实现类,但是接口方法相同。
  • entity类,使用Dubbo进行数据传递时,需让作为消息传递的类序列化。
    在这里插入图片描述
    其余的和provider差不多,顶多改一改名称。

八、补充一下

有些人不会easeycode生成代码,那我就贴一贴provider的所有涉及到业务的代码吧,comsumer也是一样的少一点而已。

RoomController.java

package com.fafa.controller;

import com.fafa.entity.Room;
import com.fafa.service.RoomService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * (Room)表控制层
 *
 * @author makejava
 * @since 2020-09-07 11:17:37
 */
@RestController
@RequestMapping("room")
public class RoomController {
    /**
     * 服务对象
     */
    @Resource
    private RoomService roomService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public Room selectOne(Integer id) {
        return this.roomService.queryById(id);
    }

}

RoomDao.java

package com.fafa.dao;

import com.fafa.entity.Room;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (Room)表数据库访问层
 *
 * @author makejava
 * @since 2020-09-07 11:17:35
 */
@Mapper
public interface RoomDao {

    /**
     * 通过ID查询单条数据
     *
     * @param roomid 主键
     * @return 实例对象
     */
    Room queryById(Integer roomid);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Room> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param room 实例对象
     * @return 对象列表
     */
    List<Room> queryAll(Room room);

    /**
     * 新增数据
     *
     * @param room 实例对象
     * @return 影响行数
     */
    int insert(Room room);

    /**
     * 修改数据
     *
     * @param room 实例对象
     * @return 影响行数
     */
    int update(Room room);

    /**
     * 通过主键删除数据
     *
     * @param roomid 主键
     * @return 影响行数
     */
    int deleteById(Integer roomid);

}

Room.java

package com.fafa.entity;

import java.io.Serializable;

/**
 * (Room)实体类
 *
 * @author makejava
 * @since 2020-09-07 11:17:32
 */
public class Room implements Serializable {
    private static final long serialVersionUID = -87696582170350544L;

    private Integer roomid;

    private String roomtype;

    private Integer roomprice;

    private Integer roomstock;

    private String image;

    private String remark;


    public Integer getRoomid() {
        return roomid;
    }

    public void setRoomid(Integer roomid) {
        this.roomid = roomid;
    }

    public String getRoomtype() {
        return roomtype;
    }

    public void setRoomtype(String roomtype) {
        this.roomtype = roomtype;
    }

    public Integer getRoomprice() {
        return roomprice;
    }

    public void setRoomprice(Integer roomprice) {
        this.roomprice = roomprice;
    }

    public Integer getRoomstock() {
        return roomstock;
    }

    public void setRoomstock(Integer roomstock) {
        this.roomstock = roomstock;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}

RoomService.java

package com.fafa.service;

import com.fafa.entity.Room;

import java.util.List;

/**
 * (Room)表服务接口
 *
 * @author makejava
 * @since 2020-09-07 11:17:35
 */
public interface RoomService {

    /**
     * 通过ID查询单条数据
     *
     * @param roomid 主键
     * @return 实例对象
     */
    Room queryById(Integer roomid);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Room> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param room 实例对象
     * @return 实例对象
     */
    Room insert(Room room);

    /**
     * 修改数据
     *
     * @param room 实例对象
     * @return 实例对象
     */
    Room update(Room room);

    /**
     * 通过主键删除数据
     *
     * @param roomid 主键
     * @return 是否成功
     */
    boolean deleteById(Integer roomid);

}

RoomServiceImpl.java

package com.fafa.service.impl;

import com.fafa.dao.RoomDao;
import com.fafa.entity.Room;
import com.fafa.service.RoomService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Room)表服务实现类
 *
 * @author makejava
 * @since 2020-09-07 11:17:36
 */
@Service("roomService")
public class RoomServiceImpl implements RoomService {
    @Resource
    private RoomDao roomDao;

    /**
     * 通过ID查询单条数据
     *
     * @param roomid 主键
     * @return 实例对象
     */
    @Override
    public Room queryById(Integer roomid) {
    System.out.println("service.serviceImpl.queryById:提供者服务被调用了");
        return this.roomDao.queryById(roomid);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<Room> queryAllByLimit(int offset, int limit) {
        return this.roomDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param room 实例对象
     * @return 实例对象
     */
    @Override
    public Room insert(Room room) {
        this.roomDao.insert(room);
        return room;
    }

    /**
     * 修改数据
     *
     * @param room 实例对象
     * @return 实例对象
     */
    @Override
    public Room update(Room room) {
        this.roomDao.update(room);
        return this.queryById(room.getRoomid());
    }

    /**
     * 通过主键删除数据
     *
     * @param roomid 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer roomid) {
        return this.roomDao.deleteById(roomid) > 0;
    }
}

RoomDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fafa.dao.RoomDao">

    <resultMap type="com.fafa.entity.Room" id="RoomMap">
        <result property="roomid" column="roomId" jdbcType="INTEGER"/>
        <result property="roomtype" column="roomType" jdbcType="VARCHAR"/>
        <result property="roomprice" column="roomPrice" jdbcType="INTEGER"/>
        <result property="roomstock" column="roomStock" jdbcType="INTEGER"/>
        <result property="image" column="image" jdbcType="VARCHAR"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
    </resultMap>

    <!--查询单个-->
    <select id="queryById" resultMap="RoomMap">
        select
          roomId, roomType, roomPrice, roomStock, image, remark
        from hotelbook.room
        where roomId = #{roomid}
    </select>

    <!--查询指定行数据-->
    <select id="queryAllByLimit" resultMap="RoomMap">
        select
          roomId, roomType, roomPrice, roomStock, image, remark
        from hotelbook.room
        limit #{offset}, #{limit}
    </select>

    <!--通过实体作为筛选条件查询-->
    <select id="queryAll" resultMap="RoomMap">
        select
        roomId, roomType, roomPrice, roomStock, image, remark
        from hotelbook.room
        <where>
            <if test="roomid != null">
                and roomId = #{roomid}
            </if>
            <if test="roomtype != null and roomtype != ''">
                and roomType = #{roomtype}
            </if>
            <if test="roomprice != null">
                and roomPrice = #{roomprice}
            </if>
            <if test="roomstock != null">
                and roomStock = #{roomstock}
            </if>
            <if test="image != null and image != ''">
                and image = #{image}
            </if>
            <if test="remark != null and remark != ''">
                and remark = #{remark}
            </if>
        </where>
    </select>

    <!--新增所有列-->
    <insert id="insert" keyProperty="roomid" useGeneratedKeys="true">
        insert into hotelbook.room(roomType, roomPrice, roomStock, image, remark)
        values (#{roomtype}, #{roomprice}, #{roomstock}, #{image}, #{remark})
    </insert>

    <!--通过主键修改数据-->
    <update id="update">
        update hotelbook.room
        <set>
            <if test="roomtype != null and roomtype != ''">
                roomType = #{roomtype},
            </if>
            <if test="roomprice != null">
                roomPrice = #{roomprice},
            </if>
            <if test="roomstock != null">
                roomStock = #{roomstock},
            </if>
            <if test="image != null and image != ''">
                image = #{image},
            </if>
            <if test="remark != null and remark != ''">
                remark = #{remark},
            </if>
        </set>
        where roomId = #{roomid}
    </update>

    <!--通过主键删除-->
    <delete id="deleteById">
        delete from hotelbook.room where roomId = #{roomid}
    </delete>

</mapper>

九、验证

首先要启动zookeeper的zkServer.cmd,zkCli.cmd
然后开启provider
再运行consumer
最后根据consumer的controller查询单个得出返回即成功。
在这里插入图片描述
这是一个idea的restful插件,有点像postman

在这里插入图片描述

十、最后

代码会上传gittee,会用的人可以传下来试一试。
本项目也是也由了一个别人的demo总结的。
这是上面的代码地址https://gitee.com/wu_hung_fa/dubbo-demo.git

找了大半天 ,终于找到他了啊哈哈 ,他在这里
https://blog.csdn.net/qq_32401031/article/details/89101836

十一、改造

后续会增加很多功能,比如公司用到的技术等等,都会在这里放升级链接~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值