新增房源信息

数据结构

搭建虚拟机环境

#拉取镜像
docker pull percona:5.7.23
#创建容器
docker run --name percona -e MYSQL_ROOT_PASSWORD=root -d -i -p 3306:3306 percona:5.7.23
#启动容器
docker start percona
CREATE TABLE `tb_estate` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL COMMENT '楼盘名称',`province` varchar(10) DEFAULT NULL COMMENT '所在省',`city` varchar(10) DEFAULT NULL COMMENT '所在市',`area` varchar(10) DEFAULT NULL COMMENT '所在区',`address` varchar(100) DEFAULT NULL COMMENT '具体地址',`year` varchar(10) DEFAULT NULL COMMENT '建筑年代',`type` varchar(10) DEFAULT NULL COMMENT '建筑类型',`property_cost` varchar(10) DEFAULT NULL COMMENT '物业费',`property_company` varchar(20) DEFAULT NULL COMMENT '物业公司',`developers` varchar(20) DEFAULT NULL COMMENT '开发商',`created` datetime DEFAULT NULL COMMENT '创建时间',`updated` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1006 DEFAULT CHARSET=utf8 COMMENT='楼盘表';-- 初始数据
INSERT INTO `tb_estate` (`id`, `name`, `province`, `city`, `area`, `address`, `year`, `type`, `property_cost`, `property_company`, `developers`, `created`, `updated`) VALUES ('1001', '中远两湾城', '上海市', '上海市', '普陀区', '远景路97弄', '2001', '塔楼/板楼', '1.5', '上海中远物业管理发展有限公司', '上海万业企业股份有限公司', '2018-11-06 23:00:20', '2018-11-06 23:00:23');
INSERT INTO `tb_estate` (`id`, `name`, `province`, `city`, `area`, `address`, `year`, `type`, `property_cost`, `property_company`, `developers`, `created`, `updated`) VALUES ('1002', '上海康城', '上海市', '上海市', '闵行区', '莘松路958弄', '2001', '塔楼/板楼', '1.5', '盛孚物业', '闵行房地产', '2018-11-06 23:02:30', '2018-11-27 23:02:33');
INSERT INTO `tb_estate` (`id`, `name`, `province`, `city`, `area`, `address`, `year`, `type`, `property_cost`, `property_company`, `developers`, `created`, `updated`) VALUES ('1003', '保利西子湾', '上海市', '上海市', '松江区', '广富林路1188弄', '2008', '塔楼/板楼', '1.75', '上海保利物业管理', '上海城乾房地产开发有限公司', '2018-11-06 23:04:22', '2018-11-06 23:04:25');
INSERT INTO `tb_estate` (`id`, `name`, `province`, `city`, `area`, `address`, `year`, `type`, `property_cost`, `property_company`, `developers`, `created`, `updated`) VALUES ('1004', '万科城市花园', '上海市', '上海市', '松江区', '广富林路1188弄', '2002', '塔楼/板楼', '1.5', '上海保利物业管理', '上海城乾房地产开发有限公司', '2018-11-13 16:43:40', '2018-11-13 16:43:42');
INSERT INTO `tb_estate` (`id`, `name`, `province`, `city`, `area`, `address`, `year`, `type`, `property_cost`, `property_company`, `developers`, `created`, `updated`) VALUES ('1005', '上海阳城', '上海市', '上海市', '闵行区', '罗锦路888弄', '2002', '塔楼/板楼', '1.5', '上海莲阳物业管理有限公司', '上海莲城房地产开发有限公司', '2018-11-06 23:23:52', '2018-11-06 23:23:55');CREATE TABLE `tb_house_resources` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`title` varchar(100) DEFAULT NULL COMMENT '房源标题',`estate_id` bigint(20) DEFAULT NULL COMMENT '楼盘id',`building_num` varchar(5) DEFAULT NULL COMMENT '楼号(栋)',`building_unit` varchar(5) DEFAULT NULL COMMENT '单元号',`building_floor_num` varchar(5) DEFAULT NULL COMMENT '门牌号',`rent` int(10) DEFAULT NULL COMMENT '租金',`rent_method` tinyint(1) DEFAULT NULL COMMENT '租赁方式,1-整租,2-合租',`payment_method` tinyint(1) DEFAULT NULL COMMENT '支付方式,1-付一押一,2-付三押一,3-付六押一,4-年付押一,5-其它',`house_type` varchar(255) DEFAULT NULL COMMENT '户型,如:2室1厅1卫',`covered_area` varchar(10) DEFAULT NULL COMMENT '建筑面积',`use_area` varchar(10) DEFAULT NULL COMMENT '使用面积',`floor` varchar(10) DEFAULT NULL COMMENT '楼层,如:8/26',`orientation` varchar(2) DEFAULT NULL COMMENT '朝向:东、南、西、北',`decoration` tinyint(1) DEFAULT NULL COMMENT '装修,1-精装,2-简装,3-毛坯',`facilities` varchar(50) DEFAULT NULL COMMENT '配套设施, 如:1,2,3',`pic` varchar(200) DEFAULT NULL COMMENT '图片,最多5张',`house_desc` varchar(200) DEFAULT NULL COMMENT '描述',`contact` varchar(10) DEFAULT NULL COMMENT '联系人',`mobile` varchar(11) DEFAULT NULL COMMENT '手机号',`time` tinyint(1) DEFAULT NULL COMMENT '看房时间,1-上午,2-中午,3-下午,4-晚上,5-全天',`property_cost` varchar(10) DEFAULT NULL COMMENT '物业费',`created` datetime DEFAULT NULL,`updated` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='房源表';

创建itcast-haoke-manage-dubbo-server-house-resources工程

<?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"><parent><artifactId>itcast-haoke-manage-dubbo-server</artifactId><groupId>cn.itcast.haoke.manage</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>itcast-haoke-manage-dubbo-server-house-resources</artifactId><packaging>pom</packaging><modules><module>itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface</module><module>itcast-haoke-manage-dubbo-server-house-resources-dubbo-service</module></modules><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!--需要注意:传递依赖中,如果需要使用,请显示引入--><optional>true</optional></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><optional>true</optional></dependency></dependencies></project>

创建itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface子工程

对外提供的sdk包
只提供pojo实体以及接口,不提供实现类

<?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"><parent><artifactId>itcast-haoke-manage-dubbo-server-house-resources</artifactId><groupId>cn.itcast.haoke.manage</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface</artifactId></project>

创建itcast-haoke-manage-dubbo-server-house-resources-dubbo-service

具体实现

<?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"><parent><artifactId>itcast-haoke-manage-dubbo-server-house-resources</artifactId><groupId>cn.itcast.haoke.manage</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>itcast-haoke-manage-dubbo-server-house-resources-dubbo-service</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>cn.itcast.haoke.manage</groupId><artifactId>itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

编写BasePojo文件

编写BasePojo,所有的pojo类都要继承该类,在该类中定义了created、updated字段,表明在每一个表中都需要有这2个字段。

package cn.itcast.haoke.dubbo.server.pojo;import lombok.Data;import java.util.Date;@Data
public abstract class BasePojo implements java.io.Serializable {private Date created;private Date updated;}

使用MybatisPlus的AutoGenerator插件生成代码文件

创建itcast-haoke-manage-dubbo-server-generator工程

<?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"><parent><artifactId>itcast-haoke-manage-dubbo-server</artifactId><groupId>cn.itcast.haoke.manage</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>itcast-haoke-manage-dubbo-server-generator</artifactId><dependencies><!-- freemarker 模板引擎 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><optional>true</optional></dependency></dependencies></project>

编写CodeGenerator

package cn.itcast.haoke.generator;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class CodeGenerator {/*** <p>* 读取控制台内容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotEmpty(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();
// 全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("itcast");gc.setOpen(false);mpg.setGlobalConfig(gc);
// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://192.168.58.136:3306/haoke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true");
// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");mpg.setDataSource(dsc);
// 包配置PackageConfig pc = new PackageConfig();pc.setModuleName(scanner("模块名"));pc.setParent("cn.itcast.haoke.dubbo.server");mpg.setPackageInfo(pc);
// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};List<FileOutConfig> focList = new ArrayList<>();focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输入文件名称return projectPath + "/src/main/resources/mapper/" +pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" +StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setSuperEntityClass("cn.itcast.haoke.dubbo.server.pojo.BasePojo");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);
//strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");strategy.setInclude(scanner("表名"));strategy.setSuperEntityColumns("id");strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();}
}

运行代码,控制台会询问
请输入模块名:
houseResources
请输入表名:
tb_house_resources
显示结果

可以看到,自动生成了controller、entity、mapper、service等内容。
其实,一般只需要entity就可以了,也就是pojo类。(其他生成的代码都没用)
生成的类是这样的:

package cn.itcast.haoke.dubbo.server.houseResources.entity;import cn.itcast.haoke.dubbo.server.pojo.BasePojo;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** <p>* 房源表* </p>** @author itcast* @since 2022-07-29*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class TbHouseResources extends BasePojo {private static final long serialVersionUID = 1L;/*** 房源标题*/private String title;/*** 楼盘id*/private Long estateId;/*** 楼号(栋)*/private String buildingNum;/*** 单元号*/private String buildingUnit;/*** 门牌号*/private String buildingFloorNum;/*** 租金*/private Integer rent;/*** 租赁方式,1-整租,2-合租*/private Boolean rentMethod;/*** 支付方式,1-付一押一,2-付三押一,3-付六押一,4-年付押一,5-其它*/private Boolean paymentMethod;/*** 户型,如:2室1厅1卫*/private String houseType;/*** 建筑面积*/private String coveredArea;/*** 使用面积*/private String useArea;/*** 楼层,如:8/26*/private String floor;/*** 朝向:东、南、西、北*/private String orientation;/*** 装修,1-精装,2-简装,3-毛坯*/private Boolean decoration;/*** 配套设施, 如:1,2,3*/private String facilities;/*** 图片,最多5张*/private String pic;/*** 描述*/private String houseDesc;/*** 联系人*/private String contact;/*** 手机号*/private String mobile;/*** 看房时间,1-上午,2-中午,3-下午,4-晚上,5-全天*/private Boolean time;/*** 物业费*/private String propertyCost;private LocalDateTime created;private LocalDateTime updated;}

@EqualsAndHashCode(callSuper = true)
这个是自动生成equals和hashCode方法,我们一般不需要,所以将该注解去掉
@Accessors(chain = true)
这个是表示,生成的set方法将采用链式编程方式,建议保留

什么是链式编程?

将整理到pojo文件并且拷贝到工程
将整理的pojo文件拷贝到itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface工程中。

package cn.itcast.haoke.dubbo.server.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;import java.time.LocalDateTime;/*** <p>* 房源表* </p>** @author itcast*/
@Data
@Accessors(chain = true)
@TableName("tb_house_resources")
public class HouseResources extends BasePojo {private static final long serialVersionUID = 779152022777511825L;@TableId(value = "id", type = IdType.AUTO)private Long id;/*** 房源标题*/private String title;/*** 楼盘id*/private Long estateId;/*** 楼号(栋)*/private String buildingNum;/*** 单元号*/private String buildingUnit;/*** 门牌号*/private String buildingFloorNum;/*** 租金*/private Integer rent;/*** 租赁方式,1-整租,2-合租*/private Integer rentMethod;/*** 支付方式,1-付一押一,2-付三押一,3-付六押一,4-年付押一,5-其它*/private Integer paymentMethod;/*** 户型,如:2室1厅1卫*/private String houseType;/*** 建筑面积*/private String coveredArea;/*** 使用面积*/private String useArea;/*** 楼层,如:8/26*/private String floor;/*** 朝向:东、南、西、北*/private String orientation;/*** 装修,1-精装,2-简装,3-毛坯*/private Integer decoration;/*** 配套设施, 如:1,2,3*/private String facilities;/*** 图片,最多5张*/private String pic;/*** 描述*/private String houseDesc;/*** 联系人*/private String contact;/*** 手机号*/private String mobile;/*** 看房时间,1-上午,2-中午,3-下午,4-晚上,5-全天*/private Integer time;/*** 物业费*/private String propertyCost;}

定义新增房源的dubbo服务

在itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface工程

package cn.itcast.haoke.dubbo.server.api;import cn.itcast.haoke.dubbo.server.pojo.HouseResources;public interface ApiHouseResourcesService {/*** 新增房源** @param houseResources** @return -1:输入的参数不符合要求,0:数据插入数据库失败,1:成功*/int saveHouseResources(HouseResources houseResources);
}

实现新增房源服务

在itcast-haoke-manage-dubbo-server-house-resources-dubbo-service工程,编写application.properties配置文件

# Spring boot application
spring.application.name = itcast-haoke-manage-dubbo-server-house-resources# 数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.58.136:3306/haoke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root# 服务的扫描包
dubbo.scan.basePackages = cn.itcast.haoke.dubbo.server.api# 应用名称
dubbo.application.name = dubbo-provider-house-resources# 协议以及端口
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880# zk注册中心
dubbo.registry.address = zookeeper://192.168.58.136:2181
dubbo.registry.client = zkclient

编写HouseResourcesMapper接口

package cn.itcast.haoke.dubbo.server.mapper;import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface HouseResourcesMapper extends BaseMapper<HouseResources> {}

编写MybatisPlus配置类

package cn.itcast.haoke.dubbo.server.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;@MapperScan("cn.itcast.haoke.dubbo.server.mapper")
@Configuration
public class MybatisConfig {}

编写service
这里编写的Service是Spring的service,不是dubbo服务,因为需要控制事务以及一些逻辑。
先定义接口:

package cn.itcast.haoke.dubbo.server.service;import cn.itcast.haoke.dubbo.server.pojo.HouseResources;public interface HouseResourcesService {/*** @param houseResources** @return -1:输入的参数不符合要求,0:数据插入数据库失败,1:成功*/int saveHouseResources(HouseResources houseResources);}

编写BaseService实现

package cn.itcast.haoke.dubbo.server.service.impl;import cn.itcast.haoke.dubbo.server.pojo.BasePojo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;import java.util.Date;
import java.util.List;public abstract class BaseServiceImpl<T extends BasePojo> {@Autowiredprivate BaseMapper<T> mapper;/*** 根据id查询数据** @param id* @return*/public T queryById(Long id) {return this.mapper.selectById(id);}/*** 查询所有数据** @return*/public List<T> queryAll() {return this.mapper.selectList(null);}/*** 根据条件查询一条数据** @param record* @return*/public T queryOne(T record) {return this.mapper.selectOne(new QueryWrapper<>(record));}/*** 根据条件查询数据列表** @param record* @return*/public List<T> queryListByWhere(T record) {return this.mapper.selectList(new QueryWrapper<>(record));}/*** 根据条件分页查询数据列表** @param record* @param page* @param rows* @return*/public IPage<T> queryPageListByWhere(T record, Integer page, Integer rows) {// 获取分页数据return this.mapper.selectPage(new Page<T>(page, rows), new QueryWrapper<>(record));}/*** 保存数据** @param record* @return*/public Integer save(T record) {record.setCreated(new Date());record.setUpdated(record.getCreated());return this.mapper.insert(record);}/*** 更新数据** @param record* @return*/public Integer update(T record) {record.setUpdated(new Date());return this.mapper.updateById(record);}/*** 根据id删除数据** @param id* @return*/public Integer deleteById(Long id) {return this.mapper.deleteById(id);}/*** 根据ids批量删除数据** @param ids* @return*/public Integer deleteByIds(List<Long> ids) {return this.mapper.deleteBatchIds(ids);}/*** 根据条件删除数据** @param record* @return*/public Integer deleteByWhere(T record) {return this.mapper.delete(new QueryWrapper<>(record));}}

具体实现类:

package cn.itcast.haoke.dubbo.server.service.impl;import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import cn.itcast.haoke.dubbo.server.service.HouseResourcesService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Transactional
@Service
public class HouseResourcesServiceImpl extends BaseServiceImpl implements HouseResourcesService {/*** @param houseResources** @return -1:输入的参数不符合要求,0:数据插入数据库失败,1:成功*/@Overridepublic int saveHouseResources(HouseResources houseResources) {// 添加校验或者是其他的一些逻辑if(StringUtils.isBlank(houseResources.getTitle())){// 不符合要求return -1;}return super.save(houseResources);}
}

编写启动类

package cn.itcast.haoke.dubbo.server;import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;@SpringBootApplication
public class DubboProvider {public static void main(String[] args) {new SpringApplicationBuilder(DubboProvider.class).web(WebApplicationType.NONE) // 非 Web 应用.run(args);}}

实现restful接口

itcast-haoke-manage-api-server工程是,为前端系统提供接口服务,是dubbo服务的消费方
添加依赖
因为是dubbo的服务方,需要添加dubbo提供方提供的接口、pojo的依赖

<?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"><parent><artifactId>itcast-haoke-manage</artifactId><groupId>cn.itcast.haoke.manage</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>itcast-haoke-manage-api-server</artifactId><dependencies><!--springboot的web支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>cn.itcast.haoke.manage</groupId><artifactId>itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

编写service
HouseResourcesService用于调用dubbo服务。

package cn.itcast.haoke.dubbo.api.service;import cn.itcast.haoke.dubbo.server.api.ApiHouseResourcesService;
import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;@Service
public class HouseResourcesService {@Reference(version = "1.0.0")private ApiHouseResourcesService apiHouseResourcesService;public boolean save(HouseResources houseResources) {int result =this.apiHouseResourcesService.saveHouseResources(houseResources);return result == 1;}
}

编写controller

package cn.itcast.haoke.dubbo.api.controller;import cn.itcast.haoke.dubbo.api.service.HouseResourcesService;
import cn.itcast.haoke.dubbo.server.pojo.HouseResources;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;@Controller
@RequestMapping("house/resources")
public class HouseResourcesController {@Autowiredprivate HouseResourcesService houseResourcesService;/*** 新增房源** @param houseResources json数据* @return*/@PostMapping@ResponseBodypublic ResponseEntity<Void> save(@RequestBody HouseResources houseResources) {try {boolean bool = this.houseResourcesService.save(houseResources);if (bool) {return ResponseEntity.status(HttpStatus.CREATED).build();}} catch (Exception e) {e.printStackTrace();}return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}/*** test** @return*/@GetMapping@ResponseBodypublic ResponseEntity<String> get() {return ResponseEntity.ok("ok");}
}

编写启动类

package cn.itcast.haoke.dubbo.api;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DubboApiApplication {public static void main(String[] args) {SpringApplication.run(DubboApiApplication.class, args);}
}

编写application.properties配置文件

# Spring boot application
spring.application.name = itcast-haoke-manage-api-server
server.port = 18080
#logging.level.root=DEBUG# 应用名称
dubbo.application.name = dubbo-consumer-haoke-manage#  zk注册中心
dubbo.registry.address = zookeeper://172.16.55.185:2181
dubbo.registry.client = zkclient


运行启动服务
运行即可启动tomcat服务,进行测试:
url:http://127.0.0.1:18080/house/resources
数据:

{"title":"东方曼哈顿 3室2厅 16000元","buildingNum":"2","buildingUnit":"1","buildingFloorNum":"1","rent":"1111","paymentMethod":"1","rentMethod":"1","coveredArea":"2","useArea":"2","orientation":"南","decoration":"1","facilities":"1,2,3,8,9","houseDesc":"这个经纪人很懒,没写核心卖点","contact":"张三","mobile":"11111111111","time":"1","propertyCost":"11","floor":"1/2","houseType":"1室1厅1卫1厨1阳台","estateId":"1005"}


整合前端系统

增加房源标题
之前的前端页面src/pages/haoke/House/AddResource.js实现中,缺少了标题一项,现补上

<FormItem {...formItemLayout} label="房源标题">{getFieldDecorator('title',{rules:[{ required: true, message:"此项为必填项" }]})(<Input style={{ width: '100%' }}  />)}</FormItem>

增加model
src/pages/haoke/House/models/form.js

import { routerRedux } from 'dva/router';
import { message } from 'antd';
import { addHouseResource } from '@/services/haoke';export default {namespace: 'house',state: {},effects: {*submitHouseForm({ payload }, { call }) {yield call(addHouseResource, payload);message.success('提交成功');}},reducers: {saveStepFormData(state, { payload }) {return {...state};},},
};

增加services
src/services/haoke.js,用于请求服务并且处理业务逻辑。

import request from '@/utils/request';export async function addHouseResource(params) {return request('/haoke/house/resources', {method: 'POST',body: params});
}

修改表单提交地址
AddResource.js

dispatch({type: 'house/submitHouseForm',payload: values,});

通过反向代理解决跨域问题
由于我们前端系统和后台服务系统的端口不同,会导致跨域问题,我们通过umi提供的反向代理功能解决这个问题。在config.js中进行配置proxy:

 proxy: {'/haoke/': {target: 'http://127.0.0.1:18080',changeOrigin: true,pathRewrite: { '^/haoke/': '' }}},

配置代理后,以/haoke开头的请求,就会被代理。
代理效果是这样的:
请求:http://localhost:8000/haoke/house/resources
实际:http://127.0.0.1:18080/house/resources


测试

源代码

后端项目
链接:https://pan.baidu.com/s/1guR2Wc-mDZ-AVDE4Az-T-A?pwd=5gn1
提取码:5gn1
–来自百度网盘超级会员V3的分享
链接:https://pan.baidu.com/s/17OA8GSbMJz1GcBueufGjFQ?pwd=g0tf
提取码:g0tf
–来自百度网盘超级会员V3的分享

Java开发全终端实战租房项目-服务的具体实现相关推荐

  1. Java开发全终端实战租房项目

    课程介绍:        本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来实现一个完整的租房项目--好客租房.好客租房 ...

  2. 【游戏开发】《Java游戏服务器架构实战》项目在windows上部署

    [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 文章目录 [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 一.配置项目基础环境 二. ...

  3. 联发科heli p90_“如果您是Java开发人员并且正在编写微服务,那么Helidon是一个不错的选择”

    联发科heli p90 " Helidon仅设计用于微服务" 尽管Oracle最近开放了 Helidon(一组Java库)的开源资源 ,但是该项目本身并不新鲜,正如Helidon项 ...

  4. Java开发规范(1)项目规范

    本篇规范基于阿里巴巴.华为的开发手册,添加了我们团队的开发风格规范,补充了一些细节.感谢前人的经验和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海. 规范不是为了约束和禁锢大家的创造力,而是为了帮 ...

  5. 【Java开发】 Staffjoy 01 :项目目标及案例需求

    Staffjoy 是 Spring Boot & Kubernetes 云原生微服务实践,是一个贴近生产的微服务+云原生教学案例,本文依波波老师的课程.新开了一个坑,希望能搞懂微服务框架,感兴 ...

  6. PHP转JAVA开发30分钟实战攻略

    服务端开发中,有很多知识是相通的,例如mysql,redis,http协议等. 基于这些基础,在编程语言上的转变并不困难. 本文主要从下面几点出发,讲述如何快速从php开发转为java开发: 使用框架 ...

  7. idea如何删除java里面工程,Java开发工具IntelliJ IDEA配置项目系列教程(七):卸载模块...

    IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合. ...

  8. apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

    VsCode搭建Java开发环境(Spring Boot项目创建.运行.调试) 安装如下两个主要扩展即可,这两个扩展已关联java项目开发主要使用的maven.springboot等所需要的扩展. 开 ...

  9. Java开发入门与实战!打印杨辉三角java代码

    正文 我的第一份工作是在一家外企,当时抱着"逃离"上海的想法去了二线城市的分公司,但是管理文化氛围跟总部几乎都是一样的,这份工作经历对我后面的工作不论是做事风格.习惯上还是思考问题 ...

最新文章

  1. 调用webservice 的时候没法输入参数
  2. 转:Python Shell 清屏方法
  3. 申请美国计算机科学,美国计算机科学(Computer Science)申请条件
  4. java中大数开方_大数开方(Java版)
  5. python异步asy_Python 异步编程之asyncio【转载】
  6. java随机生成1到33数组,JAVA 生成随机数数组
  7. html是一种描述的沙子语言,小学低年级语文阅读训练
  8. 写在国产接口管理工具ApiPost 5.2.5发布后的一些话
  9. 运行github上的Vue项目
  10. 手把手教你如何使用IOMETER测试工具测试存储
  11. WiFi之SDIO接口
  12. mysql.exe下载_mysql8 windows 下载安装
  13. shell笔记_重定向与文本处理命令
  14. 盛金公式解一元三次方程_用盛金公式求解一元三次方程
  15. 几行代码,把你的小电影全部藏好了!
  16. 一次性能优化引发的思考
  17. 2021-12-01 WPF上位机 103-西门子S7协议之V区,DB区读数据方法流程解析
  18. 达梦数据库(DM8)的安装教程
  19. 第十三周完成情况 学生选课管理系统 王杰 孙乾 蔚晓青
  20. 解决Navicat连接mysql闪退问题

热门文章

  1. Jpa持久对象状态,一级缓存,二级缓存
  2. 网页上facebook分享功能的具体实现
  3. 苹果电脑销量大跌40%,PC市场无战事
  4. 字符编码转换类(支持多国语言)
  5. Java 中 HttpURLConnection 与 PoLA 法则
  6. 基于Java+SpringBoot+Thymeleaf+Mysql在线教育视频点播学习系统设计与实现
  7. 【Python网络爬虫】实战#181024
  8. 蓝牙解锁AutoLock 1.0.2 Mac中文版 (蓝牙WiFi解锁工具)
  9. 计算机视觉—BOW图像检索
  10. 仪器规范接地与测量安全