214、SpringMVC学习笔记(八)【SSM框架整合】2019.09.20

0、目录

    • 1、项目创建
    • 2、集成Spring
    • 3、集成SpringMVC
    • 4、集成MyBatis
    • 5、测试代码编写
    • 6、添加事务支持
    • 7、Controller加入
    • 8、参考链接

Spring5 + SpringMVC5 + MyBatis3.5
若需要整合三个框架,则需要将每个步骤具体划分,保证每个框架都能够运行,以防止出现未知错误

1、项目创建

  • 创建maven的web项目
    214、SpringMVC学习笔记(八)【SSM框架整合】2019.09.20_第1张图片
  • 替换web.xml为3.1版本


  ssm

  • 项目部署、启动服务,保证项目能够正常访问
    214、SpringMVC学习笔记(八)【SSM框架整合】2019.09.20_第2张图片

2、集成Spring

  • jar包依赖
 
        5.1.5.RELEASE
    

    
        
            junit
            junit
            4.12
            test
        

        
        
        
            org.springframework
            spring-core
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        

        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
        
            org.springframework
            spring-test
            ${spring.version}
        

        
        
            org.springframework
            spring-aop
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        

        
        
            aopalliance
            aopalliance
            1.0
        
        
            org.aspectj
            aspectjweaver
            1.9.2
        
        
    
  • 在src/mian/resources中新增applicationContext.xml配置文件,并配置context属性扫描package



    
    

3、集成SpringMVC

  • 导入mvc依赖jar
 
            org.springframework
            spring-web
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            commons-fileupload
            commons-fileupload
            1.3.3
        
        
            commons-io
            commons-io
            2.6
        
  • web.xml中配置springmvc核心控制器、字符编码、REST提交过滤器
 
  
    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  

  
    encodingFilter
    /*
  

  
  
    dispatcherServlet
    
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath*:springmvc.xml
    

    
    1
  

  

  
  
    dispatcherServlet
    
    
    /
  

  
  
    HiddenHttpMethodFilter
    org.springframework.web.filter.HiddenHttpMethodFilter
  

  
    HiddenHttpMethodFilter
    dispatcherServlet
  
  • 新建springmvc.xml




  • 将springmvc.xml引入到applicationContext.xml中
 
    

注意:此时applicationContext.xml文件为核心配置,springmvc.xml为mvc配置,将来会有更多的类似于mvc这样的附属配置被加入到核心配置中。

所以需要修改web.xml中contextConfigLocation属性为applicationContext.xml

 
    
      contextConfigLocation
      classpath*:applicationContext.xml
    
  • 配置springmvc.xml的关键配置信息
 
    
        
        
        
        
    

    
    

    
    
        
        
        
        
    
  • 静态资源路径配置
    • 在webapp目录下加入view和static文件夹
    • 在springmvc.xml中加入静态资源放行
 
    
  • 重新部署启动服务,检测静态界面能否访问,访问成功则可进行下一步的整合

4、集成MyBatis

  • 导入mybatis所需jar包
 
        
            org.mybatis
            mybatis
            3.5.0
        
        
        
            com.mchange
            c3p0
            0.9.5.2
        
        
            mysql
            mysql-connector-java
            8.0.13
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.7
        

        
        
            log4j
            log4j
            1.2.17
        

        
        
            org.mybatis
            mybatis-spring
            1.3.2
        
  • 加入log4j.properties
# 主要配置
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
  • applicationContext.xml集成jdbc.properties

    • 新建jdbc.properties
jdbc.username=test
jdbc.password=123456
# mysql8 加入时区
jdbc.url=jdbc:mysql://localhost:3306/jdbcdb?serverTimezone=UTC
# 采用新版的cj驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.maxActive=50
  • xml集成

  • 数据源注入
 
    
        
        
        
        
    
  • SqlSessionFactoryBean配置


    
    
    
    
    
        
            com.hliedu.ssm.domain
            
        
    




    
    

5、测试代码编写

  • 新建com.hliedu.ssm.domain.Emp类
public class Emp {
    private Integer eid;
    private String ename;
    private String job;
    //setter getter ...
}
  • 新建com.hliedu.ssm.mapper.EmpMapper类
@Repository
public interface EmpMapper {

    List queryEmp();
}
  • 新建com.hliedu.ssm.service.EmpService接口
public interface EmpService {

    List queryEmp();
}
  • 新建com.hliedu.ssm.service.impl.EmpServiceImpl类实现EmpService接口
@Service("empService")
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public List queryEmp() {
        return empMapper.queryEmp();
    }
}
  • 在src/main/resources下新建com/hliedu/ssm/mapper多层次的目录,该目录中的文件最终要和对应的Mapper接口编译到同一个目录下,否则将出现Invalid bound statement (not found)错误





    
    

214、SpringMVC学习笔记(八)【SSM框架整合】2019.09.20_第3张图片

  • 在src/test/java下新建com.hliedu.test.SSMTest类

  • main方法测试

public class SSMTest {
    public static void main(String[] args) {
        ApplicationContext context = new 
                ClassPathXmlApplicationContext("applicationContext.xml");
        EmpService empService = (EmpService)context.getBean("empService");
        System.out.println(empService.queryEmp());
    }
}
  • Junit测试(需导入junit依赖和spring-test依赖)

    junit
    junit
    4.11
    test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
public class SSMTest {

    @Autowired
    ApplicationContext ctx;

    @Test
    public void test() {
        EmpService empService = (EmpService)ctx.getBean("empService");
        System.out.println(empService.queryEmp());
    }
}

6、添加事务支持

  • 加入spring-tx依赖jar包
 
        
            org.springframework
            spring-tx
            ${spring.version}
        
  • 加入tx声明约束
xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
  • applicationContext.xml中加入声明式事务


    



  • 在需要开启事务的类或方法中加入@Transcation注解
    @Transactional
    @Override
    public boolean addEmp() {
        Emp emp1 = new Emp(1005 , "zs" , "程序员");
        empMapper.addEmp(emp1);

        //可能会出现异常的行
        System.out.println(10/0);

        Emp emp2 = new Emp(1006 , "ls" , "项目经理");
        empMapper.addEmp(emp2);
        return false;
    }
  • validation参数校验,加入验证jar包
  
            javax.validation
            validation-api
            2.0.1.Final
        

        
            org.hibernate
            hibernate-validator
            6.0.13.Final
        
  • 给属性加入验证注解

  • 给handler中方法入参加入@Valid注解

7、Controller加入

@RequestMapping("/emp")
@Controller
public class EmpController {
    @Autowired
    private EmpService empService;

    @RequestMapping("query")
    public String query(ModelMap modelMap){
        List emps = empService.queryEmp();
        modelMap.addAttribute("emps" , emps);
        return "empList";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Emp



    ${requestScope.emps}


  • 错误经验

(1)出现查询时无法调用mapper.xml问题Invalid bound statement (not found):

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

  • 如果上述操作都未解决该异常,检查文件路径
    214、SpringMVC学习笔记(八)【SSM框架整合】2019.09.20_第4张图片
  • 出现C3P0连接池问题
om.mchange.v2.c3p0.impl.NewProxyResultSet.isClosed
出现该错误,请对照上面c3p0依赖部分的版本是否为com.mchange下的0.9.5.2

8、参考链接

【01】SSM框架整合

你可能感兴趣的:(Java,SpringMVC)