• 尚好房 01_搭建环境


    尚好房:搭建环境

    一、项目介绍

    1、介绍

    尚好房是一个二手房管理服务平台,开放优质资源和线上能力,聚合线上线下二手房产资源,打造一个全方位二手房服务生态市场,为消费者提供优质房产服务资源。

    2、核心技术

    基础框架:ssm
    分布式框架:ssm + Dubbo + zk
    spring session redis实现session共享
    数据缓存:redis
    图片服务器:七牛云
    后台管理权限控制: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:网站前端

    模块调用关系,如图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YakRCc9g-1661868406432)(images/01/img_001.png)]

    4、项目演示地址

    尚好房后台管理系统:http://139.198.152.148:8001/
    尚好房前端:http://139.198.152.148:8002/

    根据演示了解项目业务

    5、数据库

    数据库从资源文件中获取,导入数据库,数据库表如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBgoDYRH-1661868406435)(images/01/img_002.png)]

    6、其他资源

    如:实体类、工具类直接复制到项目模块使用,后续不做说明,其他资源需要时引入。

    二、搭建环境

    目前我们先搭建“尚好房”后台管理系统,先搭建为单体架构:SSM框架,后续我们通过SSM架构过渡到Dubbo通信的分布式架构。

    SSM单体架构模块:

    shf-parent:根目录,管理子模块:

    ​ common-util:公共类模块

    ​ model:实体类模块

    ​ web-admin:后台管理系统

    搭建SSM架构我们分三步进行:

    1. 搭建项目结构、配置依赖关系

    2. 配置SSM环境

    3. 测试SSM环境

    1、搭建项目结构

    1.1、搭建父工程shf-parent
    1. 创建Maven Project,命名为shf-parent,版本号为1.0

    2. 在pom.xml文件中指定打包方式为pom

    3. 删除src目录

    4. 父工程管理依赖

      
      <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.0modelVersion>
      
          <groupId>com.atguigugroupId>
          <artifactId>shf-parentartifactId>
          <packaging>pompackaging>
          <version>1.0version>
          <properties>
              <maven.compiler.source>8maven.compiler.source>
              <maven.compiler.target>8maven.compiler.target>
              
              <spring.version>5.0.5.RELEASEspring.version>
              <thymeleaf.version>3.0.11.RELEASEthymeleaf.version>
              <pagehelper.version>5.2.0pagehelper.version>
              <servlet-api.version>2.5servlet-api.version>
              <fastjson.version>1.2.29fastjson.version>
              <mybatis.version>3.4.5mybatis.version>
              <mybatis.spring.version>1.3.1mybatis.spring.version>
              <mysql.version>5.1.46mysql.version>
              <druid.version>1.1.12druid.version>
              <commons-fileupload.version>1.3.1commons-fileupload.version>
              <slf4j-version>1.7.30slf4j-version>
              <logback-version>1.2.3logback-version>
              <lombok.version>1.18.8lombok.version>
              <dubbo.version>2.6.0dubbo.version>
              <zookeeper.version>3.4.7zookeeper.version>
              <junit.version>4.12junit.version>
              <zkclient.version>0.1zkclient.version>
              <qiniu.version>7.2.0qiniu.version>
              <spring.security.version>5.2.7.RELEASEspring.security.version>
              <thymeleaf-springsecurity5.version>3.0.4.RELEASEthymeleaf-springsecurity5.version>
              <redis-session.version>1.3.5.RELEASEredis-session.version>
          properties>
          
          <dependencyManagement>
              <dependencies>
                  
                  <dependency>
                      <groupId>org.springframework.sessiongroupId>
                      <artifactId>spring-session-data-redisartifactId>
                      <version>${redis-session.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.thymeleaf.extrasgroupId>
                      <artifactId>thymeleaf-extras-springsecurity5artifactId>
                      <version>${thymeleaf-springsecurity5.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.springframeworkgroupId>
                      <artifactId>spring-webmvcartifactId>
                      <version>${spring.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.springframeworkgroupId>
                      <artifactId>spring-jdbcartifactId>
                      <version>${spring.version}version>
                  dependency>
                  <dependency>
                      <groupId>org.springframeworkgroupId>
                      <artifactId>spring-txartifactId>
                      <version>${spring.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.springframeworkgroupId>
                      <artifactId>spring-aspectsartifactId>
                      <version>${spring.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.springframeworkgroupId>
                      <artifactId>spring-testartifactId>
                      <version>${spring.version}version>
                  dependency>
      			<dependency>
                      <groupId>junitgroupId>
                      <artifactId>junitartifactId>
                      <version>${junit.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.thymeleafgroupId>
                      <artifactId>thymeleaf-spring5artifactId>
                      <version>${thymeleaf.version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>com.github.pagehelpergroupId>
                      <artifactId>pagehelperartifactId>
                      <version>${pagehelper.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.mybatisgroupId>
                      <artifactId>mybatisartifactId>
                      <version>${mybatis.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>org.mybatisgroupId>
                      <artifactId>mybatis-springartifactId>
                      <version>${mybatis.spring.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>mysqlgroupId>
                      <artifactId>mysql-connector-javaartifactId>
                      <version>${mysql.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>com.alibabagroupId>
                      <artifactId>druidartifactId>
                      <version>${druid.version}version>
                  dependency>
                  
                  <dependency>
                      <groupId>commons-fileuploadgroupId>
                      <artifactId>commons-fileuploadartifactId>
                      <version>${commons-fileupload.version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>com.alibabagroupId>
                      <artifactId>fastjsonartifactId>
                      <version>${fastjson.version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>org.slf4jgroupId>
                      <artifactId>slf4j-apiartifactId>
                      <version>${slf4j-version}version>
                  dependency>
                  <dependency>
                      <groupId>ch.qos.logbackgroupId>
                      <artifactId>logback-classicartifactId>
                      <version>${logback-version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>org.projectlombokgroupId>
                      <artifactId>lombokartifactId>
                      <version>${lombok.version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>com.alibabagroupId>
                      <artifactId>dubboartifactId>
                      <version>${dubbo.version}version>
                  dependency>
                  <dependency>
                      <groupId>org.apache.zookeepergroupId>
                      <artifactId>zookeeperartifactId>
                      <version>${zookeeper.version}version>
                  dependency>
                  <dependency>
                      <groupId>com.github.sgroschupfgroupId>
                      <artifactId>zkclientartifactId>
                      <version>${zkclient.version}version>
                  dependency>
                  <dependency>
                      <groupId>javassistgroupId>
                      <artifactId>javassistartifactId>
                      <version>3.12.1.GAversion>
                  dependency>
                  <dependency>
                      <groupId>commons-codecgroupId>
                      <artifactId>commons-codecartifactId>
                      <version>1.10version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>com.qiniugroupId>
                      <artifactId>qiniu-java-sdkartifactId>
                      <version>${qiniu.version}version>
                  dependency>
      
                  
                  <dependency>
                      <groupId>org.springframework.securitygroupId>
                      <artifactId>spring-security-webartifactId>
                      <version>${spring.security.version}version>
                  dependency>
                  <dependency>
                      <groupId>org.springframework.securitygroupId>
                      <artifactId>spring-security-configartifactId>
                      <version>${spring.security.version}version>
                  dependency>
              dependencies>
          dependencyManagement>
      	
          <dependencies>
              <dependency>
                  <groupId>javax.servletgroupId>
                  <artifactId>servlet-apiartifactId>
                  <version>${servlet-api.version}version>
                  <scope>providedscope>
              dependency>
          dependencies>
      project>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
      • 161
      • 162
      • 163
      • 164
      • 165
      • 166
      • 167
      • 168
      • 169
      • 170
      • 171
      • 172
      • 173
      • 174
      • 175
      • 176
      • 177
      • 178
      • 179
      • 180
      • 181
      • 182
      • 183
      • 184
      • 185
      • 186
      • 187
      • 188
      • 189
      • 190
      • 191
      • 192
      • 193
      • 194
      • 195
      • 196
      • 197
      • 198
      • 199
      • 200
      • 201
      • 202
      • 203
      • 204
      • 205
      • 206
      • 207
      • 208
      • 209
      • 210
      • 211
      • 212
    1.2、搭建工具类模块common-util
    1. 在父工程shf-parent下新建module作为子工程命名为common-util

      
      <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>shf-parentartifactId>
              <groupId>com.atguigugroupId>
              <version>1.0version>
          parent>
          <modelVersion>4.0.0modelVersion>
          <artifactId>common-utilartifactId>
          <packaging>jarpackaging>
          <properties>
              <maven.compiler.source>8maven.compiler.source>
              <maven.compiler.target>8maven.compiler.target>
          properties>
      project>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    2. common-util项目引入依赖

      <dependencies>
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-webmvcartifactId>
          dependency>
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-jdbcartifactId>
          dependency>
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-txartifactId>
          dependency>
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-aspectsartifactId>
          dependency>
          
          <dependency>
              <groupId>org.springframeworkgroupId>
              <artifactId>spring-testartifactId>
          dependency>
      	    <dependency>
              <groupId>junitgroupId>
              <artifactId>junitartifactId>
          dependency>
          
          <dependency>
              <groupId>org.thymeleafgroupId>
              <artifactId>thymeleaf-spring5artifactId>
          dependency>
      
          
          <dependency>
              <groupId>com.github.pagehelpergroupId>
              <artifactId>pagehelperartifactId>
          dependency>
          
          <dependency>
              <groupId>org.mybatisgroupId>
              <artifactId>mybatisartifactId>
          dependency>
          
          <dependency>
              <groupId>org.mybatisgroupId>
              <artifactId>mybatis-springartifactId>
          dependency>
          
          <dependency>
              <groupId>mysqlgroupId>
              <artifactId>mysql-connector-javaartifactId>
          dependency>
          
          <dependency>
              <groupId>com.alibabagroupId>
              <artifactId>druidartifactId>
          dependency>
          
          <dependency>
              <groupId>commons-fileuploadgroupId>
              <artifactId>commons-fileuploadartifactId>
          dependency>
      
          
          <dependency>
              <groupId>com.alibabagroupId>
              <artifactId>fastjsonartifactId>
          dependency>
      
          
          <dependency>
              <groupId>org.slf4jgroupId>
              <artifactId>slf4j-apiartifactId>
          dependency>
          <dependency>
              <groupId>ch.qos.logbackgroupId>
              <artifactId>logback-classicartifactId>
          dependency>
      
          
          <dependency>
              <groupId>com.alibabagroupId>
              <artifactId>dubboartifactId>
          dependency>
          <dependency>
              <groupId>org.apache.zookeepergroupId>
              <artifactId>zookeeperartifactId>
          dependency>
          <dependency>
              <groupId>com.github.sgroschupfgroupId>
              <artifactId>zkclientartifactId>
          dependency>
          <dependency>
              <groupId>javassistgroupId>
              <artifactId>javassistartifactId>
          dependency>
          <dependency>
              <groupId>commons-codecgroupId>
              <artifactId>commons-codecartifactId>
          dependency>
      
          
          <dependency>
              <groupId>com.qiniugroupId>
              <artifactId>qiniu-java-sdkartifactId>
          dependency>
      dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
    3. 拷贝工具类到common-util项目中

    1.3、搭建实体类模块model
    1. 在父工程shf-parent下新建module作为子工程命名为model

      
      <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>shf-parentartifactId>
              <groupId>com.atguigugroupId>
              <version>1.0version>
          parent>
          <modelVersion>4.0.0modelVersion>
          <artifactId>modelartifactId>
          <packaging>jarpackaging>
          <properties>
              <maven.compiler.source>8maven.compiler.source>
              <maven.compiler.target>8maven.compiler.target>
          properties>
      project>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    2. 引入lombok依赖

      <dependencies>
          <dependency>
              <groupId>org.projectlombokgroupId>
              <artifactId>lombokartifactId>
              <scope>providedscope>
          dependency>
      dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    3. 拷贝实体类到model工程中

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3NoMRPa-1661868406436)(images/01/img_004.png)]

    1.4、搭建项目模块web-admin
    1. 在父工程shf-parent下新建module作为子工程命名为web-admin

    2. 使用插件转成web项目

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCNcz4mz-1661868406437)(images/01/img_005.png)]

    3. 引入依赖

      <dependencies>
          <dependency>
              <groupId>com.atguigugroupId>
              <artifactId>common-utilartifactId>
              <version>1.0version>
          dependency>
          <dependency>
              <groupId>com.atguigugroupId>
              <artifactId>modelartifactId>
              <version>1.0version>
          dependency>
      dependencies>
      
      <build>
          <plugins>
              <plugin>
                  <groupId>org.eclipse.jettygroupId>
                  <artifactId>jetty-maven-pluginartifactId>
                  <version>9.4.15.v20190215version>
                  <configuration>
                      
                      <scanIntervalSeconds>2scanIntervalSeconds>
                      <webAppConfig>
                          
                          <contextPath>/contextPath>
                      webAppConfig>
                      <httpConnector>
                          
                          <port>8000port>
                      httpConnector>
                  configuration>
              plugin>
          plugins>
      build>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34

      说明:web容器我们使用jetty,与tomcat一样,jetty更轻量级。

    2、配置SSM环境

    操作模块:web-admin

    2.1、添加日志文件

    在resources目录添加:

    logback.xml

    
    <configuration debug="false">
    
        
        <property name="LOG_HOME" value="logs" />
    
        
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            encoder>
        appender>
        
        <root level="DEBUG">
            <appender-ref ref="STDOUT" />
        root>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2.2、SSM分层

    ssm分为三层:

    ​ controller、service与dao层

    我们为每一层分配添加一个配置文件,方便配置文件管理:

    ​ spring-mvc.xml

    ​ spring-service.xml

    ​ spring-persist.xml

    2.3、添加持久层配置文件

    在resources目录下创建spring目录,在目录中添加:spring-persist.xml:

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
    
        
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
            <property name="username" value="${datasource.username}" />
            <property name="password" value="${datasource.password}" />
            <property name="driverClassName" value="${datasource.driverClassName}" />
            <property name="url" value="${datasource.url}" />
        bean>
    
        
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            
            <property name="typeAliasesPackage" value="com.atguigu.entity">property>
            <property name="configuration">
                <bean class="org.apache.ibatis.session.Configuration">
                    
                    <property name="mapUnderscoreToCamelCase" value="true"/>
                bean>
            property>
            <property name="mapperLocations">
                <array>
                    <value>classpath:mappers/*.xmlvalue>
                array>
            property>
    
            
            <property name="plugins">
                <array>
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <props>
                                
                                <prop key="reasonable">trueprop>
                                
                                
                                <prop key="helperDialect">mysqlprop>
                            props>
                        property>
                    bean>
                array>
            property>
        bean>
        
        <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.atguigu.mapper"/>
        bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    在resources目录中添加jdbc.properties文件

    datasource.username=root
    datasource.password=123456
    datasource.url=jdbc:mysql://localhost:3306/db_house?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    datasource.driverClassName=com.mysql.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4

    创建映射配置文件存放文件夹:在resources目录添加:mappers文件夹

    2.4、添加service层配置文件

    在resources/spring目录添加:spring-service.xml:

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        <context:component-scan base-package="com.atguigu.service"/>
        
        <import resource="classpath:spring/spring-persist.xml"/>
        
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        bean>
        <tx:annotation-driven transaction-manager="transactionManager"/>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2.5、添加controller层配置文件

    在resources/spring目录添加:spring-mvc.xml

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd
                               http://www.springframework.org/schema/context
                               https://www.springframework.org/schema/context/spring-context.xsd
                               http://www.springframework.org/schema/mvc
                               https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="com.atguigu">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        context:component-scan>
        
        <mvc:default-servlet-handler />
        
        <mvc:annotation-driven>
            <mvc:message-converters register-defaults="true">
                
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8value>
                            <value>application/jsonvalue>
                        list>
                    property>
                bean>
            mvc:message-converters>
        mvc:annotation-driven>
        
        <bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
            
            <property name="prefix" value="/WEB-INF/templates/">property>
            
            <property name="suffix" value=".html">property>
            
            <property name="characterEncoding" value="UTF-8">property>
            
            <property name="cacheable" value="false">property>
            
            <property name="templateMode" value="LEGACYHTML5">property>
        bean>
        
        <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
            
            <property name="characterEncoding" value="UTF-8">property>
            
            <property name="templateEngine" ref="templateEngine"/>
        bean>
        <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
            
            <property name="templateResolver" ref="templateResolver">property>
        bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    2.6、修改web.xml文件
    
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             version="2.5">
        
        <servlet>
            <servlet-name>dispatcherServletservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:spring/spring-mvc.xmlparam-value>
            init-param>
            <load-on-startup>1load-on-startup>
        servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServletservlet-name>
            <url-pattern>/url-pattern>
        servlet-mapping>
    
        
        <context-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:spring/spring-service.xmlparam-value>
        context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
        listener>
    
        
        
        <filter>
            <filter-name>CharacterEncodingFilterfilter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
            
            <init-param>
                <param-name>encodingparam-name>
                <param-value>UTF-8param-value>
            init-param>
            
            <init-param>
                <param-name>forceRequestEncodingparam-name>
                <param-value>trueparam-value>
            init-param>
            
            <init-param>
                <param-name>forceResponseEncodingparam-name>
                <param-value>trueparam-value>
            init-param>
        filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    3、测试SSM环境

    我们用户角色为例,获取全部角色数据在页面显示。以下操作是在web-admin工程中

    3.1、创建RoleMapper

    com.atguigu.mapper

    package com.atguigu.mapper;
    import com.atguigu.entity.Role;
    import java.util.List;
    public interface RoleMapper {
        List<Role> findAll();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.2、创建RoleMapper.xml映射配置文件

    resources/mappers目录中

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mapper.RoleMapper">
        
        <sql id="column">
            select id,role_name,role_code,description,create_time,update_time,is_deleted
        sql>
        <select id="findAll" resultType="Role">
            <include refid="column">include>
            from acl_role
            where is_deleted = 0
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    3.3、创建RoleService接口

    com.atguigu.service

    package com.atguigu.service;
    import com.atguigu.entity.Role;
    import java.util.List;
    public interface RoleService {
        List<Role> findAll();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3.4、创建RoleServiceImpl实现类

    com.atguigu.service.impl

    package com.atguigu.service.impl;
    import com.atguigu.mapper.RoleMapper;
    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 RoleMapper roleMapper;
       public List<Role> findAll() {
          return roleMapper.findAll();
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    3.5、创建RoleController类

    com.atguigu.controller

    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.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import java.util.List;
    @Controller
    @RequestMapping(value="/role")
    public class RoleController {
       @Autowired
       private RoleService roleService;
       private final static String PAGE_INDEX = "role/index";
       /** 
        * 列表
        * @param model
        * @return
        */
       @RequestMapping
       public String index(Model model) {
          List<Role> list = roleService.findAll();
          model.addAttribute("list", list);
          return PAGE_INDEX;
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    3.6、创建数据显式页面

    WEB-INF/templates/role目录中创建index.html

    DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
        <head>
            <meta charset="UTF-8">
            <title>Titletitle>
        head>
        <body>
            <table>
                <tr th:each="item,it : ${list}">
                    <td class="text-center" th:text="${it.count}">11td>
                    <td th:text="${item.roleName}">22td>
                    <td th:text="${item.roleCode}">33td>
                    <td th:text="${item.description}">33td>
                    <td th:text="${#dates.format(item.createTime,'yyyy-MM-dd HH:mm:ss')}" >33td>
                tr>
            table>
        body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    3.7、部署web-admin项目

    第一步:

    第二步:

    3.8、访问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTSt9d6w-1661868406438)(images/01/img_008.png)]

  • 相关阅读:
    响应式UI组件集DevExtreme v22.1.5,9月全新发布!
    并网型虚拟同步发电机控制仿真(Matlab&simulink仿真实现)
    基于CSS两种菜单创建方式
    苹果录音删除了可以恢复吗?请收藏好这些方法!
    MySQL数据库之索引
    PostgreSQL 窗口函数汇总
    SQL优化
    使用Object.key和delete来将对象中值为空的属性删除。
    2-MySQL的基本操作记录
    Jmeter系列- 详解 CSV 数据文件设置
  • 原文地址:https://blog.csdn.net/lbw18/article/details/126613761