Java框架_SSM_day01_SSM的初次整合

11 篇文章 0 订阅
10 篇文章 0 订阅

目录

一、SSM整合步骤

1.1 整合步骤概述

1.1.1 整合思路

1.1.2 整合步骤

1.2 开发准备

1.2.1 导入 jar 包

1.2.2 创建实体类

1.2.3 创建 Dao

1.2.4 创建 Service

1.2.5 创建 Controller

1.3 搭建 Spring 的环境

1.3.1 applicationContext.xml

1.3.2 log4j.properties

1.3.3 AccountService.java

1.3.4 测试类

1.4 SpringMVC 框架

1.4.1 web.xml

1.4.2 springmvc.xml

1.4.3 AccountController.java

1.4.4 index.jsp

1.4.5 success.jsp

1.5 Spring 整合 SpringMVC 框架

1.5.1 web.xml

1.5.2 AccountController.java

1.6 Mybatis 框架

1.6.1 sqlMapConfig.xml

1.6.2 AccountDao.java

1.6.3 测试 TestMybatis.java

1.7 Spring 整合 Mybatis 框架

1.7.1 applicationContext.xml

1.7.2 TestSpringMybatis

1.7.3 AccountServiceImpl.java

1.7.4 AccountController.java

1.7.5 success.jsp

1.8 配置 Spring 的声明式事务管理

1.8.1 applicationContext.xml

1.8.2 index.jsp

1.8.3 AccountController.java

1.9 让 SpringMVC 扫描,不让 Spring 扫描

1.9.1 springmvc.xml

1.9.2 applicationContext.xml

1.9.3 删除 web.xml 中的监听器


一、SSM整合步骤

1.1 整合步骤概述

1.1.1 整合思路

(1):先搭建整合的环境

(2):先把Spring的配置搭建完成

(3):再使用Spring整合SpringMVC框架

(4):最后使用Spring整合MyBatis框架

1.1.2 整合步骤

(1)开发准备

第一步:创建web工程

第二步:导入jar包

第三步:创建实体类

第四步:创建Dao

第五步:创建Service

第六步:创建Controller

(2)搭建Spring的环境

第一步:applicationContext.xml

第二步:log4j.properties文件

第三步:AccountService.java

第四步:测试类

(3)搭建SpringMVC环境

第一步:web.xml

第二步:springmvc.xml

第三步:AccountController.java

第四步:index.jsp

第五步:success.jsp(WEB-INF/pages/success.jsp)

(4)Spring整合SpringMVC框架

第一步:web.xml

第二步:AccountController.java(注入Service)

(5)Mybatis框架

第一步:sqlMapConfig.xml

第二步:AccountDao.java(AccountDao.xml)

第三步:测试TestMybatis.java

(6)Spring整合Mybatis框架

第一步:applicationContext.xml(重点)

第二步:AccountDao.java

第三步:TestSpringMybatis.java

第四步:AccountServiceImpl.java

第五步:AccountController.java

第六步:success.jsp

(7)配置Spring的声明式事务处理

第一步:applicationContext.xml

第二步:index.jsp(新增表单)

第三步:AccountController.java(保存)

1.2 开发准备

1.2.1 导入 jar 包

<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>test</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>

<build>
    <finalName>ssm</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
        </plugins>
</build>

1.2.2 创建实体类

public class Account implements Serializable{
    private Integer id;
    private String name;
    private Double money;
}

1.2.3 创建 Dao

public interface AccountDao {

    public List<Account> findAll();

    public void saveAccount(Account account);

}

1.2.4 创建 Service

AccountService.java 接口

public interface AccountService {

    public List<Account> findAll();

    public void saveAccount(Account account);

}

AccountServiceImpl.java 实现类

public class AccountServiceImpl implements AccountService {

    AccountDao accountDao;

    @Override
    public List<Account> findAll() {
        System.out.println("执行 AccountService 的 findAll 方法...");
        List<Account> list = accountDao.findAll();
    }

    @Override
    public int saveAccount(Account account) {
        System.out.println("执行 AccountService 的 saveAccount 方法...");
        accountDao.saveAccount(account);
    }
}

1.2.5 创建 Controller

public class AccountController {

    AccountService accountService;

    public String findAll(){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        List<Account> list = accountService.findAll();
        System.out.println(list);
        return "success";
    }

    public String saveAccount(Account account){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        accountService.saveAccount(account);
        return "success";
    }

}

1.3 搭建 Spring 的环境

1.3.1 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"
       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.cpz.ssm">
        <!-- 忽略某些注解,把Controller给忽略了 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
</beans>

1.3.2 log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

1.3.3 AccountService.java

@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {

}

1.3.4 测试类

public class TestService {
    // 测试 Service 层
    @Test
    public void testService(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService accountService = ac.getBean("accountService", AccountService.class);
        accountService.findAll();
    }
}

1.4 SpringMVC 框架

1.4.1 web.xml

<!--1:springmvc的核心控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--2:解决post请求的乱码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

1.4.2 springmvc.xml

<!-- 1:组件扫描配置,扫描controller的注解,排除Service注解的扫描 -->
    <context:component-scan base-package="com.cpz.ssm">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <!-- 排除Service注解的扫描,让spring扫描,否则事务可能会失效 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan>

    <!-- 2:配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!-- 3:设置静态资源不过滤,可以使用:-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

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

1.4.3 AccountController.java

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

    @Autowired
    AccountService accountService;

    @RequestMapping(value = "/findAll")
    public String findAll(){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        List<Account> list = accountService.findAll();
        System.out.println(list);
        return "success";
    }

1.4.4 index.jsp

<h3>账号操作</h3>
<a href="account/findAll">查询所有账号</a>

1.4.5 success.jsp

<h1>访问成功</h1>

1.5 Spring 整合 SpringMVC 框架

1.5.1 web.xml

    <!-- 配置Spring的监听器,默认加载WEB-INF下的applicationContext.xml -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 该监听器默认只加载WEB-INF下的applicationContext.xml配置文件,通过contextConfigLocation改变位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

 

1.5.2 AccountController.java

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

    @Autowired
    AccountService accountService;

    @RequestMapping(value = "/findAll")
    public String findAll(){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        List<Account> list = accountService.findAll();
        System.out.println(list);
        return "success";
    }
}

1.6 Mybatis 框架

1.6.1 sqlMapConfig.xml

<?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>

    <!--2:别名-->
    <typeAliases>
        <package name="com.cpz.ssm.domain"></package>
    </typeAliases>

    <!--1:连接数据库-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql:///ssm"></property>
                <property name="username" value="root"></property>
                <property name="password" value="1234"></property>
            </dataSource>
        </environment>
    </environments>

    <!--3:映射文件-->
    <mappers>
        <!--配置文件,注解-->
        <package name="com.cpz.ssm.dao"></package>
    </mappers>

</configuration>

1.6.2 AccountDao.java

public interface AccountDao {

    @Select(value = "select * from account")
    public List<Account> findAll();

    @Insert(value = "insert into account (name,money) values (#{name},#{money})")
    public int saveAccount(Account account);

}

1.6.3 测试 TestMybatis.java

public class TestMybatis {

    // 查询所有
    @Test
    public void findAll() throws IOException {
        InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class); // 反射
        List<Account> list = accountDao.findAll();
        for (Account account : list) {
            System.out.println(account);
        }
        sqlSession.close();
        is.close();
    }

    // 新增
    @Test
    public void save() throws IOException {
        InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class); // 反射
        Account account = new Account();
        account.setName("张三");
        account.setMoney(200d);
        int row = accountDao.saveAccount(account);
        System.out.println(row);
        sqlSession.commit(); // 提交
        sqlSession.close();
        is.close();
    }
}

1.7 Spring 整合 Mybatis 框架

1.7.1 applicationContext.xml

       把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中

    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

    <!-- 1:配置C3P0的连接池对象 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--2:创建spring整合mybatis的核心对象,SqlSessionFactoryBean
        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
            * 通过spring加载mybatis的配置文件(1个)
        <property name="mapperLocations">
            <set>
                <value>classpath:com/itheima/ssm/dao/*Dao.xml</value>
            </set>
        </property>
            * 通过spring加载mybatis的映射文件(多个)
        <property name="typeAliasesPackage" value="com.itheima.ssm.domain"></property>
            * 别名
    -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--3:添加一个映射配置,让Dao被spring管理,可以在Service上注入Dao-->
    <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cpz.ssm.dao"></property>
    </bean>

1.7.2 TestSpringMybatis

public class TestSpringMybatis {

    @Test
    public void testFindAllSpring(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService accountService = ac.getBean("accountService", AccountService.class);
        List<Account> list = accountService.findAll();
        System.out.println(list);
    }
}

1.7.3 AccountServiceImpl.java

@Service(value = "accountService")
public class AccountServiceImpl implements AccountService {

    @Autowired
    AccountDao accountDao;

    @Override
    public List<Account> findAll() {
        System.out.println("执行 AccountService 的 findAll 方法...");
        List<Account> list = accountDao.findAll();
        return list;
    }

    @Override
    public int saveAccount(Account account) {
        System.out.println("执行 AccountService 的 saveAccount 方法...");
        int row = accountDao.saveAccount(account);
        return row;
    }
}

1.7.4 AccountController.java

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

    @Autowired
    AccountService accountService;

    @RequestMapping(value = "/findAll")
    public String findAll(Model model){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        List<Account> list = accountService.findAll();
        System.out.println(list);
        model.addAttribute("list",list);
        return "success";
    }

    @RequestMapping(value = "/saveAccount")
    public String saveAccount(Account account){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        accountService.saveAccount(account);
        return "success";
    }

}

1.7.5 success.jsp

<h1>访问成功!!</h1>
<c:forEach items="${list}" var="account">
    ${account.id}---${account.name}---${account.money}<br/>
</c:forEach>

1.8 配置 Spring 的声明式事务管理

1.8.1 applicationContext.xml

    <!--配置spring的声明式事务处理-->
    <!--1:事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--2:配置通知(xml、注解),让通知关联事务,同时对切入点方法进行细化-->
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="*" read-only="true"></tx:method>
        </tx:attributes>
    </tx:advice>
    <!--3:配置aop,让通知关联切入点-->
    <aop:config>
        <aop:pointcut id="myPointcut" expression="execution(* com.cpz.ssm.service..*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut"></aop:advisor>
    </aop:config>

1.8.2 index.jsp

<form action="account/saveAccount" method="post">
    姓名:<input type="text" name="name"/><br/>
    金额:<input type="text" name="money"/><br/>
    <input type="submit" value="保存"/><br/>
</form>

1.8.3 AccountController.java

    @RequestMapping(value = "/saveAccount")
    public String saveAccount(Account account){
        System.out.println("执行了 AccountController 中的 findAll 方法...");
        int row = accountService.saveAccount(account);
        return "redirect:/account/findAll";
    }

1.9 让 SpringMVC 扫描,不让 Spring 扫描

1.9.1 springmvc.xml

<?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">

    <!-- 1:组件扫描配置,扫描controller的注解,排除Service注解的扫描 -->
    <context:component-scan base-package="com.cpz.ssm">
        <!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
        <!-- 排除Service注解的扫描,让spring扫描,否则事务可能会失效 -->
        <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>-->
    </context:component-scan>

    <!-- 2:配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!-- 3:设置静态资源不过滤,可以使用:-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

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

    <!--只要web容器启动,加载了springmvc,同时加载所有spring的配置-->
    <import resource="classpath:applicationContext.xml"></import>
</beans>

1.9.2 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"
       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">

    <!--注解开发,组件扫描
        spring整合springmvc的时候,出现问题
            * 如果springmvc.xml,使用组件扫描(@Controller,@Service...)
            * 如果applicationContext.xml中,使用组件扫描(@Controller,@Service...)
            * 扫描发现出现重复现象,导致有些组件失灵,事务也会有问题
                解决方案一:applicationContext.xml文件
                        不扫描@Controller
                            springmvc.xml文件
                        扫描@Controller,不扫描Service
                解放方案二:
                        让SpringMVC扫描,不让Spring扫描
    -->
    <!--开启注解扫描-->
    <!--<context:component-scan base-package="com.cpz.ssm">-->
        <!--忽略某些注解,把Controller忽略-->
        <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
    <!--</context:component-scan>-->

    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

    <!-- 1:配置C3P0的连接池对象 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--2:创建spring整合mybatis的核心对象,SqlSessionFactoryBean
        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
            * 通过spring加载mybatis的配置文件(1个)
        <property name="mapperLocations">
            <set>
                <value>classpath:com/itheima/ssm/dao/*Dao.xml</value>
            </set>
        </property>
            * 通过spring加载mybatis的映射文件(多个)
        <property name="typeAliasesPackage" value="com.itheima.ssm.domain"></property>
            * 别名
    -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--3:添加一个映射配置,让Dao被spring管理,可以在Service上注入Dao-->
    <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cpz.ssm.dao"></property>
    </bean>

    <!--配置spring的声明式事务处理-->
    <!--1:事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--2:配置通知(xml、注解),让通知关联事务,同时对切入点方法进行细化-->
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="*" read-only="true"></tx:method>
        </tx:attributes>
    </tx:advice>
    <!--3:配置aop,让通知关联切入点-->
    <aop:config>
        <aop:pointcut id="myPointcut" expression="execution(* com.cpz.ssm.service..*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut"></aop:advisor>
    </aop:config>

    <!--<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>-->
</beans>

1.9.3 删除 web.xml 中的监听器

<!-- 配置Spring的监听器,默认加载WEB-INF下的applicationContext.xml -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 该监听器默认只加载WEB-INF下的applicationContext.xml配置文件,通过contextConfigLocation改变位置 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值