本篇内容介绍了“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。