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&allowPublicKeyRetrieval=true&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构建一个简单的客户管理系统。我们了解了以下内容:
- 创建一个Spring Boot项目,并添加所需的依赖。
- 创建一个Customer实体类,用于表示客户信息。
- 创建一个CustomerService接口和CustomerServiceImpl实现类,用于处理客户相关的业务逻辑。
- 创建一个CustomerController类,用于处理客户相关的请求和响应。
- 创建视图文件,用于显示客户信息和客户列表。
- 创建Web配置类,用于配置视图解析器和静态资源处理器。
- 创建应用启动类,用于启动应用。
通过完成这个项目,我们可以学习到如何使用Spring Boot和Spring MVC来构建一个简单的Web应用,并了解到了一些常用的注解和配置。希望这个教程对你有所帮助!