SSM框架整合

参考教程:B站狂神说Java

1 MAVEN依赖及静态资源过滤

<dependencies>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.19</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.5</version>
    </dependency>
</dependencies>
<!--静态资源过滤-->
<build>
	<resources>
    	<resource>
     		<directory>src/main/java</directory>
       		<includes>
        		<include>**/*.properties</include>
         		<include>**/*.xml</include>
    		</includes>
    		<filtering>false</filtering>
   		</resource>
  		<resource>
   			<directory>src/main/resources</directory>
      		   	<includes>
       	    		<include>**/*.properties</include>
       		 		<include>**/*.xml</include>
       			</includes>
    		<filtering>false</filtering>
		</resource>
	</resources>
</build>

2 Spring整合Mybatis

2.1 mybatis-config.xml

  • 存放Mybatis特有的设置,如别名等(这些设置也可以在spring配置文件中配置)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--别名-->
    <typeAliases>
        <package name="com.ccong.pojo"/>
    </typeAliases>
    <mappers>
        <package name="com.ccong.mapper"/>
    </mappers>
</configuration>

2.2 mapper接口

public interface UserMapper {
    //查询所有用户
    public List<User> queryAllUser();
    //根据id查询一个用户
    public User queryUserById(int id);
    //添加一个用户
    public int insertUser(User user);
    //修改一个用户
    public int updateUserById(User user);
    //删除一个用户
    public int deleteUserById(int id);
}

2.3 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccong.mapper.UserMapper">
    <select id="queryAllUser" resultType="user">
        select * from user;
    </select>
    <select id="queryUserById" resultType="user" parameterType="int">
        select * from user u where u.id = ${id};
    </select>
    <insert id="insertUser" parameterType="user">
        insert into user (name, pwd, creat_time) values (${name}, ${pwd}, NOW());
    </insert>
    <update id="updateUserById" parameterType="user">
        update user set name = ${name}, pwd = ${pwd} where id = ${id};
    </update>
    <delete id="deleteUserById" parameterType="int">
        delete from user where id = ${id};
    </delete>
</mapper>

2.4 spring-mapper.xml(Spring整合Mybatis的配置文件)

  • dataSource中的属性为上面database.properties中对应的属性
<!--读取配置文件-->
<context:property-placeholder location="classpath:database.properties"/>
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!--SqlSessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
    <property name="dataSource" ref="dataSource"/>
    <!--绑定mybatis配置文件-->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

2.5 实现mapper接口的三种方法

2.5.1 使用SqlSessionTemplate

  • spring-mapper.xml:
<!--方式一:使用SqlSessionTemplate-->
<bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
  • UserMapperImpl1:
    • 使用自动装配时需将@Autowired放在set方法上,否则无法获取userMapper
@Repository
public class UserMapperImpl1 implements UserMapper {
    private SqlSessionTemplate sqlSessionTemplate;
    private UserMapper userMapper;
    @Autowired
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
        userMapper = sqlSessionTemplate.getMapper(UserMapper.class);
    }
    @Override
    public List<User> queryAllUser() {
        return userMapper.queryAllUser();
    }
    @Override
    public User queryUserById(int id) {
        return userMapper.queryUserById(id);
    }
    @Override
    public int insertUser(User user) {
        return userMapper.insertUser(user);
    }
    @Override
    public int updateUserById(User user) {
        return userMapper.updateUserById(user);
    }
    @Override
    public int deleteUserById(int id) {
        return userMapper.deleteUserById(id);
    }
}

2.5.2 继承SqlSessionDaoSupport

  • UserMapperImpl2:
    • SqlSessionDaoSupport本质与第一种方法一样,只是SqlSessionDaoSupport帮我们完成了SqlSessionTemplate的装配,并提供了一系列方法
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
    @Override
    public List<User> queryAllUser() {
        return getSqlSession().getMapper(UserMapper.class).queryAllUser();
    }
    @Override
    public User queryUserById(int id) {
        return getSqlSession().getMapper(UserMapper.class).queryUserById(id);
    }
    @Override
    public int insertUser(User user) {
        return getSqlSession().getMapper(UserMapper.class).insertUser(user);
    }
    @Override
    public int updateUserById(User user) {
        return getSqlSession().getMapper(UserMapper.class).updateUserById(user);
    }
    @Override
    public int deleteUserById(int id) {
        return getSqlSession().getMapper(UserMapper.class).deleteUserById(id);
    }
}
  • spring-mapper.xml:
    • 由于本质与第一种方法一样,因此也需要注入SqlSessionFactory
<!--方式二:实现类继承SqlSessionDaoSupport并注入sqlSessionFactory-->
<bean id="userMapperImpl2" class="com.ccong.mapper.UserMapperImpl2">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

2.5.3 通过扫描接口动态实现和注入

  • spring-mapper.xml:
    • 通过该配置可自动完成实现和注入,该配置会产生一个与接口同名的bean,并可用与自动装配
<!--方式三:配置mapper接口扫描包,动态实现接口并注入-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--注入sqlSessionFactory-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!--扫描包-->
    <property name="basePackage" value="com.ccong.mapper"/>
</bean>

2.6 Spring AOP完成声明式事务织入

  • service接口
public interface UserService {
    //查询所有用户
    public List<User> queryAllUser();
    //根据id查询一个用户
    public User queryUserById(int id);
    //添加一个用户
    public int insertUser(User user);
    //修改一个用户
    public int updateUserById(User user);
    //删除一个用户
    public int deleteUserById(int id);
}
  • UserServiceImpl
    • 实现类中的UserMapper自动装配的时上面第三种方法生成的userMapper对象
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
    @Override
    public List<User> queryAllUser() {
        return userMapper.queryAllUser();
    }
    @Override
    public User queryUserById(int id) {
        return userMapper.queryUserById(id);
    }
    @Override
    public int insertUser(User user) {
        return userMapper.insertUser(user);
    }
    @Override
    public int updateUserById(User user) {
        return userMapper.updateUserById(user);
    }
    @Override
    public int deleteUserById(int id) {
        return userMapper.deleteUserById(id);
    }
}
  • spring-service.xml
<!--配置声明式事务-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<!--定义事务为通知-->
<tx:advice transaction-manager="transactionManager" id="advice">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
<!--aop完成事务织入-->
<aop:config>
    <aop:pointcut id="pointcut" expression="execution(* com.ccong.service.*.*(..))"/>
    <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
</aop:config>

3 Spring整合SpringMVC

3.1 web.xml

<!--spring mvc核心配置-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!--乱码问题-->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!--session过期时间-->
<session-config>
    <session-timeout>15</session-timeout>
</session-config>

3.2 spring-mvc.xml

<mvc:annotation-driven/>
<context:component-scan base-package="com.ccong.controller"/>
<!--静态资源过滤-->
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

3.3 Controller

@RestController
public class UserController {
    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    @GetMapping("/user/query")
    public String queryAll(){
        return userService.queryAllUser().toString();
    }
}

4 整合3个spring配置文件

  • applicationContext.xml
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.ccong"/>

    <import resource="spring-mapper.xml"/>
    <import resource="spring-service.xml"/>
    <import resource="spring-mvc.xml"/>

</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值