阅读 136

SSM完整项目(内含源码)

SSM完整项目(内含源码)

SSM 电影后台管理项目

概述

通过对数据库中一张表的CRUD,将相应的操作结果渲染到页面上。
笔者通过这篇博客还原了项目(当然有一些隐藏的坑),然后将该项目上传到了GithubGitee,在末尾会附上有源码地址,读者可参考。

该项目使用的是 Spring+SpringMVC+Mybaits(SSM)后端架构,POJO---Dao---Service---Controller的结构,简单易懂。

  • POJO:实体类层,封装的是数据中的设计的表对应的元素。

  • Dao:Mapper的接口以及Mapper.xml文件,实现sql操作。

  • Service:服务实现层,调用Dao层方法进行实现。

  • Controller:控制层,调用一个个Service层的实现方法完成一个个具体功能。

项目使用了前端JS检错后端JSR303参数校验,能把绝大部分的问题都包括其中。类似于输入信息错误以及输入信息不合法违规跳转等,也加入了过滤器,使用户可以有更好的体验。

电影后台管理系统的管理员在工作中需要查阅和管理如下信息:后台管理的管理员、电影信息、新闻信息以及类型信息。如下图:

1

项目展示

1 2 345678910

准备

  • 环境:

    • IDEA

    • MySQL 5.1.47

    • Tomcat 9

    • Maven 3.6

  • 要求:

    • 掌握MySQL数据库

    • 掌握Spring

    • 掌握MyBatis

    • 掌握SpringMVC

    • 掌握简单的前端知识

实现

1.创建好项目架构

先创建好com.zc.xxx路径下的文件;resources资源文件夹下的文件可以先不创建,下面会逐步创建。

2

2.SSM架构

这部分如果感兴趣,想知道具体操作,可以查看文章 《SSM整合》

3.POJO层

因为设计的数据库中有4个表,分别是:usertypenewsfilm

所以对应创建四个实体类,这里部分举例

public class user {    private Integer id;    private String username;    private String paw;    private Integer tele;    private String email;    // 有参\有参方法
    // Get\Set方法
    // toString()}

news实体类中使用了JSR303检验机制,不加注解也是可以的

public class news {    @NotNull
    private Integer ISDN;    @NotNull
    private String title;    @NotNull
    private String author;    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Past
    private Date date;    @NotNull
    private String description;    // 有参\有参方法
    // Get\Set方法
    // toString()}

在这些实体类中,我使用的是直接添加构造方法;如果觉得麻烦,可以使用Lombok插件

4.Dao层

每一个Dao类都分别对应着一个实体类的操作

Mapper接口+Mapper.xml

进行部分举例

public interface UserMapper {    /**
     * 获取用户列表
     * @return
     */
    public List<user> getUserList();    /**
     * id查用户
     * @return
     */
    public user getUserById(int id);    /**
     *  添加用户
     * @param user
     * @return
     */
   public int insertUser(user user);    /**
     * 修改用户个人信息
     * @return
     */
   public int upUser(user user);    /**
     * 修改密码
     * @param user
     * @return
     */
   public int uppaw(user user);
}

<?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.zc.Dao.UserMapper">
    <select id="getUserList" resultType="com.zc.pojo.user">
        select * from film.user    </select>
    <select id="getUserById" resultType="com.zc.pojo.user">
        select * from film.user where id=#{id}    </select>
    <insert id="insertUser" parameterType="com.zc.pojo.user" >
        insert into film.user (username,paw,tele,email) values (#{username},#{paw},#{tele},#{email})    </insert>
    <update id="upUser" parameterType="com.zc.pojo.user">
        update film.user set username = #{username},tele = #{tele},email = #{email} where id = #{id}    </update>
    <update id="uppaw" parameterType="com.zc.pojo.user">
        update film.user set paw=#{paw} where id = #{id}    </update></mapper>

5.Service层

每个Dao层也会有一个对应的Service实现层

进行部分举例

UserService

public interface UserService {   /**
    * 得到全部User数据
    * @return
    */
   public  List<user> getUserList();   /**
    * 插入一个User
    * @param user
    * @return
    */
   public int insertUser(user user);   /**
    * 更新用户信息
    * @param user
    * @return
    */
   public int upUser(user user);   /**
    * 更新用户密码
    * @param user
    * @return
    */
   public int uppaw(user user);   /**
    * 通过id查找用户
    * @param id
    * @return
    */
   public user getUserById(int id);
}

@Servicepublic class UserServiceimpl implements UserService{    @Autowired
    private UserMapper userMapper;    @Override
    public List<user> getUserList() {        return userMapper.getUserList();
    }    @Override
    public int insertUser(user user) {        return userMapper.insertUser(user);
    }    @Override
    public int upUser(user user) {        return userMapper.upUser(user);
    }    @Override
    public int uppaw(user user) {        return userMapper.uppaw(user);
    }    @Override
    public user getUserById(int id) {        return userMapper.getUserById(id);
    }
}

6.Controller层

Controller层的代码都是实现具体功能的代码

因为代码过长,在此只举例User的Controller层代码

@Controllerpublic class UserController {    @Autowired
    private   HttpServletRequest request;    @Autowired
    @Qualifier("userServiceimpl")
    private UserService userService;    /**
     * 登录
     * @param username
     * @param password
     * @param code
     * @return
     */
    @RequestMapping("/Login")
    public String getUserList(String username, String password, String code){
        List<user> userList = userService.getUserList();        for (user user : userList) {
            System.out.println(user);            if(user.getUsername().equals(username)&&user.getPaw().equals(password)){
                HttpSession session = request.getSession();
                Object attribute = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);                if(code.equals(attribute)){
                    session.setAttribute("user",user);                    return "main.jsp";
                }else {
                    request.setAttribute("mgs", "验证码错误");                    return "index.jsp";
                }
            }

        }        //  System.out.println(user.getUsername()+"-----"+user.getPaw());
        request.setAttribute("mgs", "用户名或密码错误");        return "index.jsp";
    }    /**
     * 注销
     * @return
     */
    @RequestMapping("/exit")
    public String exit(){
        request.getSession().removeAttribute("user");        return "index.jsp";
    }    /**
     * 注册
     * @param user
     * @return
     */
    @RequestMapping("/register")
    public String insertUser(user user){

        List<user> userList = userService.getUserList();        for (user user1 : userList) {            if (user1.getUsername().equals(user.getUsername())){
                request.setAttribute("mgs1", "已经存在该用户");                return "index.jsp";
            }else {
                System.out.println(user);
                userService.insertUser(user);                return "index.jsp";
            }
        }        return "index.jsp";
    }    /**
     * 修改用户信息
     * @param user
     * @return
     */
    @RequestMapping("/upUser")
    public String upUser(user user){        int i = userService.upUser(user);
        System.out.println(user+"-----"+i);        if (i>0){
            user user1 = userService.getUserById(user.getId());
            request.getSession().setAttribute("user",user1);
            request.setAttribute("mgs4","修改成功");            return "person/person_info.jsp";
        }else{
            request.setAttribute("mgs4","修改失败");            return "person/person_info.jsp";
        }
    }    /**
     * 修改密码
     * @param user
     * @return
     */
    @RequestMapping("/uppaw")
    public String uppaw(user user, String paw1){
        user userById = userService.getUserById(user.getId());
        System.out.println(user+"----------"+paw1);        if(userById.getPaw().equals(paw1)){
            userService.uppaw(user);
            user user1 = userService.getUserById(user.getId());
            request.getSession().setAttribute("user",user1);
            request.setAttribute("mgs3","修改密码成功");            return "person/updatepwd.jsp";
        }else{
            request.setAttribute("mgs3","输入原始密码不对");            return "person/updatepwd.jsp";
        }
    }
}

该项目地址为:

Github:https://github.com/MoYu-zc/Film_manage

Gitee:https://gitee.com/MoYu-zc/film_manage

个人博客为:
MoYu's HomePage
MoYu's Gitee Blog


__EOF__

本文作者MoYu 
本文链接:https://www.cnblogs.com/MoYu-zc/p/14696075.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐