【SSM作品项目】在线超市的实现教程

【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>-->
      <!--  &lt;!&ndash; https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin &ndash;&gt;-->
      <!--  <groupId>org.apache.tomcat.maven</groupId>-->
      <!--  <artifactId>tomcat7-maven-plugin</artifactId>-->
      <!--  <version>2.1</version>-->
      <!--  <configuration>-->
      <!--    &lt;!&ndash;解决get乱码&ndash;&gt;-->
      <!--    <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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值