SSM完整專案(內含原始碼)

zc發表於2021-04-24

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

相關文章