【ssm项目】在线商品管理
实现的功能
- 登录,注册,退出登录
- 管理员和用户的登录区分
- 商品页面:所有商品的分页展示,查询,购买,加入购物车操作
- 购物车页面:所有购物车商品的分页展示,详情页,移除购物车商品,购买购物车中的商品,清空购物车(购买购物车中的所有商品)
- 购物记录页面:查看购物详细信息,删除购物记录
- 修改密码页面:修改秘密功能
- 管理员的商品页面:对所有的商品进行增删查改
- 管理员的用户页面:对所有用户进行增删查改
- 管理员的交易记录页面:对所有的交易记录进行查看和删除操作
ssm项目的整合配置
MyBatis的配置类
MybatisConfig
@MapperScan("com.mapper") //扫描mapper对象,交给spring管理
public class MyBatisConfig {
// 配置分页插件拦截器
@Bean
public PageInterceptor pageInterceptor(){
PageInterceptor pageInterceptor=new PageInterceptor();
//分页插件配置
Properties properties=new Properties();
properties.setProperty("value","true");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
@Autowired
private PageInterceptor pageInterceptor;
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage("com.pojo");
//将分页拦截器插件交给mybatis
sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor});
return sqlSessionFactoryBean;
}
}
SpringMVC的配置类
SpringMvcConfig
@Configuration
@ComponentScan("com.controller")
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
//开启静态资源的释放
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){
configurer.enable();
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setSuffix(".jsp");
registry.viewResolver(viewResolver);
}
}
Spring的配置类
SpringConfig
在这里插入代码片@Configuration //声明当前类是一个配置类
@ComponentScan("com.service") //注解扫描
@Import({MyBatisConfig.class,JdbcConfig.class}) //导入其他配置类
@EnableTransactionManagement
public class SpringConfig {
//事务管理器的名字
@Bean
public DataSourceTransactionManager TransactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
ServletConfigInitConfig
public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
项目结构
主要内容
pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Model01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Model01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<!--web工程-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--dao层-->
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
<!--el表达式需要的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<!--<scope>provided</scope>-->
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<!--spring的ioc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
<!-- spring的aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.22</version>
</dependency>
<!-- spring的jdbc相关 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.23</version>
</dependency>
<!-- spring的事务相关 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.15</version>
</dependency>
<!-- spring整合单元测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.22</version>
</dependency>
<!--spring整合mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
<build>
<finalName>Model01</finalName>
<plugins>
<!--<plugin>-->
<!-- <!– https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin –>-->
<!-- <groupId>org.apache.tomcat.maven</groupId>-->
<!-- <artifactId>tomcat7-maven-plugin</artifactId>-->
<!-- <version>2.1</version>-->
<!-- <configuration>-->
<!-- <!–解决get乱码–>-->
<!-- <uriEncoding>utf-8</uriEncoding>-->
<!-- <port>8081</port>-->
<!-- <path>/</path>-->
<!-- </configuration>-->
<!--</plugin>-->
</plugins>
</build>
</project>
UserMapper.java
package com.mapper;
import com.github.pagehelper.Page;
import com.pojo.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
public User findUserByPhoneAndPassword(User user);
public User findUserByPhone(User user);
public String findUserRole(User user);
public Page<User> selectUser();
public Page<User> searchUser(@Param("name")String name,
@Param("phone")String phone,
@Param("address")String address);
public Integer addUser(User user);
public User queryUser(Integer id);
public Integer editUser(User user);
public Integer deleteUser(Integer id);
public Integer changePasswordById(User user);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
<resultMap id="user" type="com.pojo.User">
<result property="id" column="user_id"></result>
<result property="name" column="user_name"></result>
<result property="phone" column="user_phone"></result>
<result property="password" column="user_password"></result>
<result property="address" column="user_address"></result>
<result property="role" column="user_role"></result>
<result property="status" column="user_status"></result>
</resultMap>
<insert id="addUser">
insert into user
values (#{id}, #{name}, #{phone}, #{password}, #{address}, #{role}, #{status})
</insert>
<select id="findUserByPhoneAndPassword" resultMap="user">
select *
from user
where user_phone = #{phone}
and user_password = #{password}
and user_status = '1'
</select>
<select id="findUserByPhone" resultMap="user">
select *
from user
where user_phone = #{phone}
and user_status = '1'
</select>
<select id="findUserRole" resultType="String">
select user_role from user where
</select>
<select id="selectUser" resultMap="user">
select *
from user
where user_status = 1
</select>
<select id="searchUser" resultMap="user">
select * from user
<where>
<if test="name!=null and name.trim()!='' ">
and user_name like concat('%',#{name},'%')
</if>
<if test="phone!=null and phone.trim()!='' ">
and user_phone like concat('%',#{phone},'%')
</if>
<if test="address!=null and address.trim()!='' ">
and user_address like concat('%',#{address},'%')
</if>
<if test="true">
and user_status=1
</if>
</where>
</select>
<select id="queryUser" resultMap="user">
select *
from user
where user_id = #{id} and user_status=1
</select>
<update id="editUser" parameterType="user">
update user set user_name=#{name},user_phone=#{phone},user_password=#{password},
user_address=#{address},user_role=#{role}
where user_id=#{id} and user_status=1
</update>
<update id="deleteUser">
update user set user_status=0 where user_id = #{id}
</update>
<update id="changePasswordById">
update user set user_password=#{password} where user_id = #{id}
</update>
</mapper>
UserService.java
package com.service;
import com.github.pagehelper.PageInfo;
import com.pojo.User;
public interface UserService {
public User checkPhoneAndPassword(User user);
public User checkPhone(User user);
public PageInfo<User> selectUser(Integer pageNum, Integer PageSize);
public PageInfo<User> searchUser(String name,String phone,String address,Integer pageNum,Integer pageSize);
public Integer addUser(User user);
public User queryUser(Integer id);
public Integer editUser(User user);
public Integer deleteUser(Integer id);
public Integer changePasswordById(User user);
}
UserServiceImpl.java
package com.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mapper.UserMapper;
import com.pojo.User;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired(required = false)
private UserMapper userMapper;
@Override
public User checkPhoneAndPassword(User user) {
return userMapper.findUserByPhoneAndPassword(user);
}
@Override
public User checkPhone(User user) {
return userMapper.findUserByPhone(user);
}
@Override
public PageInfo<User> selectUser(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<User> list=userMapper.selectUser();
PageInfo<User> page=new PageInfo<>(list,3);
return page;
}
@Override
public PageInfo<User> searchUser(String name, String phone, String address, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<User> list=userMapper.searchUser(name,phone,address);
PageInfo<User> page=new PageInfo<>(list,3);
return page;
}
@Override
public Integer addUser(User user) {
return userMapper.addUser(user);
}
@Override
public User queryUser(Integer id) {
return userMapper.queryUser(id);
}
@Override
public Integer editUser(User user) {
return userMapper.editUser(user);
}
@Override
public Integer deleteUser(Integer id) {
return userMapper.deleteUser(id);
}
@Override
public Integer changePasswordById(User user) {
return userMapper.changePasswordById(user);
}
}
UserController
package com.controller;
import com.entity.Result;
import com.github.pagehelper.PageInfo;
import com.pojo.User;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;
@Controller
@RequestMapping("/admin")
public class UserController {
@Autowired
public UserService userService;
@RequestMapping("/login")
public String login(User user, HttpServletRequest request){
User userInfo=userService.checkPhoneAndPassword(user);
User userPhone=userService.checkPhone(user);
if (userInfo!=null) {
request.getSession().setAttribute("USER_SESSION",userInfo);
request.removeAttribute("usernameError");
request.removeAttribute("passwordError");
String role=userInfo.getRole();
if("admin".equals(role)){
return "redirect:adminPage";
}else {
return "redirect:userPage";
}
}else if(userInfo==null && userPhone!=null){
request.removeAttribute("usernameError");
request.setAttribute("passwordError","用户密码错误");
return "login";
}else{
request.setAttribute("usernameError","用户电话错误");
request.setAttribute("passwordError","用户密码错误");
return "login";
}
}
@RequestMapping("/register")
public String register(String username,String phone,String password,String passwordAgain,String address,HttpServletRequest request){
if(password.equals(passwordAgain)){
User user=new User();
user.setName(username);
user.setPhone(phone);
user.setPassword(password);
user.setAddress(address);
user.setRole("customer");
user.setStatus(1);
if(userService.checkPhone(user)==null){
Integer nums = userService.addUser(user);
if(nums>0) {
request.setAttribute("usernameError","请登录");
return "login";
}else {
request.setAttribute("usernameError","注册错误,请重新注册");
return "register";
}
}else {
request.setAttribute("usernameError","电话已经注册过了,请重新注册");
return "register";
}
}else {
request.setAttribute("usernameError","两次输入的密码不一致");
return "register";
}
}
@RequestMapping("/logout")
public String logout(HttpSession session){
session.invalidate();
return "login";
}
@RequestMapping("/changePassword")
public String changePassword(){
return "changePassword";
}
@RequestMapping("/changePasswordSubmit")
@ResponseBody
public Result changePasswordSubmit(@RequestBody Map<String,Object> map, HttpSession session){
String oldPassword= (String) map.get("oldPassword");
String newPassword= (String) map.get("newPassword");
String newPasswordAgain= (String) map.get("newPasswordAgain");
User user = (User) session.getAttribute("USER_SESSION");
if(oldPassword.equals(newPassword)){
return new Result(true,"新密码不能和旧密码相同");
}else if(!oldPassword.equals(newPassword) && !newPassword.equals(newPasswordAgain)){
return new Result(true,"两次新密码不一致");
}else if(!oldPassword.equals(newPassword) && newPassword.equals(newPasswordAgain)){
user.setPassword(newPassword);
Integer nums=userService.changePasswordById(user);
if(nums>0)return new Result(true,"修改成功");
else return new Result(true,"修改失败");
}else {
return new Result(true,"修改失败,未知错误");
}
}
@RequestMapping("/adminPage")
public String adminPage(){
return "systemAdmin";
}
@RequestMapping("/userPage")
public String userPage(){
return "customer";
}
@RequestMapping("select/user/{pageNum}")
public ModelAndView select(@PathVariable Integer pageNum){
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("userList");
System.out.println(pageNum);
int pageSize=3;
PageInfo<User> page=userService.selectUser(pageNum,pageSize);
modelAndView.addObject("page",page);
return modelAndView;
}
@RequestMapping("/search/user/{pageNum}")
public ModelAndView searchUser(String key,String value,@PathVariable("pageNum") Integer pageNum){
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("userList");
String name = null;
String phone = null;
String address =null;
switch (key){
case "name": name=value;break;
case "phone": phone=value;break;
case "address": address=value;break;
}
int pageSize=4;
PageInfo<User> page=userService.searchUser(name,phone,address,pageNum,pageSize);
modelAndView.addObject("page",page);
return modelAndView;
}
@RequestMapping("/add/user")
@ResponseBody
public Result addUser(@RequestBody User user){
user.setStatus(1);
Integer num=userService.addUser(user);
if(num>0) return new Result(true,"添加成功");
else return new Result(false,"添加失败");
}
@RequestMapping("/query/user")
@ResponseBody
public Result<User> queryUser(Integer id){
User user=userService.queryUser(id);
return new Result<>(true,"",user);
}
@RequestMapping("/edit/user")
@ResponseBody
public Result editUser(@RequestBody User user){
System.out.println(user.toString());
Integer num=userService.editUser(user);
if(num>0) return new Result(true,"修改成功");
else return new Result(false,"修改失败");
}
@RequestMapping("/delete/user")
@ResponseBody
public Result deleteUser(Integer id){
Integer num=userService.deleteUser(id);
if(num>0) return new Result(true,"删除成功");
else return new Result(false,"删除失败");
}
}
功能展示
登录
注册
管理员修改商品信息
管理员新增商品
管理员的搜索功能
管理员的用户管理页面
管理员的交易记录管理页面
用户购买商品
用户将商品加入购物车
用户的购物车页面
用户的购物记录页面
用户的修改密码页面
gitee地址:
https://gitee.com/jotoulane/ssmTest01.git