SSM 電影后臺管理專案
概述
通過對資料庫中一張表的CRUD,將相應的操作結果渲染到頁面上。
筆者通過這篇部落格還原了專案(當然有一些隱藏的坑),然後將該專案上傳到了Github、Gitee,在末尾會附上有原始碼地址,讀者可參考。
該專案使用的是 Spring+SpringMVC+Mybaits(SSM)後端架構,POJO---Dao---Service---Controller的結構,簡單易懂。
- POJO:實體類層,封裝的是資料中的設計的表對應的元素。
- Dao:Mapper的介面以及Mapper.xml檔案,實現sql操作。
- Service:服務實現層,呼叫Dao層方法進行實現。
- Controller:控制層,呼叫一個個Service層的實現方法完成一個個具體功能。
專案使用了前端JS檢錯和後端JSR303引數校驗,能把絕大部分的問題都包括其中。類似於輸入資訊錯誤以及輸入資訊不合法,違規跳轉等,也加入了過濾器,使使用者可以有更好的體驗。
電影后臺管理系統的管理員在工作中需要查閱和管理如下資訊:後臺管理的管理員、電影資訊、新聞資訊以及型別資訊。如下圖:
專案展示
準備
- 環境:
- IDEA
- MySQL 5.1.47
- Tomcat 9
- Maven 3.6
- 要求:
- 掌握MySQL資料庫
- 掌握Spring
- 掌握MyBatis
- 掌握SpringMVC
- 掌握簡單的前端知識
實現
1.建立好專案架構
先建立好com.zc.xxx路徑下的檔案;resources資原始檔夾下的檔案可以先不建立,下面會逐步建立。
2.SSM架構
這部分如果感興趣,想知道具體操作,可以檢視文章 《SSM整合》
3.POJO層
因為設計的資料庫中有4個表,分別是:user
、type
、news
、film
所以對應建立四個實體類,這裡部分舉例
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";
}
}
}
該專案地址為:
個人部落格為:
MoYu's HomePage
MoYu's Gitee Blog