這是我第一篇博客,關於SSM框架的整合思路以及簡單功能實現。
首先,最近剛剛學習Spring+SpringMVC+Mybatis,在開發時遇到形形色色的問題,周遭人也為我提供了一些思路,我會一點點整理梳理,發上來,供自己溫習,也可以分享給大家,希望有一個全面的理解,最好能夠幫助到大家。
需求:開發屬於自己的博客系統,要有登錄注冊,博客的增刪改查等各種功能。
開發環境:IDEA,MySQL,JDK1.8等(不贅述)
首先對SSM框架有一個相應的認識。

SpringMVC:主要進行頁面的 請求接受與響應。
組件包括:前端控制器,處理器映射器,處理器適配器,視圖解析器,處理器Handler,視圖View。其中,只有處理器Handler和視圖View需要程序員開發。
View是一個接口,實現類支持不同的View類型(jsp,freemarker,pdf等)
另外,處理器Handler就是Controller。
———————————————————————————我是分割線————————————————————————
Service層功能:注入dao,調用dao方法
——————————————————————我是分割線,對又是我————————————————————————
Mybatis:開始Mybatis時要記住最終目的,我們要對數據庫的數據進行操作,所以你只需要記住,他的使用很方便,很方便,方便,即可。(詳細講解Myabtis配置等要一整天,不贅述)
so,最後我們的開發思路就很明確了,從頁面獲取數據到Controller層,然後傳遞到service層進行相關操作(調用方法等),然後再傳遞到持久層對數據庫進行相應增刪改查即可。這樣一說,是不是就明確了很多?
下面的代碼我只截取片段,只為了梳理我的思路。
首先要准備的一定是頁面。我做一個簡單的登錄頁面,頁面片段如下:
<form action="/login" class="form-signin" method="post">
<h2 class="form-signin-heading">用戶登錄</h2>
<input type="text" name="username" class="form-control" placeholder="用戶名" required="" autofocus="">
<input type="password" name="pass_word" class="form-control" placeholder="密碼" required="">
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> 記住我
</label>
</div>
<button class="btn btn-primary btn-block" type="submit">確定</button><br>
<a href="/templates/register.jsp"><button class="btn btn-primary btn-block" type="button">注冊</button></a>
</form>
頁面有了,數據庫也應該有,id,username,password等字段。並且准備好model(pojo)的相關字段get/set。片段如下:
public class User {
private BigInteger id;
private String username;
private String pass_word;
private String email;
public BigInteger getId() {
return id;
}
public void setId(BigInteger id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPass_word() {
return pass_word;
}
public void setPass_word(String pass_word) {
this.pass_word = pass_word;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
同時要准備好sql語句(我們要對數據庫操作,sql語句是不可少的)放置在xml文件中,以及相應的java文件中。
以登錄為例,xml和相應mapper.java如下:
<!--用戶登錄-->
<select id="login" parameterType="com.myblogs.model.User" resultType="int">
SELECT count(*) FROM user WHERE username =#{username} AND pass_word = #{pass_word}
</select>
/**
* 用戶登錄
*/
int login(User user);
要注意,輸入/輸出類型,名稱等要一致。同時xml和相關mapper的文件目錄要一致,比如都要是com.myblogs.mapper目錄下
我說一下我的sql語句思路。count(*)是統計數字,當賬號密碼和數據庫的對上時,最少有一條記錄。那我就拿獲取到的記錄數來判斷是否登錄成功!
這樣,持久層就做好了,特別快,下面按照順序是什麼?業務層。也就是要對之前寫的mapper文件方法做調用等。
需要一個service接口和實現類,也就是serviceimpl.java,由於service接口和mapper文件內容一致,可以不寫,直接寫接口實現類。我的實現類內容如下:
@Autowired
private UserMapper userMapper;
//用戶登錄
int login(User user){
int count=userMapper.login(user);
if (count!=0){
return 1;
}
return 0;
}
在這裡,我要實現判斷。數據庫得到的記錄數字,記得之前的count(*)嗎?得到的數據,如果返回的int不等於0,說明有數據獲取到,也就是登錄成功(頁面輸入的用戶名密碼和數據庫對上了)反之則表示登錄失敗,用戶名或者密碼有錯誤,沒對上。所以在這一層做了一個判斷。
對的,service層也寫好了,接下來呢?就是寫Controller層,就是之前說的Handler(重申:兩者是一個意思)
@Autowired
UserMapper userMapper;
@RequestMapping("/login")
public String loginPageShow(){
return "login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String loginPage(User user, HttpSession session){
int count=userMapper.login(user);
if (count==1){
session.setAttribute("username",user.getUsername());
return "loginsuccess";
}
return "login";
}
登錄成功返回loginsuccess頁面,登錄失敗繼續返回login頁面,重新輸用戶名密碼。相應的頁面上也要有這些字段,jsp文件在前面。
然後,運行,改bug,成功!一個簡單的登錄就實現了!!!!!!
效果如下圖:

