SSM框架与Vue结合搭建中国传统面食网站

后端搭建(SSM框架) Spring MVC负责控制器层,处理前端请求并返回JSON数据。Spring框架管理业务逻辑层和依赖注入。MyBatis作为ORM框架,操作MySQL数据库存储面食信息。

实体类设计示例:

public class Noodle {
    private Integer id;
    private String name;
    private String origin;
    private String description;
    // 省略getter/setter
}

Mapper接口示例:

public interface NoodleMapper {
    @Select("SELECT * FROM noodles")
    List<Noodle> selectAll();
}

前端搭建(Vue) 使用Vue CLI创建项目结构,通过axios与后端交互。Element UI或Ant Design Vue提供组件库支持。

页面组件示例:

<template>
  <div>
    <h3>{{ noodle.name }}</h3>
    <p>{{ noodle.description }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      noodle: {}
    }
  },
  mounted() {
    axios.get('/noodles/1').then(res => {
      this.noodle = res.data
    })
  }
}
</script>

数据库设计要点

创建noodles表存储核心信息:

CREATE TABLE noodles (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  origin VARCHAR(100),
  description TEXT,
  image_url VARCHAR(255)
);

考虑添加分类表:

CREATE TABLE categories (
  id INT PRIMARY KEY,
  name VARCHAR(20) COMMENT '如拉面、刀削面等'
);

前后端交互实现

配置Spring MVC支持跨域:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST");
    }
}

Vue调用API示例:

methods: {
  fetchNoodles() {
    axios.get('/api/noodles')
      .then(response => {
        this.noodleList = response.data
      })
  }
}

功能模块设计

分类展示模块 实现按地域(山西、陕西等)和工艺(蒸、煮、炸)多维分类。使用Vue路由构建SPA应用:

const routes = [
  { path: '/type/:id', component: NoodleList }
]

详情页设计 包含历史渊源、制作工艺、文化内涵三部分。采用Tab组件切换内容显示:

<el-tabs v-model="activeTab">
  <el-tab-pane label="历史" name="history"></el-tab-pane>
  <el-tab-pane label="做法" name="recipe"></el-tab-pane>
</el-tabs>

部署优化方案

Nginx配置反向代理:

server {
    listen 80;
    location /api {
        proxy_pass http://backend;
    }
    location / {
        root /var/www/html;
        try_files $uri /index.html;
    }
}

采用Redis缓存热门数据:

@Cacheable(value = "noodles", key = "#id")
public Noodle getById(Integer id) {
    return noodleMapper.selectById(id);
}

扩展功能建议

用户互动系统 增加评论功能表设计:

CREATE TABLE comments (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  content TEXT,
  noodle_id INT,
  user_id INT
);

响应式设计 使用Vue响应式特性适配移动端:

<template>
  <div :class="{ 'mobile-view': isMobile }">
    <!-- 内容 -->
  </div>
</template>

<script>
export default {
  computed: {
    isMobile() {
      return window.innerWidth < 768
    }
  }
}
</script>

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐