zoukankan      html  css  js  c++  java
  • 12SSM整合

    • u  三大框架基本概念

                     spring、SpringMVC、Mybatis

    • u  整合思路
    • u  环境准备
    • u  工程结构
    • u  SPRING + SPING MVC + MYBATIS 三大框架整合
      • ü  Mybatis和spring进行整合
      • ü  Spring整合service
      • ü  整合springMVC
      • ü  配置前端控制器
      • ü  编写登录页面
      • ü  数据库配置和日志配置
      • ü  项目部署

    1      三大框架基本概念

    • spring:

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    • SpringMVC:

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    • 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(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    2      整合思路

    SSM系统架构 :

     

    spring将各层进行整合

    • 通过spring管理持久层的mapper(相当于dao接口)
    • 通过spring管理业务层service,service中可以调用mapper接口。
    • spring进行事务控制。
    • 通过spring管理表现层Handler,Handler中可以调用service接口。

    mapper、service、Handler都是javabean。

    第一步:整合dao层

    ü     mybatis和spring整合,通过spring管理mapper接口。

    ü     使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

    第二步:整合service层

    ü     通过spring管理service接口。

    ü     使用配置方式将service接口配置在spring配置文件中。

    ü     实现事务控制。

    第三步:整合springMVC

    ü     由于springMVC是spring的模块,不需要和spring整合,直接把springMVC加入到项目中即可。

     

    下面通过SSM框架实现一个登录样例,以更好理解框架整合。

    3      环境准备

    数据库环境:oracle 11g

    准备一个用户表,如“userssm”有用户名和用户密码字段,表里插入几条用户数据,供登录验证使用。

    java环境:jdk1.6

    springMVC版本:spring 3.2

    所需要的jar包:

        数据库驱动包:ojdbc14.jar

        mybatis的jar包

        mybatis和spring整合包

        log4j包

        dbcp数据库连接池包

        spring4.1.6所有jar包

        jstl包

     

    4      工程结构

     

    5      SPRING + SPING MVC + MYBATIS 三大框架整合

    5.1    Mybatis和spring进行整合

    1.sqlMapConfig.xmlmybatis自己的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE configuration
    
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
             <!-- 配置别名 -->
    
             <typeAliases>
    
                      <!-- 批量扫描别名 -->
    
                      <package name="com.inspur.ssm.pojo"></package>
    
             </typeAliases>
    
             <!-- 配置mapper:由于使用spring和mybatis的整合包进行mapper扫描,这里就不需要配置了,必须遵循:mapper.xml和mapper.java文件同名且在同一个目录 -->
    
    <!-- <mapper></mapper> -->
    
    </configuration>

    2.applicationContext-dao.xml:(1)数据源(2)SqlSessionFactory(3)mapper扫描器

    <!-- 加载配置文件db.properties中的内容,db.properties文件中key命名要有一定命名规则 -->
    
             <context:property-placeholder location="classpath:db.properties" />
    
              
    
             <!-- 数据源,使用dbcp -->
    
             <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    
                      <property name="driverClassName" value="${jdbc.driver}" />
    
                      <property name="url" value="${jdbc.url}" />
    
                      <property name="username" value="${jdbc.username}" />
    
                      <property name="password" value="${jdbc.password}" />
    
                      <property name="maxActive" value="10" />
    
                      <property name="maxIdle" value="5" />
    
             </bean>
    
    <!-- sqlSessionfactory -->
    
             <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    
                      <!-- 加载mybatis的配置文件 -->
    
                      <property  name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
    
                      <!-- 数据源 -->
    
                      <property name="dataSource" ref="dataSource"></property>
    
             </bean>
    
             <!-- mapper批量扫描 -->
    
             <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    
                      <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
    
                      <property name="basePackage" value="com.inspur.ssm.mapper"></property>
    
                      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    
             </bean>

    3.pojo

    public class Userssm {
    
        private String id;
    
        private String username;
    
        private String password;
    
        ……
    
        get/set……
    
    }

    4.Mapper.java

     

    5.Mapper.xml

    <?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.inspur.ssm.mapper.UserssmMapper" >
    
       <select id="findUser" resultType="userssm" parameterType="userssm" >
    
        select  t1.id,
    
        t1.username,
    
        t1.role,
    
        t1.realname,
    
        t1.password
    
        from  USERSSM t1
    
        where   username = #{username}
    
        and password = #{password}
    
      </select>
    
     </mapper>

    5.2    Spring整合service

    让spring管理service接口

    1.定义service接口

    @Resource
    
    public interface LoginService {
    
             //用户查询列表
    
             public Userssm findUser(Userssm userssm)throws Exception;
    
    }

    2.定义service实现类

    @Service("loginService")
    
    public class LoginServiceImpl implements LoginService{
    
             @Autowired
    
             private UserssmMapper userssmMapper;
    
             @Override
    
             public Userssm findUser(Userssm userssmQuery) throws Exception {
    
                      Userssm userssm = userssmMapper.findUser(userssmQuery);
    
                      if(userssm == null){
    
                              throw new Exception("用户信息不存在");
    
                      }else{
    
                              return userssm;
    
                      }
    
             }
    
    }

    3.在spring容器配置service(applicationContext-service.xml)

    <!– 原来service配置方式 -->
    
    <bean id=“loginService" class="com.inspur.ssm.service.impl.LoginServiceImpl"></bean>

    注:后续整合springMVC,可以使用包扫描器将service配置取代。该步骤可以省略。

    4.事务控制(applicationContext-transaction.xml

    <!-- 事务管理器
    
    对mybatis操作数据库的事务控制,spring使用jdbc的事务控制类 -->
    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
    <!-- 数据源
    
    DataSource在applicationContext-dao.xml中配置了 -->
    
    <property name="dataSource" ref="dataSource"></property>
    
    </bean>
    
    <!-- 通知 -->
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    
             <tx:attributes>
    
                      <tx:method name="save*" propagation="REQUIRED"/>
    
                      <tx:method name="delete*" propagation="REQUIRED"/>
    
                      <tx:method name="insert*" propagation="REQUIRED"/>
    
                      <tx:method name="update*" propagation="REQUIRED"/>
    
                      <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
    
                      <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
    
                      <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
    
             </tx:attributes>
    
    </tx:advice>
    
    <!-- aop -->
    
    <aop:config>
    
           <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.inspur.ssm.service.impl.*.*(..))"/>
    
    </aop:config>

    5.3    整合springMVC

    1.SpringMVC配置

    创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器。

    <!-- 可以扫描controller、service、... 这里让扫描controller,指定controller的包 -->
    
    <context:component-scan base-package="com.inspur.ssm.*"></context:component-scan>
    
    <!-- 静态资源解析 包括:js,css,img,html... -->
    
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
    
    <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
    
    <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
    
    <mvc:resources location="/html/" mapping="/html/**"></mvc:resources>
    
    <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置-->
    
    <mvc:annotation-driven />
    
    <!-- 视图解析器:解析jsp,默认使用jstl标签,classpath下的有jstl的包 -->
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
             <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    
             <property name="prefix" value="/" />
    
             <property name="suffix" value=".jsp" />
    
    </bean>

    2.编写Controller(就是Handler)

    LoginController.java

    @Controller
    
    public class LoginController {
    
             @Autowired
    
             private LoginService loginService;
    
             //登录
    
             @RequestMapping("/login")
    
             public String login(HttpServletRequest request, Userssm userssm) throws Exception{
    
                      Userssm user = null;
    
    try{
    
             //调用service进行用户身份验证
    
             user = loginService.findUser(userssm);
    
    }catch(Exception e){
    
             e.printStackTrace();
    
             request.setAttribute("message", e.getMessage());
    
    }
    
    if(user!=null){
    
             HttpSession session = request.getSession();
    
             //在session中保存用户身份信息
    
             session.setAttribute("user", user);
    
             //重定向到登录成功页面
    
             return "success";
    
    }
    
             return "login";
    
    }}

    5.4    配置前端控制器 (web.xml)

    1.Spring配置

    <!-- 加载spring容器 -->
    
    <context-param>
    
             <param-name>contextConfigLocation</param-name>
    
             <param-value>classpath:/spring/applicationContext-*.xml</param-value>
    
    </context-param>
    
    <listener>
    
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
    </listener>

    2.SpringMVC配置 

    <!-- springMVC前端控制器DispatcherServlet -->
    
    <servlet>
    
             <servlet-name>springmvc_rest</servlet-name>
    
             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
             <init-param>
    
                      <param-name>contextConfigLocation</param-name>
    
                      <param-value>classpath:/spring/springmvc.xml</param-value>
    
             </init-param>
    
             <load-on-startup>1</load-on-startup>
    
    </servlet>
    
    <servlet-mapping>
    
             <servlet-name>springmvc_rest</servlet-name>
    
             <url-pattern>/</url-pattern>
    
    </servlet-mapping>

    3.spring 提供的解决乱码方式

    <filter>
    
             <filter-name>CharacterEncodingFilter</filter-name>
    
             <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class>
    
      <init-param>
    
        <param-name>encoding</param-name>
    
        <param-value>UTF-8</param-value>
    
       </init-param>
    
    </filter>
    
    <filter-mapping>
    
        <filter-name>CharacterEncodingFilter</filter-name>
    
        <url-pattern>/*</url-pattern>
    
    </filter-mapping>

    5.5    编写登录页面

    注:success.jsp省略

    5.6    数据库配置和日志配置

    数据库配置示范:

    jdbc.driver=oracle.jdbc.driver.OracleDriver

    jdbc.url=jdbc:oracle:thin:@localhost:1521:xe

    jdbc.username=zhou

    jdbc.password=123456

    日志配置示范:

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.Target=System.out

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n

    #在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error

    log4j.rootLogger=DEBUG, stdout

    6      项目部署

    浏览器中输入访问地址 :http://localhost:8088/SSM/

  • 相关阅读:
    python3给socket模块设置代理
    yield、greenlet与协程gevent
    线程池
    并发通信、生产者与消费者模型
    多进程和多线程
    非阻塞套接字与IO多路复用
    14.python模块之subprocess
    判断页面是否滑到底部
    @vue/cli 3.x 版本配置productionGzip提高性能
    vue跳转到指定位置
  • 原文地址:https://www.cnblogs.com/zhouyeqin/p/9008523.html
Copyright © 2011-2022 走看看