【纯干货】SSM(Spring + SpringMVC + MyBatis)环境搭建

目录

什么是SSM?

SSM(Spring + SpringMVC + MyBatis)环境搭建

        1.导入依赖

2.搭建Spring 整合MyBatis环境

        MyBatis配置类

根据业务测试环境的搭建

3.加入SpringMVC配置类

       书写服务器和应用控制器测试SpringMVC的环境  

        总结

SSM框架的优点:


什么是SSM?

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

SSM(Spring + SpringMVC + MyBatis)环境搭建

        1.导入依赖

       <!--       Spring上下文容器 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <!--Spring整合MyBatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-typehandlers-jsr310</artifactId>
            <version>1.0.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>

        <!--        事务管理依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <!--        连接池依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.9</version>
        </dependency>


        <!-- junit 测试框架-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--       spring测试框架 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.7.RELEASE</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- MVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <!--tomcat-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>9.0.36</version>
        </dependency>

2.搭建Spring 整合MyBatis环境

        MyBatis配置类

@Configuration
@ComponentScan(basePackages = "com.project")
@EnableTransactionManagement
@MapperScan("com.project.dao")
public class MyBatisConfig {

    // 数据源
    @Bean
    public DataSource getDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        // 完成数据源设置和连接池设置
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
     // 如果url是来自xml配置文件,此时 要把-->&amp;换成 -->&
       dataSource.setUrl("jdbc:mysql://localhost:3306/ssmdemo?characterEncoding=utf-8&allowMultiQueries=true");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setMaxActive(50);
        dataSource.setMinIdle(20);
        dataSource.setMaxWait(1000);
        return dataSource;
    }

    // SqlSessionFactory工厂配置
    @Bean
    public FactoryBean getFactory(){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
       factoryBean.setDataSource(this.getDataSource());
        factoryBean.setConfigLocation(new ClassPathResource("mybatis.cfg.xml"));
        return factoryBean;
    }

    // 事务管理器
    @Bean
    public TransactionManager getTransactionManager(){
        DataSourceTransactionManager trans =
                new DataSourceTransactionManager();
        trans.setDataSource(this.getDataSource());
        return trans;
    }
}

根据业务测试环境的搭建

        业务接口

void addStu(StudentBean stu);

        根据业务方法抽取出数据库操作,给出持久层方法,同时在资源目录下提供同包的映射文件

void addStu(StudentBean stu);

        根据业务接口给出实现类

@Service
@Transactional
public class StudentServiceImpl implements IStudentService {
    @Resource
    private IStudentDao studentDao;

    @Override
    public void addStu(StudentBean studentBean) {
        studentDao.addStu(studentBean);
    }
}

        在test包中利用测试框架完成测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyBatisConfig.class)
public class TestStuService {
    @Resource
    private IStudentService service;
    @Test
    public void testAll(){
        service.addStu(new StudentBean("刘备",
                LocalDate.parse("1000-01-01"),
               "17294724564","男"));
    }
}

3.加入SpringMVC配置类

@Configuration
@EnableWebMvc // 开启类型的自动转换
@Import(MyBatisConfig.class)
public class WebApplicationConfig implements WebMvcConfigurer {
    // 请求映射处理适配器
    @Autowired
    private RequestMappingHandlerAdapter adapter;
    // 设置响应信息的编码集
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter stringHttpMessageConverter
                = (StringHttpMessageConverter)converters.get(1);
        stringHttpMessageConverter.setDefaultCharset(Charset.forName("utf-8"));
    }
    // 提供静态资源的支持 请求的url以/html/开头,表示找类路径的/static/html/下的文件
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/html/**")
                .addResourceLocations("classpath:/static/html/");
    }
    // 注册类型转换器
    @PostConstruct
    public void addConversionConfig() {
        ConfigurableWebBindingInitializer initializer =
                (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();
        if (initializer.getConversionService() != null) {
            GenericConversionService converService = (GenericConversionService) initializer.getConversionService();
            // 添加自定义转换器
            converService.addConverter(new LocalDateTypeChange());
        }
    }
}

       书写服务器和应用控制器测试SpringMVC的环境  

                Tomcat服务器

public class MainServer {
    public MainServer(){
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        tomcat.getConnector();

        Context context = tomcat.addContext("",null);
        DispatcherServlet dispatcherServlet = new DispatcherServlet(
                this.createApplicationContext(context.getServletContext())
        );
        Wrapper servlet = Tomcat.addServlet(context,
                "dispatcherServlet",
                dispatcherServlet);
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/*");

        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

    }

    /**
     * 创建SpringMVC的应用上下文对象
     * @param servletContext servlet 上下文对象
     * @return SpringMVC的应用上下文对象
     */
    public WebApplicationContext createApplicationContext(ServletContext servletContext){
        AnnotationConfigWebApplicationContext ctx =
                new AnnotationConfigWebApplicationContext();
        // 注入配置类
        ctx.register(WebApplicationConfig.class);
        ctx.setServletContext(servletContext);

        ctx.refresh();
        // 用于在非web应用中关闭IoC容器
        ctx.registerShutdownHook();
        return ctx;
    }
    public static void main(String[] args) {
        new MainServer();
    }
}

        提供应用控制器Controller

@Controller // 表示该类为应用控制器 且为SpringBean组件
public class TestController {
    @Resource
    private IStudentService service;
    // 书写该方法的请求路径
    @RequestMapping("test")
    // 把数据写入HttpOutputStream中---既是把数据原样展示
    @ResponseBody
    public String test() {
        return "hello world";
    }
}

        总结

SSM框架的优点:

        1.节省开发时间,典型的三层结构MVC(模型,视图模型,视图和控制),允许开发人员降低重新开发的复杂的问题,及时更改解决方案。对于敏捷开发的新需求,减少开发时间和成本。

        2.成本低:Spring框架是企业型开发使用的成熟的开源框架,节省成本。

        3.良好的扩展性:SSM主流技术有强大的用户社区来支持它,所以这个框架是非常具有扩展性的,可根据特殊应用具有良好的可插入性,避免大多数因为技术问题无法实现的功能的困扰。

        4.良好的可维护性:业务系统往往有新的需求,逻辑层和合理的分离表现层三层架构,降低风险可以进行修改,以最低的需求。对于流行的新技术或系统的老化,系统可能需要进行重构问题,SSM框架重构的成功率比其他框架要高得多。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值