SSM整合(Spring+SpringMVC+Mybatis)

IDEA创建一个webapp工程

选择骨架创建

SSM整合(Spring+SpringMVC+Mybatis)

1、Spring整合Mybatis

  • 让Spring容器去管理 SqlSessionFactory对象
  • 让Spring容器去创建并管理 Mapper接口代理对象
  • 让Mybatis用上Spring的声明式事务

1.1 实现Mybatis的代码

pom.xml文件中导入依赖


    org.mybatis
    mybatis
    3.5.2

    mysql
    mysql-connector-java
    5.1.47

    org.slf4j
    slf4j-log4j12
    1.7.7

    log4j
    log4j
    1.2.17

    org.projectlombok
    lombok
    1.18.22
    provided

编写数据库表

创建pojo包、mapper包、mapper.xml文件,可以用mybatis逆向工程

创建jdbc.properties

目录结构:

SSM整合(Spring+SpringMVC+Mybatis)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true
jdbc.username=root
jdbc.password=123456
jdbc.initialSize=5
jdbc.minIdle=5
jdbc.maxActive=20
jdbc.maxWait=60000

创建log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=my.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug, stdout, file

配置mybatis环境 mybatis-config.xml


测试mybatis——》test的java中创建com/lzy/mybatis/test/MybatisTest.java

添加junit测试依赖


    junit
    junit
    4.11
    test

MybatisTest.java测试

@Slf4j
public class MybatisTest {
    @Test
    public void test() throws IOException {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = factory.openSession();
        AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
        Account account = new Account();
        account.setAccountNo("10086");
        account.setAccountName("小明");
        account.setMoney(new BigDecimal(100000));
        int i = accountMapper.insert(account);
        log.info("{}==>insert account",i);
        sqlSession.commit();
        sqlSession.close();
    }
}

1.2 整合Spring

导入spring依赖


      org.springframework
      spring-context
      5.1.6.RELEASE

      org.springframework
      spring-jdbc
      5.1.6.RELEASE

      org.springframework
      spring-aop
      5.1.6.RELEASE

      org.springframework
      spring-aspects
      5.1.6.RELEASE

      org.springframework
      spring-test
      5.1.6.RELEASE

导入mybatis-spring适配包依赖


    org.mybatis
    mybatis-spring
    2.0.0

  • 配置文件 applicationContext-mapper.xml

  • 测试
public class SpringTest {

    @Test
    public void springMybatisTest(){
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext-mapper.xml");
        AccountMapper accountMapper = ioc.getBean("accountMapper", AccountMapper.class);

        int row = accountMapper.deleteByPrimaryKey(1);
        System.out.println("row = " + row);

    }
}

1.3 Spring配置SqlSessionFactory的bean的详细配置

导入分页插件【可选】


    com.github.pagehelper
    pagehelper
    5.1.10


                            helperDialect=mysql
                            reasonable=true

1.4 声明式事务


package com.lzy.ssm.service.impl;

import com.lzy.ssm.mapper.AccountMapper;
import com.lzy.ssm.pojo.Account;
import com.lzy.ssm.pojo.AccountExample;
import com.lzy.ssm.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;

/**
 * 账户业务层实现
 */
@Service
@Transactional   //开启读写型事务
public class AccountServiceImpl implements IAccountService {

    @Autowired
    AccountMapper accountMapper;

    @Override
    public boolean transfer(String fromNo, String toNo, Double money) {
        //业务代码
    }
}

2、Spring整合SpringMVC

  • Spring有一个容器【dao、service】
  • SpringMVC有一个容器【controller】

2.1 父子容器

Spring和SpringMVC的容器具有父子关系
Spring容器为父容器,SpringMVC为子容器
子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean
如果在子容器中找不到bean的时候可以去父容器查找bean。

2.2 容器启动初始化时机

SpringMVC容器:WEB服务器启动时创建

  • 因为DispathServlet配置load-on-startup为1

Spring容器:WEB服务器启动时创建,在SpringMVC容器创建之前创建

  • 容器应该放在哪个地方最合适
  • 放在ServletContext域对象中

  • 什么时候放呢?

Spring容器创建完成后,就应该放入到ServletContext域中
ServletContext对象在WEB服务器启动时创建,ServletContextListener可以监听ServletContext对象的创建与销毁

2.3 Spring集成WEB环境

导入SpringMVC依赖


    org.springframework
    spring-webmvc
    5.1.6.RELEASE

    com.fasterxml.jackson.core
    jackson-databind
    2.9.5

    javax.servlet
    javax.servlet-api
    3.0.1
    provided

    javax.servlet
    jsp-api
    2.0
    provided

    jstl
    jstl
    1.2

  • src/main/webapp/WEB-INF/web.xml中配置一个 ContextLoaderListener监听器即可

        org.springframework.web.context.ContextLoaderListener

        contextConfigLocation
        classpath*:applicationContext-*.xml

2.4 整合SpringMVC

直接使用SpringMVC即可

  • springmvc.xml

                        application/json;charset=UTF-8
                        text/html;charset=UTF-8

                        application/json;charset=UTF-8
                        text/html;charset=UTF-8

  • web.xml

        org.springframework.web.context.ContextLoaderListener

        contextConfigLocation
        classpath*:applicationContext-*.xml

        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet

            contextConfigLocation
            classpath:springmvc.xml

        1

        DispatcherServlet
        /

        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter

            encoding
            UTF-8

            forceEncoding
            true

        CharacterEncodingFilter
        /*

  • AccountController
package com.lzy.ssm.web;

import com.lzy.ssm.service.AccountService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/account")
@Slf4j
public class AccountController {

    @Autowired
    private IAccountService accountService;

    @GetMapping("/test")
    @ResponseBody
    public String test(){
        log.info("{}", accountService);
        return "success";
    }

}

SSM整合(Spring+SpringMVC+Mybatis)

安装插件


            org.apache.maven.plugins
            maven-compiler-plugin
            3.5.1

                1.8
                1.8
                UTF-8

            org.apache.tomcat.maven
            tomcat7-maven-plugin
            2.2

                80
                /
                UTF-8
                tomcat7

其他依赖【可加】


    com.github.penggle
    kaptcha
    2.3.2

            javax.servlet
            javax.servlet-api

    commons-fileupload
    commons-fileupload
    1.3.3

    commons-io
    commons-io
    2.7

Original: https://www.cnblogs.com/lzy-blogs/p/16353332.html
Author: lzy96158
Title: SSM整合(Spring+SpringMVC+Mybatis)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588554/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 操作系统 文件管理 实验(C语言)

    实验要求和提示 1、利用内存或外存存储结构实现文件系统的树型目录结构,并通过交互式命令完成文件与目录管理。 2 、至少提供如下命令(大小写都能识别):MD(创建空目录)、CD(切换…

    Java 2023年6月5日
    0101
  • JUnit 单元测试方法中启用子线程的问题

    其实junit是将test作为参数传递给了TestRunner的main函数。并通过main函数进行执行。 test函数在main中执行。如果test执行结束,那么main将会调用…

    Java 2023年5月29日
    083
  • Java学习-第一部分-第二阶段-项目实战:坦克大战【1】

    坦克大战【1】 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 坦克大战游戏 为什么写这个项目✔好玩✔涉及到ja…

    Java 2023年6月16日
    085
  • oracle数据库动态拼接查询条件解决方案

    oracle、动态参数传递 在项目中遇到需要动态拼接查询条件的需求,现将解决方案列于下。 一、 sql;gutter:true; select * from table t whe…

    Java 2023年6月13日
    079
  • 多线程与高并发(四)—— 根据 HotSpot 源码讲透 Java 中断机制

    前言 我们首先介绍中断的三个 APPI 及其底层代码,在对方法的实现有了清晰的认知后,再结合场景谈谈什么是中断,以及中断该如何正确使用? 一、中断方法 1. isInterrupt…

    Java 2023年6月9日
    049
  • Java中ArrayList和LinkedList的区别

    在Java中虽然ArrayList和LinkedList都实现了List接口,但是其底层原理不相同。 ArrayList的底层是一个数组,LinkedList的底层是链表。 Arr…

    Java 2023年5月29日
    088
  • RabbitMQ与SpringBoot整合

    前文总结了Dubbo与SpringBoot的整合(https://www.cnblogs.com/cott/p/12373043.html),本文基于这套框架,引入RabbitMQ…

    Java 2023年6月9日
    076
  • 十五、泛型(完结)

    十五、泛型 15.1 泛型的引入 15.1.1 集合添加指定类型元素问题 需求:请编写程序,在 ArrayList 中,添加3个 Dog 对象, Dog 对象含有 name 和 a…

    Java 2023年6月5日
    0128
  • json的String串如何做修改?

    json的String串如何做修改? 1.引入依赖 3.引入 Original: https://www.cnblogs.com/hexf/p/16545945.htmlAutho…

    Java 2023年6月9日
    088
  • Docker系列-docker-compose安装

    1.简介 我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要…

    Java 2023年6月8日
    069
  • Buuctf-Web-[HCTF 2018]WarmUp

    前言 刷题地址:https://buuoj.cn/challenges 首先打开是一个笑脸,查看源代码,如下图发现了,一个文件 一.代码分析 发现是一堆代码,需要PHP代码审计,全…

    Java 2023年6月13日
    083
  • 250_RabbitMQ-集群监控

    集群监控 管理界面监控 tracing日志监控 消息追踪启用与查看 日志追踪 定制自己的监控系统 Zabbix 监控RabbitMQ 集群监控 :::info在广大的互联网行业中R…

    Java 2023年6月7日
    0106
  • Java添加条形码到PDF表格

    条码的应用已深入生活和工作的方方面面。在处理条码时,常需要和各种文档格式相结合。当需要在文档中插入、编辑或者删除条码时,可借助于一些专业的类库工具来实现。本文,以操作PDF文件为例…

    Java 2023年5月29日
    084
  • 0008绩效工资管理系统-java毕设

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    088
  • MySQL 添加用户并授予只能查询权限

    创建用户 create user ‘userName’@’%’ identified by ‘123456’…

    Java 2023年6月8日
    065
  • 7、常用类(String)

    帮助文档 注释 单行 // 多行 / / 文档注释 /* / 帮助文档就是通过文档注释生成的:jdk中提供了Javado c命令。可以将源代码中的文档注释提取出来,构成html格式…

    Java 2023年6月6日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球