您好,登錄后才能下訂單哦!
本篇內容介紹了“SSM框架搭建實例源碼分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
我們建了一個HelloWorld工程,這個工程整合了SSM框架,用了MySQL數據庫
遵循了MVC結構,可以看到有模型(Model)、視圖(View,下面的src文件夾)、控制器(Controller),而Mapping是MyBatis用來操作數據庫的映射文件。
好的,我們一個個來看:
這是一個普通JAVA對象(POJO),User.java,源碼如下:
package com.relyn.model;public class User { public String userName = ""; public String userMsisdn = ""; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserMsisdn() { return userMsisdn; } public void setUserMsisdn(String userMsisdn) { this.userMsisdn = userMsisdn; } }
主要作用就是數據的臨時存儲,這個User對象一般和數據庫中的User表結構保持一致。
這就是一個普通的HTML頁面,index.jsp,源碼如下:
<html> <head> <title>HelloWorld</title> </head> <body> Hello, ${userName}, your phone is ${userMsisdn} </body></html>
需要說明的是,這里用到了EL表達式,如:${userName}和${userMsisdn}表示的就是由Spring控制器推送過來的變量。
這就是Spring控制器,UserController.java,源碼如下:
package com.relyn.controller; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.relyn.dao.UserDao;import com.relyn.model.User; @Controller@RequestMapping(value = "/user")public class UserController { @Autowired private UserDao userDao; @RequestMapping(value = "/say/{userMsisdn}") public ModelAndView msisdnView(@PathVariable String userMsisdn) { User user = userDao.getUserNameByMsisdn(userMsisdn); ModelAndView mv = new ModelAndView(); mv.setViewName("user/index"); mv.addObject("userName", user.getUserName()); mv.addObject("userMsisdn", user.getUserMsisdn()); return mv; } }
可以看到,首先它引入了SpringFramework的一些包,然后用注解的方式在代碼中來聲明這是一個控制器@Controller,用@RequestMapping來指定了這個控制器的入口,用@Autowired來自動實例化這個UserDao的對象(這就是剛才說到的控制反轉),而第二個@RequestMapping表示的是這個方法的入口。最后,這個控制器通過返回ModelAndView對象到視圖(回憶一下剛才的那個Spring MVC工作流程圖)。
上述控制器源碼中,有一條關鍵語句,用來從數據庫讀取數據:
User user = userDao.getUserNameByMsisdn(userMsisdn);
這里用到了UserDao這個接口,我們看下源碼:
package com.relyn.dao;import com.relyn.model.User; public interface UserDao { public User getUserNameByMsisdn(String userMsisdn); }
首先需要注意的是,這并不是一個Class,而是一個Interface,源碼非常簡單,主要作用通過方法名稱就能理解:getUserNameByMsisdn,通過號碼獲取用戶姓名。
那么,他是怎么做到的呢?
這時候就需要MyBatis的數據庫映射配置,我們看下源碼:
<?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.relyn.dao.UserDao"> <resultMap type="com.relyn.model.User" id="userMap"> <id property="id" column="id" /> <result property="userMsisdn" column="user_msisdn" /> <result property="userName" column="user_name" /> </resultMap> <select id="getUserNameByMsisdn" parameterType="java.lang.String" resultMap="userMap"> select * from user where user_msisdn=#{msisdn} </select></mapper>
可以看到,這是一個XML文件,在<select>標簽中我們看到了熟悉的SQL語句:
select * from user where user_msisdn=#{msisdn}
里的#{msisdn}就是由控制器傳入的變量。這個映射的作用是,把從數據庫中取出的數據,映射到User類中,這就是剛才說的為什么User對象要和數據庫中user表的結構保持一致的原因了。
“SSM框架搭建實例源碼分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。