SSM框架整合(一)

系列文章目录

1.spring 系列文章
2.springmvc 系列文章
3.mtbatis 系列文章


前言

常见的javaee三层结构,表现层、业务层、数据层,这三层都可以分别用springmvc、spring、mybatis来协助搭建和开发,借助springmvc主要帮助在于可以协助我们统一的、简易化的对请求进行处理和响应。借助spring主要使用IoC和Aop,帮助我们创建和管理对象,对事物的管理和快速的对方法的增强,这些其实我们自己也可以做,但个人在使用到spring后,确实能明显的感受到代码的简化和编码效率的提高,完全可以专注在逻辑上的编码,其他的就可以都丢给spring帮我们管理。mybatis就是完全替代jdbc了,只需配置好映射关系和sql语句,就可以投入使用了。

我个人在整合SSM框架时,主要遇到的两个难点:
①spring整合mybatis,需要把mybatis的相关对象的创建都交给springIoC来管理。
②spring配置文件的加载。


一、环境搭建

1.springmvc环境单独搭建

tomcat、servlet、jsp项目
pom文件

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
    <mysql.version>5.1.6</mysql.version>
    <mybatis.version>3.4.5</mybatis.version>
  </properties>

  <dependencies>

    <!-- spring -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.8</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- log start -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <!-- log end -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
  </dependencies>

先用到springmvc先搭建好表现层
springmvc的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

	<!--告诉springmvc需要扫描哪些位置的注解-->
    <context:component-scan base-package="com.mediacomm">
    	<!--告诉springmvc只需要关注哪些注解-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--过滤静态资源-->
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/images/" mapping="/images/**" />
    <mvc:resources location="/js/" mapping="/js/**" />

    <!--开启SpringMVC注解的支持-->
    <mvc:annotation-driven/>
</beans>

注意这里我已经用到spring的注解来实现创建对象和依赖注入了

@Controller
@RequestMapping("/request")
public class First {

    @Autowired
    UserServiceImpl userService;

    @RequestMapping(path = "/findAll")
    public String findAllUser(){
        System.out.println("执行findall.......");
        List<User> users = userService.findAllUser();
        for (User user: users
             ) {
            System.out.println(user);
        }
        return "success";
    }

    @RequestMapping(path = "/addUser")
    public String addUser(User user){
        System.out.println(user);
        userService.saveUser(user);
        return "success";
    }
}

主页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<body>
    <h2>Hello World!</h2><br>
    <a href="request/findAll">查找所有用户</a><br>
    <form action="request/addUser" method="post">
        姓名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        地址:<input type="text" name="address"><br>
        存款:<input type="text" name="money"><br>
        <input type="submit" name="提交"><br>
    </form>
</body>
</html>

2.mybatis环境单独搭建

注意这里我已经用到spring的注解来实现创建对象和依赖注入了
dao层

@Repository
public interface UserDao {

    @Select("select * from user")
    List<User> findAll();

    @Insert("insert into user(username,password,address,money) values(#{username},#{password},#{address},#{money})")
    void insertUser(User user);
}

service层

@Service("userService")
public class UserServiceImpl {

    @Autowired
    private UserDao userDao;

    public List<User> findAllUser(){
        return userDao.findAll();
    }

    public void saveUser(User user){
        userDao.insertUser(user);
    }
}

二、spring整合mybatis

一个配置文件搞定

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <context:component-scan base-package="com.mediacomm">
    	<!--这里是配置了个忽略属性,忽略指定的注解,这样不会被创建两次,因为在springmvc中用到了@Controller已经为我们创建了-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--Spring整合MyBatis框架-->
    <!--配置连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///day17"/>
        <property name="user" value="root"/>
        <property name="password" value="123456"/>
    </bean>

	<!--这里都用到了mybatis为我们提供的org.mybatis.spring的包,就是专用来整合到spring中的-->
    <!--配置SqlSessionFactory工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
    </bean>
	
	<!--扫描指定的dao接口,并会为我们创建代理对象-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.mediacomm.dao"/>
    </bean>

	<!--这是spring提供的控制事务的配置-->
    <!--事务-->
    <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <tx:advice id="advice" transaction-manager="dataSourceTransactionManager">
        <tx:attributes>
            <tx:method name="find*" propagation="SUPPORTS"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="pt1" expression="execution(* com.mediacomm.service.*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="pt1"></aop:advisor>
    </aop:config>

二、加载spring配置文件

首先需要知道servletContext,其次需要了解有个ServletContextListener的监听器
servletContext是一个作用于全局的(整个应用的)域对象,它在tomcat服务器启动时创建,在tomcat服务器关闭时销毁,而对应其监听器ServletContextListener,也就是监听其生命周期的一个接口。
在spring中有个实现了ServletContextListener的类ContextLoaderListener,所以也不需要创建了,直接用这个监听器即可。
在项目的web.xml文件中配置

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationspringconfig.xml</param-value>
  </context-param>

三、测试

在这里插入图片描述

[2021-08-04 11:20:59,748] Artifact ssm:war: Artifact is deployed successfully
[2021-08-04 11:20:59,749] Artifact ssm:war: Deploy took 10,760 milliseconds
执行findall.......
User{username='admin', password='admin', address='新西兰', money=667.0, id=1}
User{username='ffff', password='123456', address='水星', money=1333.0, id=2}
User{username='改改', password='321', address='成交价..', money=1111.0, id=4}
User{username='aaa', password='112', address='火星', money=1111.0, id=10}
User{username='ww', password='xx', address='11', money=1111.0, id=11}
User{username='gsrg', password='zz', address='gggg', money=1111.0, id=12}
User{username='12', password='wef', address='hhhh', money=1111.0, id=13}
User{username='ag', password='123kj1231lkr', address='xxx', money=1111.0, id=14}
User{username='wer', password='afef', address='火星', money=1111.0, id=15}
User{username='gge', password='zfb', address='dd', money=1111.0, id=16}
User{username='admin', password='123321', address='我拒绝人家', money=123.0, id=18}

四、补充

突发奇想,不想通过mybatis提供的mybatis-spring的包来整合
总所周知,mybatis的应用就常见的就四步,那么我也把这四个对象都交给spring来管理不就行了,不过缺点就是多个mybatis的配置文件,而每多个dao的接口类就要在spring中创建一个,暂时就研究到这。

		// 加载配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 创建SqlSession对象
        SqlSession session = factory.openSession();
        // 获取到代理对象
        AccountDao dao = session.getMapper(AccountDao.class);

尝试后记录一下配置的步骤,测试后是同样可行的
spring配置文件中如此配置:

	<!--尝试自己配置mybatis交由springIoC管理-->
    <bean id="inputStream" class="org.apache.ibatis.io.Resources" factory-method="getResourceAsStream">
        <constructor-arg value="Mybatis.xml"></constructor-arg>
    </bean>
    <bean id="builder" class="org.apache.ibatis.session.SqlSessionFactoryBuilder"></bean>
    <bean id="sqlSessionFactory" factory-bean="builder" factory-method="build">
        <constructor-arg ref="inputStream"></constructor-arg>
    </bean>
    <bean id="session" factory-bean="sqlSessionFactory" factory-method="openSession"></bean>
    <bean id="userDao" factory-bean="session" factory-method="getMapper">
        <constructor-arg type="java.lang.Class" value="com.mediacomm.dao.UserDao"></constructor-arg>
    </bean>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值