在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
十一、改造
后续会增加很多功能,比如公司用到的技术等等,都会在这里放升级链接~