# shf-chirs **Repository Path**: chrischow23/shf-chirs ## Basic Information - **Project Name**: shf-chirs - **Description**: 【项目简介】尚好房是一个二手房管理服务平台,开放优质资源和线上能力,聚合线上线下二手房产资源,打造一个全方 位二手房服务生态市场,为消费者提供优质房产服务资源。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2022-09-01 - **Last Updated**: 2025-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, 尚好房, 后端开发, SpringBoot, Spring ## README # 一、项目介绍 ## 1、介绍 尚好房是一个二手房管理服务平台,开放优质资源和线上能力,聚合线上线下二手房产资源,打造一个全方位二手房服务生态市场,为消费者提供优质房产服务资源。 ## 2、核心技术 | 基础框架:ssm | | ----------------------------------- | | 分布式框架:ssm + Dubbo + zk | | spring session redis实现session共享 | | 图片服务器:七牛云 | | 后台管理权限控制:spring-security | | 前端用户登录判断:拦截器 | | 后台管理模板:Thymeleaf | | 前端技术:Vue+Axios | ## 3、项目模块 最终分布式架构模块 shf-parent:根目录,管理子模块: ​ common-util:公共类模块 ​ model:实体类模块 ​ service:dubbo服务父节点 ​ service-acl:权限服务模块 ​ service-house:房源服务模块 ​ service-user:用户服务模块 ​ service-api:dubbo服务api接口 ​ web:前端(dubbo服务消费者) ​ web-admin:后台管理系统 ​ web-front:网站前端 模块调用关系,如图: ![images/1.搭建环境/image-20220214132059749](images/1.搭建环境/image-20220214132059749.png) ## 4、项目演示地址 尚好房后台管理系统:http://139.198.152.148:8001/ 尚好房前端:http://139.198.152.148:8002/ 根据演示了解项目业务 ## 5、数据库 数据库从资源文件中获取,导入数据库,数据库表如下: ![image-20220215092734848](images/1.搭建环境/image-20220215092734848.png) ## 6、其他资源 如:实体类、工具类直接复制到项目模块使用,后续使用时再详细说明,其他资源需要时引入。 # 二、搭建环境 目前我们先搭建“尚好房”后台管理系统,该系统为单体架构:SSM框架,后续我们通过SSM架构过渡到Dubbo通信的分布式架构。 SSM单体架构模块: shf-parent:根目录,管理子模块: ​ common-util:公共类模块 ​ model:实体类模块 ​ web-admin:后台管理系统 搭建SSM架构我们分三步进行: 1、搭建项目结构 2、配置依赖关系 3、配置SSM环境 4、测试SSM环境 ## 1、搭建项目结构 ### 1.1、搭建父工程shf-parent shf:尚好房首字母缩写 第一步:新建项目 ![images/1.搭建环境/image-20220214093951461.png](images/1.搭建环境/image-20220214093951461.png) 第二步: ![images/images/1.搭建环境/image-20220214095246683](images/1.搭建环境/image-20220214095246683.png) 第三步: ![images/1.搭建环境/image-20220214095324438](images/1.搭建环境/image-20220214095324438.png) 第四步: ![images/1.搭建环境/image-20220214095400119](images/1.搭建环境/image-20220214095400119.png) 项目结构如: ![images/1.搭建环境/image-20220214095609369](images/1.搭建环境/image-20220214095609369.png) 删除src目录 ### 1.2、搭建工具类模块common-util 第一步:右键点击“shf-parent” ![images/1.搭建环境/image-20220214100002279](images/1.搭建环境/image-20220214100002279.png) 第二步: ![images/1.搭建环境/image-20220214100028936](images/1.搭建环境/image-20220214100028936.png) 第三步: ![images/1.搭建环境/image-20220214100054908](images/1.搭建环境/image-20220214100054908.png) 第四步: ![images/1.搭建环境/image-20220214100115064](images/1.搭建环境/image-20220214100115064.png) 项目结构如: ![images/1.搭建环境/image-20220214100507264](images/1.搭建环境/image-20220214100507264.png) 引入“资料/java工具类”相关代码 ### 1.3、搭建实体类模块model 搭建方式如:common-util 项目结构如: ![images/1.搭建环境/image-20220214101004534](images/1.搭建环境/image-20220214101004534.png) 引入“资料/java实体类”相关代码 ### 1.4、搭建项目模块web-admin 第一步:右键点击“shf-parent” ![images/1.搭建环境/image-20220214100002279](images/1.搭建环境/image-20220214100002279.png) 第二步: ![image-20220223151651181](images/1.搭建环境/image-20220223151651181.png) 第三步: ![image-20220223151717816](images/1.搭建环境/image-20220223151717816.png) 第四步: ![image-20220223151814916](images/1.搭建环境/image-20220223151814916.png) 项目结构如: ![image-20220223151955746](images/1.搭建环境/image-20220223151955746.png) 说明:模块web-admin还缺少webapp/WEB-INF目录及web.xml文件 第一步:在pom.xml文件中指定打包方式为war ![](E:\尚硅谷_JavaEE\06_尚好房\01.笔记\images\1.搭建环境\image-20220325113002711.png) 第二步:在main下直接创建webapp/WEB-INF/web.xml文件 ```xml web ``` ## 2、配置依赖关系 ### 2.1、shf-parent父模块管理依赖版本 修改shf-parent模块pom.xml文件 ```xml 4.0.0 com.atguigu shf-parent pom 1.0 common-util model web-admin 1.8 5.2.7.RELEASE 3.0.11.RELEASE 4.1.4 2.5 1.2.29 3.4.5 1.3.1 8.0.18 1.1.12 1.3.1 1.7.30 1.2.3 org.springframework spring-webmvc ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-aspects ${spring.version} org.springframework spring-test ${spring.version} org.thymeleaf thymeleaf-spring5 ${thymeleaf.version} com.github.pagehelper pagehelper ${pagehelper.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring ${mybatis.spring.version} mysql mysql-connector-java ${mysql.version} com.alibaba druid ${druid.version} commons-fileupload commons-fileupload ${commons-fileupload.version} com.alibaba fastjson ${fastjson.version} org.slf4j slf4j-api ${slf4j-version} ch.qos.logback logback-classic ${logback-version} javax.servlet servlet-api ${servlet-api.version} provided org.apache.maven.plugins maven-compiler-plugin 3.2 1.8 1.8 UTF-8 ``` ### 2.2、common-util模块 common-util模块负责:依赖与常用工具类管理 ```xml shf-parent com.atguigu 1.0 4.0.0 common-util org.springframework spring-webmvc org.springframework spring-jdbc org.springframework spring-tx org.springframework spring-aspects org.springframework spring-test org.thymeleaf thymeleaf-spring5 com.github.pagehelper pagehelper org.mybatis mybatis org.mybatis mybatis-spring mysql mysql-connector-java com.alibaba druid commons-fileupload commons-fileupload com.alibaba fastjson org.slf4j slf4j-api ch.qos.logback logback-classic ``` ### 2.3、web-admin模块 web-admin模块依赖:common-util与model模块 ```xml shf-parent com.atguigu 1.0 4.0.0 web-admin war com.atguigu common-util 1.0 com.atguigu model 1.0 org.eclipse.jetty jetty-maven-plugin 9.4.15.v20190215 10 / 8000 ``` 说明:web容器我们使用jetty,与tomcat一样,jetty更轻量级。 ## 3、配置SSM环境 操作模块:web-admin 上面我们已经添加好项目依赖关系,接下来搭建ssm环境 ssm前端模板我们使用:thymeleaf模板 ### 3.1、添加日志文件 在resources目录添加: logback.xml ```xml %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n ``` ### 3.2、SSM分层 ssm分为三层: ​ controller、service与dao层 我们为每一层分配添加一个配置文件,方便配置文件管理: ​ spring-mvc.xml ​ spring-service.xml ​ spring-dao.xml ### 3.3、添加dao层配置文件 添加ibatis配置文件: 在resources目录添加:mybatis-config.xml ```xml ``` 添加ibatis与spring集成的配置文件 在resources/spring目录添加:spring-dao.xml: ```xml classpath:mapper/*.xml ``` 创建ibatis xml文件存放文件夹: 在resources目录添加:mapper文件夹 ### 3.4、添加service层配置文件 在resources/spring目录添加:spring-service.xml: ```xml ``` ### 3.5、添加controller层配置文件 在resources/spring目录添加:spring-mvc.xml: ```xml text/html;charset=UTF-8 application/json ``` ### 3.6、修改web.xml文件 ```xml web encode org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceRequestEncoding true forceResponseEncoding true encode /* springMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/spring-mvc.xml 1 springMVC / contextConfigLocation classpath:spring/spring-*.xml org.springframework.web.context.ContextLoaderListener ``` ## 4、测试SSM环境 我们用户角色为例,获取全部角色数据在页面显示 ### 4.1、添加表 如果已经导入数据库,忽略 CREATE TABLE `acl_role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色id', `role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称', `role_code` varchar(20) DEFAULT NULL COMMENT '角色编码', `description` varchar(255) DEFAULT NULL COMMENT '描述', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='角色'; 插入数据: INSERT INTO `acl_role` (`id`,`role_name`,`role_code`,`description`,`create_time`,`update_time`,`is_deleted`) VALUES (1,'系统管理员','SYSTEM','系统管理员','2021-05-31 18:09:18','2022-01-20 20:37:52',0),(2,'权限浏览','','权限浏览','2021-06-01 08:38:40','2022-01-20 20:40:09',0),(3,'权限编辑',NULL,'权限编辑','2021-06-18 17:12:21','2022-01-20 20:40:27',0),(4,'房源浏览',NULL,'房源浏览','2021-09-27 09:37:13','2022-01-21 15:34:38',0),(5,'房源编辑',NULL,'房源编辑','2022-01-10 21:57:32','2022-01-21 15:40:45',0); ### 4.2、添加实体 在model模块添加实体 构建model模块是直接引入全部实体类,引入了忽略 ```java package com.atguigu.entity; public class Role extends BaseEntity { private static final long serialVersionUID = 1L; //角色名称 private String roleName; //角色编码 private String roleCode; //描述 private String description; public void setRoleName(String value) { this.roleName = value; } public String getRoleName() { return this.roleName; } public void setRoleCode(String value) { this.roleCode = value; } public String getRoleCode() { return this.roleCode; } public void setDescription(String value) { this.description = value; } public String getDescription() { return this.description; } } ``` ### 4.4、添加RoleDao ```java package com.atguigu.dao; import com.atguigu.entity.Role; import java.util.List; public interface RoleDao { List findAll(); } ``` ### 4.4、添加RoleDao.xml映射文件 ```xml select id,role_name,role_code,description,create_time,update_time,is_deleted ``` ### 4.5、添加service ```java package com.atguigu.service; import com.atguigu.entity.Role; import java.util.List; public interface RoleService { List findAll(); } ``` ### 4.6、添加service实现 ```java package com.atguigu.service.impl; import com.atguigu.dao.RoleDao; import com.atguigu.entity.Role; import com.atguigu.service.RoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class RoleServiceImpl implements RoleService { @Autowired private RoleDao roleDao; public List findAll() { return roleDao.findAll(); } } ``` ### 4.7、添加controller ```java package com.atguigu.controller; import com.atguigu.entity.Role; import com.atguigu.service.RoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller @RequestMapping(value="/role") @SuppressWarnings({"unchecked", "rawtypes"}) public class RoleController { @Autowired private RoleService roleService; private final static String PAGE_INDEX = "role/index"; /** * 列表 * @param model * @return */ @RequestMapping public String index(ModelMap model) { List list = roleService.findAll(); model.addAttribute("list", list); return PAGE_INDEX; } } ``` ### 4.8、添加页面 在WEB-INFE下创建模板总的文件夹:templates 在templates下创建角色文件夹:role 在role文件夹下创建文件:index.html ```html Title
11 22 33 33 33
``` ### 4.9、部署web-admin 第一步: ![images/1.搭建环境/image-20220214140822474](images/1.搭建环境/image-20220214140822474.png) 第二步: ![image-20220223105551923](images/1.搭建环境/image-20220223105551923.png) ### 4.10、访问测试 ![image-20220214141155750](images/1.搭建环境/image-20220214141155750.png) ### 4.11、汇总 目前SSM环境我们已经搭建完成,完成了角色列表的测试,说明SSM搭建我们已经顺利完成