這是我第一篇博客,關於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,成功!一個簡單的登錄就實現了!!!!!!
效果如下圖: