SSM商城项目实战:客户管理

2023-11-11

SSM商城项目实战:客户管理

1. 项目背景和需求分析

在一个电商平台中,客户管理是非常重要的一环。通过对客户信息的管理,可以更好地了解客户需求,提供个性化的服务,增强客户满意度。本项目旨在实现一个简单的客户管理功能,包括客户信息的添加、修改、删除和查询等操作。

2. 技术选型和准备工作

本项目使用SSM(Spring+SpringMVC+MyBatis)框架进行开发,数据库采用MySQL。在开始之前,需要准备好以下环境和工具:

  • JDK 8+
  • Eclipse 或者 IntelliJ IDEA
  • Maven
  • Tomcat
  • MySQL

3. 数据库设计和创建

在MySQL中创建一个名为customer的数据库,并创建一个名为customer_info的表,用于存储客户信息。表结构如下:

CREATE TABLE `customer_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` int(11) NOT NULL,
  `gender` varchar(10) NOT NULL,
  `email` varchar(50) NOT NULL,
  `phone` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. 项目搭建和配置

4.1 创建Maven项目

在Eclipse或者IntelliJ IDEA中创建一个Maven项目,添加以下依赖:

<!-- Spring -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.9</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.9</version>
</dependency>

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>

<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

4.2 配置Spring和MyBatis

src/main/resources目录下创建一个spring-config.xml文件,配置Spring和MyBatis的相关组件和属性。

<!-- spring-config.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: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/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/tx
                           http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 数据源配置 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/customer?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC" />
        <property name="username" value="root" />
        <property name="password" value="password" />
    </bean>
    
    <!-- MyBatis配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
    
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>
    
    <!-- 扫描Mapper接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.mapper" />
    </bean>
    
    <!-- 开启事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <!-- 扫描Service组件 -->
    <context:component-scan base-package="com.example.service" />
    
</beans>

4.3 创建实体类和Mapper接口

src/main/java目录下创建一个com.example.entity包,并在该包下创建一个Customer实体类,用于封装客户信息。

public class Customer {
    private Integer id;
    private String name;
    private Integer age;
    private String gender;
    private String email;
    private String phone;
    // 省略getter和setter方法
}

src/main/java目录下创建一个com.example.mapper包,并在该包下创建一个CustomerMapper接口,用于定义对客户信息的数据库操作。

public interface CustomerMapper {
    void addCustomer(Customer customer);
    void updateCustomer(Customer customer);
    void deleteCustomer(Integer id);
    Customer getCustomer(Integer id);
    List<Customer> getAllCustomers();
}

4.4 创建Mapper映射文件

src/main/resources目录下创建一个mapper目录,并在该目录下创建一个CustomerMapper.xml文件,用于定义SQL语句和映射关系。

<!-- CustomerMapper.xml -->
<mapper namespace="com.example.mapper.CustomerMapper">
    
    <insert id="addCustomer" parameterType="com.example.entity.Customer">
        INSERT INTO customer_info (name, age, gender, email, phone)
        VALUES (#{name}, #{age}, #{gender}, #{email}, #{phone})
    </insert>
    
    <update id="updateCustomer" parameterType="com.example.entity.Customer">
        UPDATE customer_info
        SET name = #{name}, age = #{age}, gender = #{gender}, email = #{email}, phone = #{phone}
        WHERE id = #{id}
    </update>
    
    <delete id="deleteCustomer" parameterType="java.lang.Integer">
        DELETE FROM customer_info
        WHERE id = #{id}
    </delete>
    
    <select id="getCustomer" parameterType="java.lang.Integer" resultType="com.example.entity.Customer">
        SELECT * FROM customer_info
        WHERE id = #{id}
    </select>
    
    <select id="getAllCustomers" resultType="com.example.entity.Customer">
        SELECT * FROM customer_info
 customerMapper.addCustomer(customer);
    }
    
    @Override
    public void updateCustomer(Customer customer) {
        customerMapper.updateCustomer(customer);
    }
    
    @Override
    public void deleteCustomer(Integer id) {
        customerMapper.deleteCustomer(id);
    }
    
    @Override
    public Customer getCustomer(Integer id) {
        return customerMapper.getCustomer(id);
    }
    
    @Override
    public List<Customer> getAllCustomers() {
        return customerMapper.getAllCustomers();
    }
}

4.6 创建Controller类

src/main/java目录下创建一个com.example.controller包,并在该包下创建一个CustomerController类,用于处理客户信息的请求。

@Controller
@RequestMapping("/customer")
public class CustomerController {
    
    @Autowired
    private CustomerService customerService;
    
    @RequestMapping("/add")
    public String addCustomer(Customer customer) {
        customerService.addCustomer(customer);
        return "redirect:/customer/list";
    }
    
    @RequestMapping("/update")
    public String updateCustomer(Customer customer) {
        customerService.updateCustomer(customer);
        return "redirect:/customer/list";
    }
    
    @RequestMapping("/delete/{id}")
    public String deleteCustomer(@PathVariable("id") Integer id) {
        customerService.deleteCustomer(id);
        return "redirect:/customer/list";
    }
    
    @RequestMapping("/get/{id}")
    public String getCustomer(@PathVariable("id") Integer id, Model model) {
        Customer customer = customerService.getCustomer(id);
        model.addAttribute("customer", customer);
        return "customer";
    }
    
    @RequestMapping("/list")
    public String getAllCustomers(Model model) {
        List<Customer> customers = customerService.getAllCustomers();
        model.addAttribute("customers", customers);
        return "customerList";
    }
}

4.7 创建视图文件

src/main/webapp/WEB-INF/views目录下创建一个customer.jsp文件,用于显示单个客户信息。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Customer</title>
</head>
<body>
    <h1>Customer Information</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
            <th>Email</th>
            <th>Phone</th>
        </tr>
        <tr>
            <td>${customer.id}</td>
            <td>${customer.name}</td>
            <td>${customer.age}</td>
            <td>${customer.gender}</td>
            <td>${customer.email}</td>
            <td>${customer.phone}</td>
        </tr>
    </table>
</body>
</html>

src/main/webapp/WEB-INF/views目录下创建一个customerList.jsp文件,用于显示客户列表。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Customer List</title>
</head>
<body>
    <h1>Customer List</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <th>Gender</th>
            <th>Email</th>
            <th>Phone</th>
            <th>Action</th>
        </tr>
        <c:forEach items="${customers}" var="customer">
            <tr>
                <td>${customer.id}</td>
                <td>${customer.name}</td>
                <td>${customer.age}</td>
                <td>${customer.gender}</td>
                <td>${customer.email}</td>
                <td>${customer.phone}</td>
                <td>
                    <a href="/customer/get/${customer.id}">View</a>
                    <a href="/customer/delete/${customer.id}">Delete</a>
                </td>
            </tr>
        </c:forEach>
    </table>
    <br>
    <a href="/customer/add">Add Customer</a>
</body>
</html>

4.8 创建Web配置类

src/main/java目录下创建一个com.example.config包,并在该包下创建一个WebConfig类,用于配置Web相关的内容。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
    
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }
}

4.9 创建应用启动类

src/main/java目录下创建一个com.example包,并在该包下创建一个Application类,用于启动应用。

@SpringBootApplication
@Import(WebConfig.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4.10 编译和运行

使用Maven编译项目,并使用Spring Boot插件运行应用。

mvn clean package
mvn spring-boot:run

访问http://localhost:8080/customer/list,即可看到客户列表页面。

在本教程中,我们学习了如何使用Spring Boot和Spring MVC构建一个简单的客户管理系统。我们了解了以下内容:

  1. 创建一个Spring Boot项目,并添加所需的依赖。
  2. 创建一个Customer实体类,用于表示客户信息。
  3. 创建一个CustomerService接口和CustomerServiceImpl实现类,用于处理客户相关的业务逻辑。
  4. 创建一个CustomerController类,用于处理客户相关的请求和响应。
  5. 创建视图文件,用于显示客户信息和客户列表。
  6. 创建Web配置类,用于配置视图解析器和静态资源处理器。
  7. 创建应用启动类,用于启动应用。

通过完成这个项目,我们可以学习到如何使用Spring Boot和Spring MVC来构建一个简单的Web应用,并了解到了一些常用的注解和配置。希望这个教程对你有所帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSM商城项目实战:客户管理 的相关文章

  • 如何使用 Spring AOP 建议静态方法?

    在执行类的静态方法之前和之后需要完成一些日志记录 我尝试使用 Spring AOP 来实现这一点 但它不起作用 而对于正常方法来说它起作用 请帮助我理解如何实现这一点 如果可以使用注释来完成 那就太好了 也许您应该在使用 Spring AO
  • Spring:如何使用 GenericDao 获取多个数据源?

    我有一个使用 Spring 3 1 1 的网络应用程序 我们有一个使用 JdbcTemplate 的 genericDao 数据源在 GenericDaoImpl 中像这样注入 public class GenericDaoImpl
  • Spring Security 上的组和 acl

    我想使用 Spring Security 来管理用户 组和权限 我想使用 ACL 来保护我的域对象 但我找不到将组分配给 acl 的方法 例如 我有用户和组 每个组可以拥有以下证券 管理论坛 可以是类似的角色ROLE FORUM MANAG
  • javax.faces.context.FacesContext.isReleased(FacesContext.java:609) 处的 java.lang.UnsupportedOperationException

    我正在集成 SWF 2 2 1 Primefaces 2 2 1 JSF 2 Spring Security 3 Spring 3 1 0M1 我能够访问 Spring web flow xml 中提到的第一页 但出现以下错误 com su
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 将对象直接存储到 ValueStack/ActionContext 的目的是什么?

    根据我的研究 我看到了诸如
  • 如何以编程方式创建 Spring 上下文?

    有谁知道是否有任何方法可以以编程方式创建 bean 上下文 我希望能够做类似的事情 ConfigurableApplicationContext c new ConfigurableApplicationContext BeanDefini
  • Spring Boot 模板未解决

    我正在尝试使用 Spring Boot 和 Thymeleaf 构建一个独立的 Web 应用程序 该应用程序在 IntelliJ IDEA 中运行良好 但我无法单独运行该 jar 显然模板不包括在内 我的项目结构如下 src main ja
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 使用 Hibernate 和 MySQL、全局和本地进行 Spring 事务管理

    我正在使用 MySQL Server 5 1 Spring 3 0 5 和 Hibernate 3 6 开发 Web 应用程序 我使用 Springs 事务管理 我是新手 所以如果我问一个容易回答的问题 请耐心等待 1 我读到了有关全局 x
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 无法验证 Spring Security 中 url 模式的角色

    我正在使用 spring security 3 1 7 RELEASE 和 spring 3 2 13 RELEASE 我的 spring security xml 中有如下条目
  • 使用@Transactional注解批量插入

    在我的 Spring 应用程序中 我想一次性在数据库中插入近 1500 条记录 我在后端使用 Spring 4 X 和普通休眠 在我的服务层中 我使用 Transactional 注释 现在 在某个时间点之后插入记录时 我遇到内存不足错误
  • 什么是春季里程碑?

    我必须学习使用 Maven 和 Spring 在网络上 我在不同的地方看到了术语 spring里程碑 和 spring里程碑存储库 但这是一个里程碑吗 我用谷歌搜索了一下 但没有找到满足我好奇心的定义 谁能帮我 里程碑是项目管理术语 htt
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • Spring Web应用程序在启动时从数据库初始化

    Spring 3 1 汤姆猫 我这里有一个设计问题 数据库中已指定一组类别 这些类别可以被认为是全局的 因为它们可以在整个网络应用程序中使用 我想做的是在服务器启动时读取这些类别并用 Java 填充某种类型的集合 只需要在启动时从数据库读取
  • 无法使用注释从 .properties 文件中提取值

    我想通过 properties 文件配置我的 bean 字符串字段 但它不会替换 value 键 意味着它会回显 value 字符串 我的代码如下 主要类别 public class Main public static void main
  • Spring Data JPA,对多对多实体的一个属性的更改错误地显示在共享它的所有其他实体上

    当我更改实体的一个属性时 使用该实体的每个其他实体也会以某种方式更改它 我有三个实体 如下所示 学生和课程之间需要有多对多的关系 课程需要和课程讲座有一对多的关系 当我通过 Transactional 更改属于特定学生的课程或课程讲座时st
  • 如何在spring mvc框架中运行后台进程

    我有一个网络应用程序 使用 spring mvc 框架 它使得以下内容 用户将文件上传到服务器 立即进入成功页面 使用该文件运行后台进程 那么 我如何使用 spring mvc 框架来做到这一点呢 先感谢您 使用异步标记方法 你在这里有例子

随机推荐

  • VS2015下封装Qt ui界面为dll的做法

    VS2015下封装Qt ui文件为dll的做法 最近被要求将以前项目的比较复杂的ui界面及其内部函数封装成dll 在网上查阅了一些资料 发现大部分要么是vs封装qt无界面的 要么是qt creator封装成dll的 有一篇较好的参考是htt
  • elasticsearch-head如何连接设置密码的elasticsearch

    先修改配置 在elasticsearch yml文件中加入以下配置 配置开启跨域 http cors enabled true 配置允许任何域名访问 http cors allow origin 设置密码后的访问配置 http cors a
  • defaulted函数和deleted函数

    Defaulted 函数 背景问题 C 的类有四类特殊成员函数 它们分别是 默认构造函数 析构函数 拷贝构造函数以及拷贝赋值运算符 如果程序员没有显式地为一个类定义某个特殊成员函数 而又需要用到该特殊成员函数时 则编译器会隐式的为这个类生成
  • 完整NFT Web开发

    完整NFT Web开发课程 自互联网早期以来 NFT 作为最具颠覆性的技术 区块链 的一部分 正在改变世界开展业务的方式 你可以构建和学习如何使用它们来塑造现代数字艺术 游戏 和网络应用程序 本课程教你如何从头开始深入构建 NFT 市场 以
  • 解决Nginx的location中root与alias区别——配置找不到路径的原因

    要理解root与alias的区别 例一 注意location中的配置 server listen 8080 server name localhost location root html index index html index ht
  • Java dom4j如何获取,添加,删除,查找,设置Element属性呢?

    转自 Java dom4j如何获取 添加 删除 查找 设置Element属性呢 下文讲述dom4j操作Element属性的方法分享 如下所示 取得某节点下的某属性 Element root document getRootElement A
  • 24.绳子切割

    目录 题目 Description Input Output 思路 注意事项 C 完整代码 题目 Description 有N条绳子 它们的长度分别为Li Li都是正整数 如果从它们中切割出K条长度相同的绳子 绳子的长度为整数 这K条绳子每
  • Windows7不再卡五叶草,更新了bootx64.efi和bootmgfw.efi文件,支持安全启动,不用关闭安全启动和打开csm支持.

    如题 微软最近为Windows7的64位系统更新了bootx64 efi和bootmgfw efi文件 然后Windows7的64位系统就支持了更新的平台 而且支持安全启动 不用关闭安全启动和打开csm支持 已在Intel10代和12代平台
  • Gitlab----设置页面语言为简体中文

    原文链接 1 简介 gitlab为每个用户提供了个性化设置 即用户登录之后设置页面的语言之后 并不影响其他人的页面的语言 如此就解决了有的人喜欢看中文界面 有的人喜欢看英文界面 当然如果会其他国语言也可以同样设置自己喜欢的语言 2 用户登录
  • Unity动画控制

    1 Trigger控制动画状态重复播放
  • 判断一个对象是否存在某个属性

    一 OBJ hasOwnProperty 属性 返回一个布尔值 只判断该对象自身的属性 不会去查找原型链上的属性 二 OBJ 或者 OBJ 去访问该属性 如果不存在就会返回undefined 这个方法可以查找原型链上的属性 这里有一个特殊情
  • ssh免密登录,各种权限设置都无效的解决办法!

    如果失败 有可能是以下原因 1 权限问题 这个还得试试 有可能你的权限真的不对 ssh目录 以及 home 当前用户 需要700权限 参考以下操作调整 sudo chmod 700 ssh sudo chmod 700 home 当前用户
  • Python打乱数据集

    在随机划分训练集和测试集时 需要随机划分 使用这种方法 一 打乱索引 import random random seed seed index i for i in range len x train random shuffle inde
  • linux定时删除指定文件shell脚本

    vi delete sh 输入以下内容 bin bash data path home test logs expire time 1 function deletefiles for file in find 1 name Default
  • vscode安装node-snippets

    vscode安装node snippets扩展后没有代码提示问题 安装好扩展后 输入node后仍没有代码提示 需要观察自己的代码所在文件路径是否全是英文路径 然后大多都以了 如果还有不行 就尝试在设置里面输入prevent 取消下面的选中
  • windows下如何安装高版本的jaxlib

    https zhuanlan zhihu com p 498404068
  • Vue2手捏Vuex插件

    一 展示数据 state 1 plugins Vuex js let Vue class Store constructor options 1 保存数据 通过 vue 中的 data 是响应式 this vm new Vue data s
  • C语言百日刷题第九天

    前言 今天是刷题第9天 放弃不难 但坚持一定很酷 快来跟我一起刷题吧 加油 一起努力进步 C语言百日刷题第九天 前言 76 计算偶数的所有质因子 77 提取不重复的整数 78 二进制中1的个数 79 猴子分桃 80 百钱买百鸡 76 计算偶
  • Typora-Markdown 文本编辑器

    图片 md test png img src md test png height 300 时序图 实线 gt gt gt 虚线 gt gt gt 背景 rect rgb 244 244 255 end 列子 mermaid sequenc
  • SSM商城项目实战:客户管理

    SSM商城项目实战 客户管理 1 项目背景和需求分析 在一个电商平台中 客户管理是非常重要的一环 通过对客户信息的管理 可以更好地了解客户需求 提供个性化的服务 增强客户满意度 本项目旨在实现一个简单的客户管理功能 包括客户信息的添加 修改