整合SSM框架

一、简述SSM

  • SSM(Spring + Spring MVC + MyBatis)框架集由 Spring、MyBatis 两个开源框架整合而成(Spring MVC 是 Spring 中的部分内容)。常作为数据源较简单的 web 项目的框架。
  • Spring:就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。Spring 的核心思想是IoC(控制反转),即不再需要程序员去显式地 new 一个对象,而是让 Spring 框架帮你来完成这一切。
  • Spring MVC:在项目中拦截用户请求,它的核心 Servlet 即 DispatcherServlet 承担中介或是前台这样的职责,将用户请求通过 HandlerMapping 去匹配 Controller, Controller 就是具体对应请求所执行的操作。Spring MVC 相当于 SSH 框架中struts。
  • MyBatis:是对 JDBC 的封装,它让数据库底层操作变的透明。MyBatis 的操作都是围绕一个 SQLSessionFactory 实例展开的。MyBatis 通过配置文件关联到各实体类的 Mapper 文件,Mapper 文件中配置了每个类对数据库所需进行的 SQL 语句映射。在每次与数据库交互时,通过 SQLSessionFactory 拿到一个 SQLSession,再执行 SQL 命令。

二、SSM整合测试

  • pom.xml 文件中新增依赖
    
    
        4.0.0
        com
        MySSM
        1.0-SNAPSHOT
        war
        
            
            4.3.9.RELEASE
        
        
            
            
                org.springframework
                spring-webmvc
                ${spring-version}
            
            
            
                com.fasterxml.jackson.core
                jackson-databind
                2.8.10
            
            
            
                mysql
                mysql-connector-java
                8.0.19
            
            
            
                org.mybatis
                mybatis
                3.4.6
            
            
            
                org.mybatis
                mybatis-spring
                1.3.1
            
            
            
                org.springframework
                spring-test
                ${spring-version}
            
            
            
                org.springframework
                spring-jdbc
                ${spring-version}
            
            
            
                org.aspectj
                com.springsource.org.aspectj.weaver
                1.6.8.RELEASE
            
            
            
                com.alibaba
                druid
                1.0.28
            
            
            
                log4j
                log4j
                1.2.17
            
            
            
                junit
                junit
                4.12
            
            
            
                org.projectlombok
                lombok
                1.18.8
                provided
            
            
            
                javax.servlet.jsp
                jsp-api
                2.2
                provided
            
            
            
                javax.servlet
                javax.servlet-api
                3.0.1
                provided
            
            
            
                jstl
                jstl
                1.2
            
        
        
            
            
                
                    src/main/java
                    
                        **/*.xml
                    
                    false
                
                
                    src/main/resources
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
            
            
                
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    3.6.1
                    
                        1.8
                        1.8
                    
                
                
                
                    org.apache.tomcat.maven
                    tomcat7-maven-plugin
                    2.2
                    
                        /
                        8081
                    
                
            
        
    
    
  • web.xml 的配置
    
    
        
        
            dispatcherServlet
            org.springframework.web.servlet.DispatcherServlet
            
                contextConfigLocation
                classpath:spring-mvc.xml
            
        
        
            dispatcherServlet
            /
        
        
        
            encode
            org.springframework.web.filter.CharacterEncodingFilter
            
                encoding
                UTF-8
            
        
        
            encode
            /*
        
    
    
  • resources下的 db.properties
    driver = com.mysql.cj.jdbc.Driver
    url = jdbc:mysql://localhost:3307/mysqls?serverTimezone=UTC
    user = root
    pass = 123456
    maxActive = 50
    minIdle = 1
    
  • resources下的 spring-mvc.xml
    
    
        
        
        
        
        
        
        
        
        
        
        
        
            
            
        
    
    
  • resource下的 spring-mybatis.xml
    
    
      
      
      
      
          
          
          
          
      
      
      
          
          
          
          
      
      
      
          
          
      
      
      
          
      
      
          
          
              
              
              
              
          
      
      
      
          
          
      
    
    
  • SqlSessionFactoryBean

    • 在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。
    • 但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要直接访问。
    • SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。
  • MapperScannerConfigure

    • Mybatis-Spring 为我们提供了一个叫做 MapperScannerConfigurer 的类,通过这个类 Mybatis-Spring 会自动为我们注册 Mapper 对应的 MapperFactoryBean 对象。
    • 我们需要在 Spring 的 applicationContext 配置文件中定义一个 MapperScannerConfigurer 对应的 bean 。对于 MapperScannerConfigurer 而言有一个属性是我们必须指定的,那就是 basePackage 。
    • basePackage 是用来指定 Mapper 接口文件所在的基包的,在这个基包或其所有子包下面的 Mapper 接口都将被搜索到。多个基包之间可以使用逗号或者分号进行分隔。最简单的 MapperScannerConfigurer 定义就是只指定一个 basePackage 属性。
  • resources下的 mybatis-config.xml
    
    
    
       
          
       
    
    
  • resource下的 log4j.properties
    # Global logging configuration
    log4j.rootLogger=ERROR, stdout, F
    # MyBatis logging configuration...
    log4j.logger.com.dao=TRACE
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.F.File =myproj.log
    log4j.appender.F.Append = true
    log4j.appender.F.Threshold = DEBUG
    log4j.appender.F.layout=org.apache.log4j.PatternLayout
    log4j.appender.F.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss}-[%p %F\:%L]  %m%n
    
  • 配置文件结束,环境搭建完毕,开始编写代码, User.java
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private int uid;
        private String username;
        private String password;
        private int age;
        private String addr;
    }
    
  • UserController.java
    @Controller
    public class UserController {
        /**
       * 动态注入service对象
       */
        @Resource
       private IUserService userService;
        @GetMapping("/Users")
        @ResponseBody
        public List getUsers(){
            return  userService.getAllUsers();
        }
        @GetMapping("/Users/{uid}")
        @ResponseBody
        public User getUserByUid(@PathVariable int uid){
            return userService.getUserByUid(uid);
        }
        @GetMapping("/UsersPage")
        public String getUsersPage(Model model){
            model.addAttribute("users", userService.getAllUsers());
            return "user";
        }
        @GetMapping("/getUserByUidPage/{uid}")
        public String getUserByUidPage(@PathVariable int uid, Model model){
            model.addAttribute("u", userService.getUserByUid(uid));
            return "updateUser";
        }
    }
    
  • IUserService.java
    public interface IUserService {
       List getAllUsers();
       User getUserByUid(int uid);
    }
    
  • UserServiceImpl.java
    /**
     * 注意Service的实现类之上一定要添加service注解
     */
    @Service
    public class UserServiceImpl implements IUserService {
        /**
         * 动态注入dao组件
         */
        @Resource
        private IUserDao userDao;
        @Override
        public List getAllUsers() {
            return userDao.getAllUsers();
        }
        @Override
        public User getUserByUid(int uid) {
            return userDao.getUserByUid(uid);
        }
    }
    
  • IUserDao.java
    public interface IUserDao {
       List getAllUsers();
       User getUserByUid(int uid);
    }
    
  • dao/mapper下新增 UserMapper.xml
    
    
    
     
          
              select * from user
          
          
          
    
    
  • 双击Maven菜单下的Plugins下的tomcat7下的tomcat7:run运行;运行结果如下:
    D:\Java\JDK\bin\java.exe -Dmaven.multiModuleProjectDirectory=F:\IDEA-Work\MySSM -Dmaven.home=D:\Java\Maven\apache-maven-3.6.3 -Dclassworlds.conf=D:\Java\Maven\apache-maven-3.6.3\bin\m2.conf "-Dmaven.ext.class.path=D:\JetBrains\IntelliJ IDEA 2019\plugins\maven\lib\maven-event-listener.jar" "-javaagent:D:\JetBrains\IntelliJ IDEA 2019\lib\idea_rt.jar=54290:D:\JetBrains\IntelliJ IDEA 2019\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\Maven\apache-maven-3.6.3\boot\plexus-classworlds-2.6.0.jar;D:\Java\Maven\apache-maven-3.6.3\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version2019.3 -s D:\Java\Maven\apache-maven-3.6.3\conf\settings.xml org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run
    [INFO] Scanning for projects...
    [INFO] 
    [INFO] -----------------------------< com:MySSM >------------------------------
    [INFO] Building MySSM 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO] 
    [INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) > process-classes @ MySSM >>>
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MySSM ---
    [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] Copying 1 resource
    [INFO] Copying 5 resources
    [INFO] 
    [INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ MySSM ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO] 
    [INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ MySSM <<<
    [INFO] 
    [INFO] 
    [INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ MySSM ---
    [INFO] Running war on http://localhost:8081/
    [INFO] Using existing Tomcat server configuration at F:\IDEA-Work\MySSM\target\tomcat
    [INFO] create webapp with contextPath: 
    三月 18, 2020 9:52:43 上午 org.apache.coyote.AbstractProtocol init
    信息: Initializing ProtocolHandler ["http-bio-8081"]
    三月 18, 2020 9:52:43 上午 org.apache.catalina.core.StandardService startInternal
    信息: Starting service Tomcat
    三月 18, 2020 9:52:43 上午 org.apache.catalina.core.StandardEngine startInternal
    信息: Starting Servlet Engine: Apache Tomcat/7.0.47
    三月 18, 2020 9:52:51 上午 org.apache.catalina.core.ApplicationContext log
    信息: No Spring WebApplicationInitializer types detected on classpath
    三月 18, 2020 9:52:52 上午 org.apache.coyote.AbstractProtocol start
    信息: Starting ProtocolHandler ["http-bio-8081"]
    三月 18, 2020 9:52:57 上午 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring FrameworkServlet 'dispatcherServlet'
    
  • 在浏览器中输入 http://localhost:8081/ 来检测框架是否搭建成功。

你可能感兴趣的:(整合SSM框架)