重点注意版本最好和我的pom.xml的文件一致,版本不匹配会出现很多问题!!!

 环境搭建实现内容:

  • 3-1 环境要求
  • 3-2 后端框架搭建
  • 3-3 集成单元测试及H2
  • 3-4 前端集成

3-1 环境要求:

ES服务搭建:搭建ES教程链接

Windows上搭建ES服务搭建教程(点击即可)

3-2 后端框架搭建

后端框架的搭建:

SpringBoot项目的搭建:在这基础上需要配置maven,这个百度一下maven的设置

利用idea,打开file,project,新建Spring Initialize 如下图所示,选好配置后点击next

输入group自己设置,与Artifact,注意这个不能大写,点击next

勾选所需要的设置的初始化的配置

location是自己设置存放的位置

最后finish就可以了,然后不要立即import change,改一下你的maven的路径:如下图所示。

下面开始开发项目代码:

pom.xml:把里面的properties,dependencies,都可以粘贴复制。

<?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 https://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>1.5.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>liangliang.bigData</groupId><artifactId>day-7-share</artifactId><version>0.0.1-SNAPSHOT</version><name>day-7-share</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><!-- 使用自定义ES 版本 --><elasticsearch.version>5.6.1</elasticsearch.version><!-- thymeleaf 覆盖parent 选择自己的版本 --><thymeleaf.version>3.0.3.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version><thymeleaf-extras-springsecurity4.version>3.0.2.RELEASE</thymeleaf-extras-springsecurity4.version></properties><dependencies><!-- jpa相关依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 前端模板 thymeleaf 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><version>${thymeleaf.version}</version></dependency><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring4</artifactId><version>3.0.2.RELEASE</version></dependency><!-- SpringSecurity 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- Thymeleaf方言支持SpringSecurity 依赖--><dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-springsecurity4</artifactId><version>${thymeleaf-extras-springsecurity4.version}</version></dependency><!-- redis session依赖 --><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- SpringBoot自带热加载开发工具 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.0</version></dependency><!-- 七牛依赖 --><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.2.0, 7.2.99]</version></dependency><!-- ModelMapper Simple, Intelligent, Object Mapping. --><dependency><groupId>org.modelmapper</groupId><artifactId>modelmapper</artifactId><version>1.1.0</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.0</version></dependency><!-- ES --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version></dependency><!-- Kafka --><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><!-- mail --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.2.3</version><!--<scope>system</scope>--><!--<systemPath>${project.basedir}/lib/aliyun-java-sdk-core-3.2.3.jar</systemPath>--></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0</version><!--<scope>system</scope>--><!--<systemPath>${project.basedir}/lib/aliyun-java-sdk-dysmsapi-1.0.0.jar</systemPath>--></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

首先我们需要新建三个package:

  1. config
  2. entity
  3. repesity

现在我们需要在config的包里新建一个配置类:

JPAConfig代码:
package liangliang.bigdata.config;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;/***Create by 彭亮*/
@Configuration  //成为配置类
@EnableJpaRepositories(basePackages = "liangliang.bigdata.repository") //扫描仓库类
@EnableTransactionManagement
public class JPAConfig {//建立一个数据源@Bean  //配置//配置源属性前缀,//建立好数据源需要一些属性@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}//实体类的管理工厂@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory(){//实例化实体类的管理工厂LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();//是否生成sql,这里是否,我们需要把所有的控制权掌握在自己的手里jpaVendorAdapter.setGenerateDdl(false);//设置数据源entityManagerFactory.setDataSource(dataSource());//设置刚刚sql管理entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter);//设置我们所需要寻找的实体类的包名entityManagerFactory.setPackagesToScan("liangliang.bigdata.entity");return entityManagerFactory;}//需要实例化一个事物管理的类@Bean//让spring帮我们注入之前的映射管理类public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactory);return transactionManager;}}

msql的代码在第二篇数据库设计的博客中有

application.properties:配置如下,这里就是设置mysql的配置:

application.properties:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://39.107.77.240:3306/xunwu?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=你的账号
spring.datasource.password=你的密码#帮助我们在开发过程中执行的时候jpa我们执行的sql的语句
spring.jpa.show-sql=true
#hibernate 执行只进行sql的验证,不会对sql做一些增删改的操作的
spring.jpa.hibernate.ddl-auto=validate#sql打印级别设置为debug
logging.level.org.hibernate.SQL = debug#设置session会话存储的类型
spring.session.store-type = none
#关闭http基本验证
security.basic.enabled=false

整体配置的结构如下图: 找到有箭头的这个SpringApplication的界面右击鼠标点击运行即可

增加一个路由试试效果:

启动测试接口效果:

3-3集成单元测试:使用junit集成单元测试和H2脱离数据库的耦合。

新增的文件的目录和配置文件的结构如下图:

User:

package liangliang.bigdata.entity;import javax.persistence.*;
import java.util.Date;@Entity
//注意数据库中的user是小写的,需要注意一下与数据库中做一个映射
@Table(name = "user")
public class User {@Id//因为同时兼容hibernate和H2@GeneratedValue(strategy = GenerationType.IDENTITY)//主键private Long id;//姓名private String name;//密码private String password;//邮箱private String email;//电话号码 做一个映射与数据库@Column(name = "phone_number")private  String phoneNumber;//状态码private int status;//创建时间@Column(name="create_time")private Date createTime;//最后登录时间@Column(name = "last_login_time")private Date lastLoginTime;@Column(name = "last_update_time")private Date lastUpdateTime;//头像private String avatar;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public Date getLastLoginTime() {return lastLoginTime;}public void setLastLoginTime(Date lastLoginTime) {this.lastLoginTime = lastLoginTime;}public Date getLastUpdateTime() {return lastUpdateTime;}public void setLastUpdateTime(Date lastUpdateTime) {this.lastUpdateTime = lastUpdateTime;}public String getAvatar() {return avatar;}public void setAvatar(String avatar) {this.avatar = avatar;}
}
UserRepository接口:
package liangliang.bigdata.repository;import liangliang.bigdata.entity.User;
import org.springframework.data.repository.CrudRepository;//主键里的泛型是自己定义的User实体类,第二个是主键的类型
public interface UserRepository extends CrudRepository<User,Long> {}

更新后的配置文件:

application.properties:

spring.profiles.active=dev#帮助我们在开发过程中执行的时候jpa我们执行的sql的语句
spring.jpa.show-sql=true
#hibernate 执行只进行sql的验证,不会对sql做一些增删改的操作的
spring.jpa.hibernate.ddl-auto=validate#sql打印级别设置为debug
logging.level.org.hibernate.SQL = debug#设置session会话存储的类型
spring.session.store-type = hash_map
#关闭http基本验证
security.basic.enabled=false

application-dev.properties:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://39.107.77.240:3306/xunwu?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=username
spring.datasource.password=Pengliang123!

application-test.properties:

spring.datasource.driver-class-name=org.h2.Driver
#内存模式
spring.datasource.url=jdbc:h2:mem:test
#配置h2的sql的路径
spring.datasource.schema=classpath:db/schema.sql
spring.datasource.data=classpath:db/data.sql

在test中建立两个文件夹如下图所示:

entity中建立UserRepository

UserRepository:
package liangliang.bigdata.entity;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import liangliang.bigdata.ApplicationTests;
import liangliang.bigdata.repository.UserRepository;
public class UserRepositoryTest extends ApplicationTests {@Autowiredprivate UserRepository userRepository;@Testpublic void testFindOne() {User user = userRepository.findOne(1L);Assert.assertEquals("wali", user.getName());}}
ApplicationTests:如果这个不一样,改一下名字即可
package liangliang.bigdata;import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
@Configuration
@ActiveProfiles("test")
public class ApplicationTests {}

建立test中的resource文件夹:

data.sql:

INSERT INTO `user`(`id`, `name`, `email`, `phone_number`, `password`, `status`, `last_login_time`) VALUES (1, 'wali',
'wali@imooc.com', '13888888888', 'wali', 1, NOW());
INSERT INTO `user`(`id`, `name`, `email`, `phone_number`, `password`, `status`, `last_login_time`) VALUES (2, 'admin',
'admin@imooc.com', '13999999999', '55b3d0936a3fb63168d57a6bda0ddbbf', 1, NOW());INSERT INTO `role`(`id`, `user_id`, `name`) VALUES (1, 1, 'USER');
INSERT INTO `role`(`id`, `user_id`, `name`) VALUES (2, 2, 'USER');
INSERT INTO `role`(`id`, `user_id`, `name`) VALUES (3, 3, 'ADMIN');-- address data
INSERT INTO `support_address`(`id`, `belong_to`, `en_name`, `cn_name`, `level`, `baidu_map_lng`, `baidu_map_lat`)VALUES ('4', 'bj', 'bj', '北京', 'city', '116.395645','39.929986'),('5', 'sh', 'sh', '上海', 'city', '121.487899', '31.249162'),('6', 'hb', 'sjz', '石家庄', 'city', '114.522082', '38.048958'),('7', 'hb', 'ts', '唐山', 'city', '118.183451', '39.650531'),('8', 'hb', 'hd', '邯郸', 'city', '114.482694', '36.609308'),('9', 'bj', 'dcq', '东城区', 'region', '116.42188470126446', '39.93857401298612'),('10', 'bj', 'xcq', '西城区', 'region', '116.37319010401802', '39.93428014370851'),('12', 'bj', 'hdq', '海淀区', 'region', '116.23967780102151', '40.03316204507791'),('13', 'bj', 'cpq', '昌平区', 'region', '116.21645635689414', '40.2217235498323'),('14', 'sh', 'ptq', '普陀区', 'region', '121.39844294374956', '31.263742929075534'),('15', 'sjz', 'caq', '长安区', 'region', '114.59262155387033', '38.07687479578663'),('16', 'sjz', 'qdq', '桥东区', 'region', '114.51078430496142', '38.06338975380927'),('17', 'sjz', 'qxq', '桥西区', 'region', '114.43813995531943', '38.033364550068136'),('18', 'sjz', 'xhq', '新华区', 'region', '114.4535014286928', '38.117218640478164'),('19', 'bj', 'cyq', '朝阳区', 'region', '116.52169489108084', '39.95895316640668');-- house data
INSERT INTO `house`(`id`, `title`, `price`, `area`, `room`, `floor`, `total_floor`, `watch_times`, `build_year`,`status`, `create_time`, `last_update_time`, `city_en_name`, `region_en_name`, `cover`,`direction`, `distance_to_subway`, `parlour`, `district`, `admin_id`, `bathroom`, `street`)VALUES ('15', '富力城 国贸CBD 时尚休闲 商务办公 超棒瓦力', '6200', '70', '2', '10', '20', '2', '2005', '1', '2017-09-06 18:56:14', '2017-09-15 00:26:59', 'bj', 'hdq', 'FmD3zKG-gUPOrNv0HwzZN7IbkAC_', '2', '10', '1', '融泽嘉园', '2', '0', '龙域西二路'),('16', '富力城 国贸CBD 时尚休闲 商务办公', '6300', '70', '2', '10', '20', '0', '2012', '1', '2017-09-06 19:53:35', '2017-09-11 00:35:13', 'bj', 'hdq', 'FmD3zKG-gUPOrNv0HwzZN7IbkAC_', '1', '-1', '1', '融泽嘉园', '2', '0', '龙域西二路'),('17', '二环东直门地铁站附近、王府井、天安门、国贸、三里屯、南锣鼓巷', '3000', '35', '1', '5', '10', '0', '2013', '1', '2017-09-06 20:45:35', '2017-09-11 00:35:05', 'bj', 'hdq', 'FhVdDhzVDH1dLVVx4jOaVXOCfnea', '1', '200', '0', '融泽嘉园', '2', '0', '龙域西二路'),('18', '华贸城 东向一居挑空loft 干净温馨 随时可以签约', '5700', '52', '1', '7', '20', '0', '2012', '1', '2017-09-06 21:01:02', '2017-09-11 00:35:01', 'bj', 'hdq', 'FsxiS6rOTpSg5pK7tv41e8Zpnn_c', '2', '1085', '1', '融泽嘉园', '2', '0', '龙域西二路'),('19', '望春园板楼三居室 自住精装 南北通透 采光好视野棒!', '9200', '132', '3', '6', '14', '0', '2005', '1', '2017-09-06 22:44:25', '2017-09-11 00:34:55', 'bj', 'hdq', 'Fl1lNikhmMIecbTn-JTsurxugtFU', '2', '1108', '2', '融泽嘉园', '2', '0', '龙域西二路'),('20', '高大上的整租两居室 业主诚意出租', '5400', '56', '2', '12', '20', '0', '2012', '1', '2017-09-06 23:39:50', '2017-09-11 00:34:21', 'bj', 'hdq', 'FtNl9uPM6p5PjEs8z2FnOuViNtOM', '2', '-1', '1', '融泽嘉园', '2', '0', '龙域西二路'),('21', '新康园 正规三居室 精装修 家电家具齐全', '1900', '18', '1', '13', '25', '0', '2012', '1', '2017-09-07 00:52:47', '2017-09-11 00:34:13', 'bj', 'hdq', 'Fn9sHC3Wx7qpYCmSxt-z8FZluf0Z', '3', '1302', '0', '融泽嘉园', '2', '0', '龙域西二路'),('24', '湖光壹号望京华府183-387㎡阔景大宅', '50000', '288', '5', '1', '1', '0', '2015', '1', '2017-09-07 11:42:20', '2017-09-18 20:14:14', 'bj', 'hdq', 'FvVqU8LneZZ5xaLBAOM1KXR2Pz1X', '5', '200', '3', '融泽嘉园', '2', '0', '龙域西二路');-- house_detail data
INSERT INTO `house_detail` VALUES ('21', '国贸CBD商务区,近SOHO现代城,富顿中心,富力城商业街区,乐成中心,潘家园古玩城,八王坟长途客运站,北京游乐园,经由三环路可直达首都机场。附近有双井桥南,双井桥北,双井桥东双井桥西等30多条公交站牌!\n《天安门,故宫,王府井,三里屯,前门,天坛,北海,颐和园,雍和宫,奥林匹克公园,水立方,西单,欢乐谷,燕莎商城等》知名购物区及旅游名胜古迹,是您休闲旅游及商务下榻的理想选择', '房间采光良好,落地窗外景色宜人', '房子处于北京的CBD商务中心区国贸双井!紧邻双井地铁站,步行5分钟即到!这离国贸、中央电视台、潘家园、三里屯、团结湖、日坛使馆区、儿研所、大郊亭都很近', '房子闹中取静,地理位置优越,交通方便,紧邻呼家楼地铁站和东大桥地铁站;去机场可乘坐东直门机场快轨,非常方便。购物中心有双井购物中心、国贸购物中心和侨福芳草地购物中心、三里屯购物中心等,远道而来的朋友可尽览都市璀璨!', '0', '二号院7号楼', '4', '10号线', '58', '双井', '15'), ('22', '国贸CBD商务区,近SOHO现代城,富顿中心,富力城商业街区,乐成中心,潘家园古玩城,八王坟长途客运站,北京游乐园,经由三环路可直达首都机场。附近有双井桥南,双井桥北,双井桥东双井桥西等30多条公交站牌!\n《天安门,故宫,王府井,三里屯,前门,天坛,北海,颐和园,雍和宫,奥林匹克公园,水立方,西单,欢乐谷,燕莎商城等》知名购物区及旅游名胜古迹,是您休闲旅游及商务下榻的理想选择!', '房间采光良好,落地窗外景色宜人', '房子处于北京的CBD商务中心区国贸双井!紧邻双井地铁站,步行5分钟即到', '这离国贸、中央电视台、潘家园、三里屯、团结湖、日坛使馆区、儿研所、大郊亭都很近。房子闹中取静,地理位置优越,交通方便,紧邻呼家楼地铁站和东大桥地铁站;去机场可乘坐东直门机场快轨,非常方便。购物中心有双井购物中心、国贸购物中心和侨福芳草地购物中心、三里屯购物中心等,远道而来的朋友可尽览都市璀璨!', '0', '1号院1号楼', null, null, null, null, '16'), ('24', '我和我女盆友当房东已经一年了,也是超赞房东,希望能为大家提供舒适的住所~ 房间的大门和房门都是密码门,小区有保安24小时值班,非常安全方便。 通常入住时间是下午三点,提前来的同学可以先寄存行李和洗澡哦~\n\n', '房間非常漂亮,空間很大,鵝黃色的牆壁看起來非常舒服', '位置距離地鐵站不遠', '距故宫、天安门、王府井、三里屯、簋街、南锣鼓巷等景点均可地铁半小时内到达,交通便利~', '0', '1号院2号楼', '1', '13号线', '16', '东直门', '17'), ('25', '这个经纪人很懒,没写核心卖点', '此房是一居室的格局,上下两层,面宽,房间亮堂,进门右手厨房,正前方是25平米的客厅,楼上是卧室,带洗手间! 喧闹和安静隔开,适合居住', '小区距离地铁13号线北苑站500米的距离,交通出行便利....', '小区楼下就是华贸天地娱乐街,保利电影院,眉州东坡,中信银行,麦当劳等娱乐休闲设施齐全', '0', '1号院3号楼', '1', '13号线', '11', '北苑', '18'), ('26', '这个经纪人很懒,没写核心卖点', '此房为望春园小区板楼南北通透户型,主卧客厅朝南,次卧朝北,两个客厅双卫,居住很舒适。', '距离地铁5号线立水桥南站630米,有464,465,966,081,621等多条公交线路,交通出行四通八达。', '小区旁有大型购物商场易事达,物美超市,丰宁蔬菜基地,航空总医院、安贞医院北苑分院,中国银行、中国农业银行、中国工商银行、中国交通银行、中国建设银行、招商银行分布。小区旁有天奥健身房,还有立水桥公园..', '0', '6号院1号楼', '1', '13号线', '10', '立水桥', '19'), ('27', '高大上的整租两居室 业主诚意出租\n1、客厅挑高、宽敞舒适、阳光充足 2、卧室搭配的很新颖,使用之高 3、厨房带阳台,让您和家人有足够的空间展现私家厨艺', '客厅挑高、宽敞舒适、阳光充足 2、卧室搭配的很新颖,使用之高 3、厨房带阳台,让您和家人有足够的空间展现私家厨艺', '近地铁13号线东直门站', '社区环境好,环境优美,适宜居住,人文素质高,物业管理完善; 2、属于低密度社区 ,适宜居住 3、小区的林密树多,让您感受花园一样的家', '0', '1号院5号楼', '1', '13号线', '16', '东直门', '20'), ('28', '房子是正规三室一厅一厨一卫,装修保持的不错,家电家具都齐全。\n', '房子客厅朝北面积比较大,主卧西南朝向,次卧朝北,另一个次卧朝西,两个次卧面积差不多大。', '小区出南门到8号线育新地铁站614米,交通便利,小区500米范围内有物美,三旗百汇,龙旗广场等几个比较大的商场,生活购物便利,出小区北门朝东952米是地铁霍营站,是8号线和 13号线的换乘站,同时还有个S2线,通往怀来。(数据来源百度地图)', '小区西边300米就是物美超市和三旗百汇市场(日常百货、粮油米面、瓜果蔬菜、生鲜海货等等,日常生活很便利,消费成本低),北边200米是龙旗购物广场和永辉超市(保利影院,KFC,麦当劳等,轻松满足娱乐消费)。小区里还有商店,饭店,家政等。', '0', '2号院1号楼', '1', '13号线', '9', '霍营', '21'), ('31', '懒死了 不谢', '户型介绍', '交通出行', '周边配套', '0', '3号院1号楼', '1', '13号线', '12', '望京西', '24'), ('32', '房屋描述-编辑', '户型介绍', '交通出行', '周边配套-编辑', '0', '3号院2单元1003', '1', '13号线', '8', '回龙观', '25');-- house tag data
INSERT INTO `house_tag` VALUES ('15', '18', '独立阳台'), ('15', '17', '空调'), ('16', '16', '光照充足'), ('17', '15', '随时看房'), ('17', '14', '集体供暖'), ('18', '13', '精装修'), ('19', '12', '独立卫生间'), ('19', '11', '独立阳台'), ('21', '19', '光照充足'), ('21', '20', '独立卫生间'), ('24', '10', '光照充足'), ('24', '3', '精装修'), ('24', '8', '集体供暖'), ('25', '21', '独立阳台');

schema.sql:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` INT(11) NOT NULL IDENTITY PRIMARY KEY ,`name` VARCHAR(32) NOT NULL UNIQUE ,`password` VARCHAR(32) NOT NULL ,`email` VARCHAR(32) NOT NULL UNIQUE ,`phone_number` VARCHAR(15) NOT NULL UNIQUE ,`status` INT(2) NOT NULL ,`avatar` VARCHAR(255),`create_time` DATETIME NOT NULL DEFAULT NOW(),`last_login_time` DATETIME NOT NULL ,`last_update_time` DATETIME NOT NULL DEFAULT NOW()
);DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (`id` INT(11) NOT NULL IDENTITY PRIMARY KEY ,`user_id` INT(11) NOT NULL,`name` VARCHAR(32) NOT NULL,UNIQUE (`user_id`, `name`)
);CREATE INDEX ON `role`(`user_id`);DROP TABLE IF EXISTS `support_address`;
CREATE TABLE `support_address` (`id` int(11) NOT NULL IDENTITY,`belong_to` VARCHAR(32) NOT NULL,`en_name` varchar(32) NOT NULL,`cn_name` varchar(32) NOT NULL,`level` varchar(16) NOT NULL,`baidu_map_lng` DOUBLE NOT NULL ,`baidu_map_lat` DOUBLE NOT NULL ,PRIMARY KEY (`id`)
);CREATE INDEX ON `support_address` (`belong_to`,`en_name`,`level`);DROP TABLE IF EXISTS `house`;
CREATE TABLE `house` (`id` int(11)  NOT NULL IDENTITY COMMENT 'house唯一标识',`title` varchar(32) NOT NULL,`price` int(11) NOT NULL COMMENT '价格',`area` int(11) NOT NULL COMMENT '面积',`room` int(11) NOT NULL COMMENT '卧室数量',`floor` int(11) NOT NULL COMMENT '楼层',`total_floor` int(11) NOT NULL COMMENT '总楼层',`watch_times` int(11) DEFAULT '0' COMMENT '被看次数',`build_year` int(4) NOT NULL COMMENT '建立年限',`status` int(4) NOT NULL DEFAULT '0' COMMENT '房屋状态 0-未审核 1-审核通过 2-已出租 3-逻辑删除',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`last_update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`city_en_name` varchar(32) NOT NULL COMMENT '城市标记缩写 如 北京bj',`region_en_name` varchar(32) NOT NULL COMMENT '区域标记缩写 如 朝阳区cyq',`cover` varchar(32) DEFAULT NULL COMMENT '封面',`direction` int(11) NOT NULL COMMENT '朝向',`distance_to_subway` int(11) NOT NULL DEFAULT '-1' COMMENT '距地铁距离 默认-1 附近无地铁',`parlour` int(11) NOT NULL DEFAULT '0' COMMENT '客厅数量',`district` varchar(32) NOT NULL COMMENT '所在小区',`admin_id` int(11) NOT NULL COMMENT '所属管理员id',`bathroom` int(11) NOT NULL DEFAULT '0' COMMENT '卫生间数量',`street` varchar(32) NOT NULL COMMENT '街道',PRIMARY KEY (`id`)
);DROP TABLE IF EXISTS `house_detail`;
CREATE TABLE `house_detail` (`id` int(11) NOT NULL IDENTITY,`description` varchar(255) DEFAULT NULL COMMENT '详细描述',`layout_desc` varchar(255) DEFAULT NULL COMMENT '户型介绍',`traffic` varchar(255) DEFAULT NULL COMMENT '交通出行',`round_service` varchar(255) DEFAULT NULL COMMENT '周边配套',`rent_way` int(2) NOT NULL COMMENT '租赁方式',`address` varchar(32) NOT NULL COMMENT '详细地址 ',`subway_line_id` int(11) DEFAULT NULL COMMENT '附近地铁线id',`subway_line_name` varchar(32) DEFAULT NULL COMMENT '附近地铁线名称',`subway_station_id` int(11) DEFAULT NULL COMMENT '地铁站id',`subway_station_name` varchar(32) DEFAULT NULL COMMENT '地铁站名',`house_id` int(11) NOT NULL COMMENT '对应house的id',PRIMARY KEY (`id`)
);DROP TABLE IF EXISTS `house_tag`;
CREATE TABLE `house_tag` (`house_id` int(11) NOT NULL COMMENT '房屋id',`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '标签id',`name` varchar(32) NOT NULL,PRIMARY KEY (`id`)
);

执行:下面这个界面

成功即通过测试,测试过程中使用的h2的sql语句所以静态文件得加载。

3-4 前端集成:

更新后的项目目录如下图所示:

新建一个controller文件夹,static文件夹,WebMvcConfig配置类与templates下的index.html文件:

 HomeController:
package liangliang.bigdata.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;/*** 用于访问主路径*/
@Controller
public class HomeController {@GetMapping("/")public String index(Model model) {model.addAttribute("name","无痕");return "index";}
}
WebMvcConfig:
package liangliang.bigdata.config;import org.springframework.beans.BeansException;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;@Configuration
//帮助我们获取spring的上下文
public class WebMvcConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {//私有化一个类private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//配置静态资源registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");}/*** 对模板资源进行解析* 模板资源解析器*/@Bean//做一个前缀绑定,否则找不到路径@ConfigurationProperties(prefix = "spring.thymeleaf")public SpringResourceTemplateResolver templateResolver (){//实例化一个SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();//设置spring的上下文templateResolver.setApplicationContext(this.applicationContext);return templateResolver;}/*** Thymeleaf标准方言解析器*/@Beanpublic SpringTemplateEngine templateEngine(){SpringTemplateEngine templateEngine = new SpringTemplateEngine();//配置资源解析器的引擎templateEngine.setTemplateResolver(templateResolver());//设置支持EL表达式templateEngine.setEnableSpringELCompiler(true);return templateEngine;}/*** 视图解析器*/@Beanpublic ThymeleafViewResolver viewResolver(){ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();//配置Thymeleaf标准方言解析器viewResolver.setTemplateEngine(templateEngine());return viewResolver;}}

index.html:

<!DOCTYPE html>
<html xmlns:th = "http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>七天共享云平台</title>
</head>
<body>
<span th:text="${name}"></span>
hello 无痕
</body>
</html>

更新后的两个配置文件:application-dev.properties与application.properties如下:

application-dev.properties:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://39.107.77.240:3306/xunwu?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=你的用户名
spring.datasource.password=你的数据库密码#thymeleaf
#在dev的环境下我们禁止它进行自动缓存,否则修改后不能立即看到效果
spring.thymeleaf.cache=false

application.properties:

在我访问html出了点小问题,下面解决链接:https://blog.csdn.net/qq_41479464/article/details/103054079

spring.profiles.active=dev#帮助我们在开发过程中执行的时候jpa我们执行的sql的语句
spring.jpa.show-sql=true
#hibernate 执行只进行sql的验证,不会对sql做一些增删改的操作的
spring.jpa.hibernate.ddl-auto=validate#sql打印级别设置为debug
logging.level.org.hibernate.SQL = debug#设置session会话存储的类型
spring.session.store-type = hash_map
#关闭http基本验证
security.basic.enabled=false#thymeleaf
spring.thymeleaf.mode=HTML
spring.thymeleaf.suffix=.html
spring.thymeleaf.prefix=classpath:/templates/

静态资源集成太多页面,我已经上传到博客资源链接,供下载。后期代码全部完善后,会上传到github上。

静态资源链接下载(点击

下面我们访问运行结果如下:

成功集成了SpringBoot+Thymeleaf。

上篇博客:第2章 数据库设计和需求分析

下篇博客:第4章 架构设计

BAT大牛亲授基于ElasticSearch的搜房网实战(第三章环境搭建)相关推荐

  1. BAT大牛亲授基于ElasticSearch的搜房网实战(第六章 房源信息管理模块实现上)

    从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)点击即可 静态资源集成太多页面,我已经上传到博客资源链接,供下载.后期代码全部完善后,会上传到github上. 静态资 ...

  2. BAT大牛亲授基于ElasticSearch的搜房网实战(第四章环系统架构设计与分层)

    从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)点击即可 静态资源集成太多页面,我已经上传到博客资源链接,供下载.后期代码全部完善后,会上传到github上. 静态资 ...

  3. 瓦力 - 基于ElasticSearch的搜房网实战

    为什么80%的码农都做不了架构师?>>>    课程介绍 项目设计 环境搭建 环境要求 JDK 1.8 Maven IDEA MySQL 5.5 ES 集群 Spring Boot ...

  4. BAT大牛亲授从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)

    围绕"搜索"核心业务,构建 "房屋寻租"完整前后端 业务 分角色用户入口: 普通用户/管理员用户 完善的管理功能: 后台管理/权限管理 核心功能模块: 房源浏览 ...

  5. 慕课网基于ElasticSearch的找房网实战开发企业级房屋搜索网项目学习心得(一)

    个人资源与分享网站:http://xiaocaoshare.com/ 1.技术架构 SpringBoot+Spring Data Jpa+mysql+ES+Redis+Thymeleaf+bootst ...

  6. python免费训练营教程_鹅厂大牛亲授Python零基础寒假训练营视频教程

    目录:/093 鹅厂大牛亲授python零基础寒假训练营 $ U  t  E; k6 g, M- t┣━━(补充章节)  第八章第2节-集合序列操作,遍历及推导式.mp4 . l2 A: f8 {2 ...

  7. Java多层翻页网络爬虫实战(以搜房网为例)

    目录 分析所要爬取的数据 爬虫框架 model main util parse db数据库操作 爬虫如何实现翻页地址拼接 网络爬虫如何解决主键重复问题 本文为原创博客,仅供技术学习使用.未经允许,禁止 ...

  8. 为客户万科做的sofun搜房网论坛专用顶帖群发机(C#.NET)

    为客户万科做的sofun搜房网论坛专用顶帖群发机(C#.NET)

  9. 基于30系显卡以及Ubuntu18.04系统的YOLOv3环境搭建和训练模型以及测试

    基于30系显卡以及Ubuntu18.04系统的YOLOv3环境搭建和训练模型以及测试 安装环境 下面是官网对N卡框架以及驱动和cuda版本的部分对应关系 驱动 (可以跳过这段安装,你可以在安装CUDA ...

  10. 【项目】基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析

    [项目]基于SaaS的餐掌柜项目实战 文章目录 [项目]基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析 1.1 餐饮行业分析 1.2 餐饮 ...

最新文章

  1. Springboot中实现文件上传功能
  2. linux设备和驱动注册,Linux驱动第五篇-----驱动注册和生成设备节点
  3. OpenSSL以及私有CA的搭建
  4. 谈谈对python这门课的认识_【Python公开课】1-认识Python
  5. nginx ---- 背景介绍及环境准备
  6. Flask 开发填坑
  7. 分析优秀的.NET 文档设计工具Vsdocman 7.1 软件保护技术
  8. eureka 客户端服务启动了又失败了_Spring cloud Eureka服务注册与发现详解
  9. ACM题目————STL练习之众数问题
  10. c语言编程绝对质数,c语言求绝对素数
  11. Unity 触摸屏操作(多点触摸)
  12. 计算机键盘重复设置,电脑键盘错乱怎么恢复 一键快速重新设置电脑快捷键方法...
  13. 《剑指Offer》之“平衡二叉树”
  14. 在苹果Mac上怎样对“屏幕使用时间”中请求更多时间进行响应?
  15. iOS好用的三方推荐
  16. HDU 4602 Partition 规律题
  17. 【OpenCV3图像处理】颜色空间转换(一)颜色空间分类总结
  18. php中的时间函数(如何设置时区有4种方法)------与时间相关的函数 (time、date、m‘ktime、microtime(true)、strtotime)
  19. 当前超级计算机的应用方兴未艾,(全国通用版)18版高考语文大一轮复习第2周基础组合练4...
  20. 【JAVA】-- GUI用户界面设计(面板组件、文本组件、标签组件、按钮组件、下拉框组件)

热门文章

  1. 线性插值公式简单推导
  2. 【线代】矩阵转置性质及代码证明
  3. 【拿到offer】2020农业银行校园秋季招聘面试心得
  4. 如何成为团队核心?从写出不可维护的代码开始
  5. 练习java文档Matcher
  6. 营销单页程序php,Z-blogPHP单页网站模板|产品营销单页|单品推广
  7. 矩阵求导术(二)——矩阵对矩阵的求导
  8. html 一键排版,用一键排版 排版好轻松
  9. shell脚本实现逻辑关系与、或、非
  10. solidity库的使用