SSM完整項目(內含源碼)
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"
"//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