Warning: Illegal string offset 'download' in /www/wwwroot/www.oilcn.net.cn/wp-content/themes/wpzt-hot/template-parts/single/single-pc.php on line 4

ssm企业网站源码学(ssm开发实战项目源码)

29次
2021-06-24

SSM框架简介

SSM 框架,是 Spring + Spring MVC + MyBatis 的简写,这个是继 SSH 之后,目前比较主流的 Java EE 企业级框架,适用于搭建各类小型的企业级应用系统。

Spring简介

Spring 是一个开源框架,Spring 是于 2003 年盛行的一个羽量级的 Java 开发框架,由 Rod Johnson 在其专著 Expert One-On-One J2EE Development and Design 中探讨的部份观念跟原型衍生而至。它是为了解决企业应用开发的复杂性而争创的。Spring 使用基本的 JavaBean 来完成原先只或许由 EJB 完成的事情。然而,Spring 的用途除了限于服务器端的开发。从简单性、可测试性跟松耦合的视角而言,任何 Java 应用都可以从 Spring 中获益。 简单来说,Spring 是一个羽量级的控制反转(IoC)和面向切面(AOP)的容器框架。

控制反转

即原本你该做的事情 你不去做了,让系统去做,比如,你获取一个对象的时侯,往往还要new出例子来,如果用了控制反转,那这件事情 就不需要你做了,你只须要在配置文件xml中配置好,系统就帮你new,控制反转也叫依赖注入,就是把该用到的东西提早注入出来,下次直接用 而不是每天都new

打个比方,你今晚想约个女孩去看电影,假设这个女孩是一个类(温柔、善良、小鸟依人),那么你还要实例化她,在 JAVA 中,通常的做法就是 new 一个类,让她弄成一个实体的对象。然后,你和她约了时间、地点,说要请客喝茶,然后耗尽你浑身解数,妹子总算答应要跟你去看电影了。看完影片后来,你需要赠女孩回去,确保安全。当然,这一个方法通常是由 JVM 的垃圾回收模式来处理,如果你没有主动及时赠女孩回去ssm企业网站源码学,当女孩人数太多的时侯,有可能会造成内存溢出,系统宕机。

而假如你用了 Spring,过程将要是那样的,你告诉 Spring框架你今晚 7 点要跟一个温婉、善良、小鸟依人般的女孩去看电影,那么你 7 点准时来到电影院,此时,你会发觉,Spring 已经帮你把女孩送来了,完全就是你定义的那种类别。你们愉快地看完影片,然后你可以直接回去,Spring 又会帮你把女孩接走。你完全不用关心后续的事情。

面向切面

首先,需要说明的一点,AOP也是 Spring 的特点,它如同OOP 一样是一种编程思想,并不是某一种技术。

我们再来打个比方,在编程的时侯,我们为了满足某个业务逻辑步骤,通常还要一系列方法。请看下边3个详细业务的流程图:

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第1张

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第2张

图上可以看见,用户不管是查询余额、办理业务还是相机储值,都须要经过信令这个方法,有没有想过可以把这个公钥的代码是提取下来,不放在主步骤里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户方法写出来,即完全不考虑用户公钥,你读完以后,在另一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring都会帮你加过去,而不要你自己Copy过去,这里还是两个地方,如果你有多个控制流呢,这个写代码的方式可以大大提高你的时间,不过AOP的目的不是那样,这也是一个“副作用”,真正目的是,你写代码的时侯,事先只需考虑主步骤,而不用考虑这些不重要的步骤,懂C的都晓得,良好的色调要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校准参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校准代码,而你只须要写一次校准代码。不知道C的没关系,举一个通用的实例,经常在debug的时侯要打log吧,你也可以写好主要代码然后,把打log的代码讲到另一个单独的地方,然后命令AOP把你的代码加过去,注意AOP不会把代码加到源文件里,但是它会正确的影响最终的机器代码。就像在造物主角度的高纬度空间,把你须要的方法象切面般的插入至特定的时空底下。

Spring MVC

Spring MVC属于SpringFramework的后续产品,已经融合在Spring Web Flow上面,它原生支持的Spring特点,让开发显得十分简略规范。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色ssm企业网站源码学,这种分离使他们更容易进行订制。

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第3张

MyBatis 简介

MyBatis 本是apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移至了 google code,并且更名为 MyBatis 。MyBatis是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC 代码跟参数的手工设置以及结果集的检索。MyBatis 使用简略的 XML 或注解适于配置跟原始映射,将插口跟 Java 的POJOs(PlainOld Java Objects,普通的 Java 对象)映射成数据库中的记录。可以这样理解,MyBatis 是一个拿来帮你管理数据增删改查的框架。

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第4张

源码解读

我们建了一个helloSSM安装工程,这个安装工程整合了 SSM 框架,用了 MySQL 数据库(当然假如要改成其他数据库,只是一条配置句子的问题)

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第5张

项目结构

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第6张

遵循了MVC结构,可以看见有模型(Model)、视图(View,下面的src文件夹)、控制器(Controller),而Mapping是MyBatis拿来操作数据库的映射文件。

模型(Model)

这是一个普通JAVA对象(POJO),User.java,源码如下:

packagecom.hello.model;
publicclass User{
    privateInteger id;
    privateString userName;
    privateString password;
    publicInteger getId() {
        returnid;
    }
    publicvoidsetId(Integer id) {
        this.id =id;
    }
    publicString getUserName() {
        returnuserName;
    }
    publicvoidsetUserName(String userName) {
        this.userName =userName == null ? null :userName.trim();
    }
    publicString getPassword() {
        returnpassword;
    }
    publicvoidsetPassword(String password) {
        this.password =password == null ? null :password.trim();
    }
}

主要作用就是数据的临时储存,这个 User 对象通常跟数据库中的 User 表结构保持一致。

视图(View)

这就是一个普通的 HTML 页面,index.jsp,源码如下:


  
    HelloWorld
  
  
   欢迎${user.userName}!
  

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第7张

需要说明的是,这里用到了EL表达式,如:${userName}表示的就是由Spring控制器推送进来的变量。

控制器(Controller)

这就是Spring控制器,UserController.java,源码如下:

packagecom.hello.controller;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.servlet.ModelAndView;
importcom.hello.dao.UserDAO;
importcom.hello.model.User;
@Controller
@RequestMapping(value="/user")
public classUserController{
    @Autowired
    private UserDAO userDao;
@RequestMapping(value= "/{users}.do")
publicModelAndView findUser(@PathVariable String users){
    int id = Integer.parseInt(users);
    User user = userDao.selectByPrimaryKey(id);
    ModelAndView mv = new ModelAndView();
    mv.setViewName("index");
    mv.addObject("user", user);
    return mv;
    }
}

可以看见,首先它引进了SpringFramework 的一些包,然后用注解的形式在代码中来申明这是一个控制器@Controller,用@RequestMapping来指定了这个控制器的入口,用@Autowired来自动实例化这个 UserDao 的对象(这就是刚刚说到的控制反转),而第二个@RequestMapping表示的是这个办法的入口。最后,这个控制器通过返回 ModelAndView 对象至视图(回忆一下今天的那种 Spring MVC 工作流程图)。

数据访问对象(DAO)

上述控制器源码中,有一条关键词句,用来从数据库调用数据:

User user =userDao.selectByPrimaryKey(id);

这里用到了UserDao这个插口,我们看下源码:

packagecom.hello.dao;
importcom.hello.model.User;
public interfaceUserDAO {
    int deleteByPrimaryKey(Integer id);
        …
        …
        …
}

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第8张

首先还要留意的是,这并不是一个 Class,而是一个 Interface,源码十分简略,主要作用通过技巧名称能够理解:selectByPrimaryKey,通过关键字获取用户姓名。

那么,他是如何做到的呢?

数据库映射(Mapper)

这时候就须要 MyBatis 的数据库映射配置,我们看下源码:




  
    
    
    
  
  
    id, user_name, password
  
  
  …
  …
  …

可以看见,这是一个XML文件,在标签中我们看见了熟悉的SQL句子:

    select
    
    from user
    where id = #{id,jdbcType=INTEGER}

这里的#{id,jdbcType=INTEGER}就是由控制器传到的变量。这个映射的作用是,把从数据库中取出的数据,映射至 User 类中,这就是今天说的为何 User 对象要跟数据库中 user 表的结构保持一致的成因了。

最后

刚才说的这几个文件源码,是 SSM 框架中最基本的应用,如果还要提高不同的表或则业务,这几个文件一个都不能少。当然,如果你准备从头开始搭建框架,你就应当关注以下几个配置文件:

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第9张

ssm企业网站源码学(ssm开发实战项目源码) (https://www.oilcn.net.cn/) 网站运营 第10张

config.properties为基本的配置文件,主要适于配置数据库帐户、密码等一些通用的定义

log4j.properties为 Log for J 日志的配置文件,这是一个常用的 Java 日志输出工具,也可以换成其他的

spring-mvc.xml为Spring以及 Spring MVC 的配置文件

spring-mybatis.xml就是 MyBatis 和 Spring 整合的配置文件了,也是必不可少的(其中还整合了数据库连结配置,如有还要,可以单独一个.Xml文件配置)

最后,再说一下,JavaEE 工程中,所有恳求的入口来源都是web.xml这个文件,通常,我们使用了 Spring MVC 时,都须要指定把所有的恳求扔给 Spring 控制器来处理。

web.xml详细配置可下载源代码查看。

原文出自:

其中按实际搭建过程略有删改!

项目源码:

Mybatis实体类生成:

END

发表评论