跳过正文
  1. 文章/
  2. Java/
  3. SpringFramework/
  4. SpringMVC/

4、SSM整合

·1406 字·3 分钟· loading · loading · ·
Java SpringFramework SpringMVC
GradyYoung
作者
GradyYoung
SpringMVC - 点击查看当前系列文章
§ 4、SSM整合 「 当前文章 」

SSM整合
#

SSM整合即Spring + Spring MVC + Mybatis

整合主要依靠mybatis-spring依赖,帮助我们简化的工作、带来的价值如下

  • 可以自动获取并使用Spring容器中beanName = dataSource的数据源
  • SqlSessionFactory创建的工作,使用原生的mybatis需要用配置文件配置mybatis,mybais-spring可以用@Bean代码创建。(虽然mybatis也能用代码构建,不过SqlSessionFactory被spring管理了,在使用的时候只需要@Autowire会更方便)
  • 不再需要每次openSession、close,这些工作在mybatis-spring内部实现了,mybatis-spring帮助我们判断是否要openSession
  • Mapper类变成了bean,需要使用的时候直接@Autowired就可以
  • 提供线程安全的SqlSessionTemplate

整合步骤
#

1、创建Java Enterprise项目
#

创建Java Enterprise项目,选择Maven管理依赖

2、pom.xml
#

<!-- mybatis整合spring依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.4</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.23</version>
</dependency>
<!-- mybatis核心依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
<!-- druid数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.23</version>
</dependency>
<!-- spring mvc依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>
<!-- Servlet API -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- jsp -->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>
<!-- log -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
</dependency>

3、搭建SpringMVC项目
#

这里使用完全注解开发的方式,如果要用配置文件的方式也同理,删除web.xml

SpringMvcConfig替换Spring核心配置文件
#

@Configuration
@ComponentScan("top.ygang.sm_demo")
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {
    // 配置视图解析器
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    // 配置静态资源处理方式,等价于mvc:resources
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

WebInit替换web.xml配置文件
#

public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 指定spring的配置类
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    /**
     * 指定SpringMVC的配置类
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    /**
     * 指定DispatcherServlet的映射规则,即url-pattern
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 乱码过滤器
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceRequestEncoding(true);
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
    }
}

4、建立数据源配置文件
#

resource下建立datasource.properties,用于对数据源进行配置

由于使用的是druid作为数据库连接池,所以就按照druid的配置方式配置即可

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456
initialSize=5
maxActive=10
maxWait=1000
filters=stat,wall,slf4j

5、创建MybatisConfig
#

@Configuration
@MapperScan("top.ygang.sm_demo.dao")
public class MyBatisConfig {

    /**
     * 注入DataSource
     * @return
     * @throws Exception
     */
    @Bean
    public DataSource dataSource() {
        InputStream inputStream = MyBatisConfig.class.getClassLoader().getResourceAsStream("datasource.properties");
        Properties properties = new Properties();
        try {
            properties.load(inputStream);
            inputStream.close();
            return DruidDataSourceFactory.createDataSource(properties);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 配置SqlSessionFactoryBean
     * @param applicationContext
     * @return
     * @throws IOException
     */
    @Bean
    public SqlSessionFactoryBean sessionFactory(ApplicationContext applicationContext) throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        // 配置mapper文件路径
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mappers/*.xml"));
        return sqlSessionFactoryBean;
    }

    /**
     * 配置事务管理器
     * @return
     */
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource());
        return dataSourceTransactionManager;
    }
}

6、创建Entity
#

public class Student {

    private String objId;

    private String name;

    private String age;

    public String getObjId() {
        return objId;
    }

    public void setObjId(String objId) {
        this.objId = objId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "objId='" + objId + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

7、创建Dao
#

@Mapper
@Repository
public interface StudentDao {

    List<Student> selectAll();
}

8、创建Dao映射文件
#

resources/mappers下创建

<?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="top.ygang.sm_demo.dao.StudentDao">

    <select id="selectAll" resultType="top.ygang.sm_demo.entity.Student">
        select * from student
    </select>

</mapper>

9、log配置
#

resource下创建log4j.properties

log4j.rootLogger = DEBUG, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.ImmediateFlush=true
log4j.appender.CONSOLE.Threshold = DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.encoding=UTF-8
log4j.appender.CONSOLE.layout.conversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
SpringMVC - 点击查看当前系列文章
§ 4、SSM整合 「 当前文章 」