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"
        "//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://github.com/MoYu-zc/Film_manage

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

個人部落格為:
MoYu’s HomePage
MoYu’s Gitee Blog

Tags: