window.cnblogsConfig = { blogUser: 'MoYu', blogAvatar: 'https://gitee.com/MoYu-zc/picgo/raw/master/img/20210213094450.jpg', blogStartDate: '2020-02-09', webpageTitleOnblur: '(o゚v゚)ノ Hi,Back', webpageTitleOnblurTimeOut: 500, webpageTitleFocus: '(*´∇`*) 欢迎回来!', webpageTitleFocusTimeOut: 1000, webpageIcon: "https://gitee.com/MoYu-zc/picgo/raw/master/img/20210213094450.jpg", enable: true, // 是否开启日/夜间模式切换按钮 auto: { // 自动切换相关配置 enable: false, // 开启自动切换 dayHour: 7, // 日间模式开始时间,整数型,24小时制 nightHour: 20 // 夜间模式开始时间,整数型,24小时制 } switchDayNight: { enable: true, auto: { enable: true } }, progressBar: { id : 'top-progress-bar', // 请勿修改该值 color : '#77b6ff', height : '2px', duration: 0.2, }, loading: { rebound: { tension: 16, friction: 5, }, spinner: { id: 'spinner', radius: 90, sides: 3, depth: 4, colors: { background: '#f0f0f0', stroke: '#272633', base: null, child: '#272633', }, alwaysForward: true, // When false the spring will reverse normally. restAt: 0.5, // A number from 0.1 to 0.9 || null for full rotation renderBase: false, } }, homeTopAnimationRendered: true, homeTopAnimation: { radius: 15, density: 0.2, color: 'rgba(255,255,255, .2)', // 颜色设置,“random” 为随机颜色 clearOffset: 0.3, }, essayTopAnimationRendered: true, essayTopAnimation: { triW : 14, triH : 20, neighbours : ["side", "top", "bottom"], speedTrailAppear : .1, speedTrailDisappear : .1, speedTriOpen : 1, trailMaxLength : 30, trailIntervalCreation : 100, delayBeforeDisappear : 2, colorsRandom: false, // v1.2.4 是否开启随机颜色 colors: [ '#96EDA6', '#5BC6A9', '#38668C', '#374D84', '#BED5CB', '#62ADC6', '#8EE5DE', '#304E7B' ] }, homeTopImg: [ "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/home_top_bg.webp", "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/home_top_bg.webp" ], homeBannerTextType: "one", essayTopImg: [ "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/nothome_top_bg.webp", "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/nothome_top_bg.webp", "https://gitee.com/MoYu-zc/picgo/raw/master/img/20210208190902.jpg", "https://gitee.com/MoYu-zc/picgo/raw/master/img/20210208190954.jpg", ], codeMaxHeight: true, codeLineNumber: true, essayCode: { fontFamily: "'Ubuntu Mono',monospace", // 代码框字体 fontSize: "14px" // 代码框字体大小 }, }

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 3 4 5 6 7 8 9 10

准备

  • 环境:
    • 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);
}
@Service
public 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层代码

@Controller
public 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

posted @ 2021-04-24 00:45  MoYu-zc  阅读(13537)  评论(9编辑  收藏  举报