天天看點

SSM——架構詳細整合流程(IDEA+Maven)一、SSM架構整合說明二、SSM的搭建環境三、編寫Spring架構測試代碼四、Spring整合SpringMVC的架構1五、Spring整合SpringMVC的架構2六、編寫MyBatis架構七、Spring整合MyBatis架構八、Spring整合MyBatis架構配置事務

文章目錄

  • 一、SSM架構整合說明
    • (1)SSM是什麼?
    • (2)為什麼要專門訓練SSM
    • (3)整合思路是什麼?
  • 二、SSM的搭建環境
    • (1)資料庫建立ssm
    • (2)建立maven工程
    • (3)依賴架構
    • (4)log4j.properties
  • 三、編寫Spring架構測試代碼
    • (1)編寫業務類調用測試邏輯
    • TestPersonService
    • Person
    • IPersonService
    • PersonServiceImpl
    • (2)applicationContext.xml
    • IPersonDao
    • PersonDaoImpl
  • 四、Spring整合SpringMVC的架構1
    • (1)web.xml中配置前端控制器DispatcherServlet
    • (2)web.xml中配置編碼過濾器CharacterEncodingFilter
    • (3)web.xml中配置編碼監聽器ContextLoaderListener
    • (4)springmvc.xml
    • (5)啟動伺服器,建立該servlet
  • 五、Spring整合SpringMVC的架構2
    • (1)springmvc中配置視圖解析器
    • (2)PersonController
    • (3)list.jsp頁面進行展示資料
  • 六、編寫MyBatis架構
    • (1)SqlMapConfig.xml
    • (2)IPersonDao.xml
    • (3)TestMyBatis測試
  • 七、Spring整合MyBatis架構
    • (1)Spring整合MyBatis需要添加整合包
    • (2)什麼是mybatis-spring
    • (3)TestDataSource測試
  • 八、Spring整合MyBatis架構配置事務

一、SSM架構整合說明

(1)SSM是什麼?

Spring

Spring是一個開源架構,Spring是于2003 年興起的一個輕量級的Java 開發架構,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前隻可能由EJB完成的事情。然而,Spring的用途不僅限于伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器架構。

SpringMVC

Spring MVC屬于SpringFrameWork的後續産品,已經融合在Spring Web Flow裡面。Spring MVC 分離了控制器、模型對象、分派器以及處理程式對象的角色,這種分離讓它們更容易進行定制。

Mybastis

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。MyBatis是一個基于Java的持久層架構。iBATIS提供的持久層架構包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。

(2)為什麼要專門訓練SSM

要開發一個項目,首先是搭建SSM環境,之後才能開發其他功能

(3)整合思路是什麼?

  • 1.先搭建整合的環境
  • 2.先把Spring的配置搭建完成
  • 3.再使用Spring整合SpringMVC架構
  • 4.最後使用Spring整合MyBatis架構

SSM整合可以使用多種方式,咱們會選擇

XML + 注解

的方式

SSM——架構詳細整合流程(IDEA+Maven)一、SSM架構整合說明二、SSM的搭建環境三、編寫Spring架構測試代碼四、Spring整合SpringMVC的架構1五、Spring整合SpringMVC的架構2六、編寫MyBatis架構七、Spring整合MyBatis架構八、Spring整合MyBatis架構配置事務

二、SSM的搭建環境

(1)資料庫建立ssm

sql

create database ssm;

use ssm;

create table account(
id int primary key auto_increment, name varchar(20),
money double
);
           

(2)建立maven工程

1、File ---->new project ---->Maven ---->勾選 create from archetype (這裡的Project SDK項選擇你自己的JAVA SDK) ---->maven-xxx.quickstart 然後點next–>ssmproject

2、ssmproject ---->new module---->Maven ---->勾選 create from archetype---->maven-xxx.webapp 然後點next–>ssm01

SSM——架構詳細整合流程(IDEA+Maven)一、SSM架構整合說明二、SSM的搭建環境三、編寫Spring架構測試代碼四、Spring整合SpringMVC的架構1五、Spring整合SpringMVC的架構2六、編寫MyBatis架構七、Spring整合MyBatis架構八、Spring整合MyBatis架構配置事務

(3)依賴架構

pom.xml

<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.2.9.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>

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

(4)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, LOGFILE

# 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:\ssm.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
           

三、編寫Spring架構測試代碼

(1)編寫業務類調用測試邏輯

TestPersonService

(src\main\test\service)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestPersonService {
    private static final Logger log=Logger.getLogger(TestPersonService.class.getName());
    @Autowired
    IPersonService personService;
    @Test
    //編寫兩個功能,查找所有的person,儲存一個person
    public void test01(){
       //建立業務對象
      // IPersonService personService=new PersonServiceImpl();
       //調用查詢
        log.info(personService+"");
        List<Person> list=personService.findAll();
        //調用儲存
        log.info(list+"");
        Person person=new Person("jack",100.00);
        personService.savePerson(person);

        List<Person> list1=personService.findAll();
        log.info(list1+"");

    }
    @Test
    public void test02(){
        System.out.println(personService);
    }
           

Person

(src\main\java\domain)

public class Person {
    private Integer id;
    private String name;
    private double money;
    
    toString、空參、全參、Getter and Setter
}
           

IPersonService

(src\main\java\service)

public interface IPersonService {
    //顯示person資料
    List<Person> findAll();
    //儲存person資料
    void savePerson(Person person);

    void savePersons(List<Person> personList);
}
           

PersonServiceImpl

(src\main\java\service\impl)

@Service
@Service
public class PersonServiceImpl implements IPersonService {

    @Autowired
    private IPersonDao iPersonDao;
    @Override
    public List<Person> findAll() {
        List<Person> list=iPersonDao.findAll();
        return list;
    }


    @Override
    public void savePerson(Person person) {
        iPersonDao.save(person);
    }

    @Override
    public void savePersons(List<Person> personList) {

    }

}
           

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

    <!--   設定掃描包,包下設定注解@Service @Repository @Component @AutoWried-->
    <context:component-scan base-package="com.smp">
        <!--    由于springmvc的controller是由springmvc來掃描,需要将controller排除在外-->
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
</beans>
           

IPersonDao

(src\main\java\dao)

public interface IPersonDao {
    //增删改查
    //add save
    //find findById findAll
    //update updateById
    //deleteById daleteByIds

    //select * from person;
    List<Person> findAll();

    //insert into person (name,money)values (?,?)
    void save(Person person);
}
           

PersonDaoImpl

(src\main\java\service\impl)

//@Repository 此類以後講不用 将由Mybatis自動生成

public class PersonDaoImpl implements IPersonDao {
    @Override
    public List<Person> findAll() {
        System.out.println("findAll dao");
        List<Person> list=new ArrayList<>();
        for (int i=0;i<10;i++){
            Person p=new Person("jack"+i,100.00);
        }
        return list;
    }
    @Override
    public void save(Person person) {
        System.out.println("save dao");
    }
}
           

四、Spring整合SpringMVC的架構1

(1)web.xml中配置前端控制器DispatcherServlet

SpringMVC的核心就是DispatcherServlet,DispatcherServlet實質也是一個HttpServlet。DispatcherSevlet負責将請求分發,所有的請求都有經過它來統一分發。

(2)web.xml中配置編碼過濾器CharacterEncodingFilter

在 SpringMVC 中,架構直接給我們提供了一個用來解決

請求和響應的亂碼問題的過濾器 CharacterEncodingFilter

(3)web.xml中配置編碼監聽器ContextLoaderListener

web.xml中的配置檔案中ContextLoaderListener作為監聽器,會

監聽web容器相關事件,在web容器啟動或者關閉時觸發執行響應程式

(4)springmvc.xml

(5)啟動伺服器,建立該servlet

web.xml

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--設定配置檔案的路徑 service dao-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!--1、前端控制器-->
  <!--2、過濾器-->
  <!--3、servlet-->
  <!--4、監聽器-->
  <!--5、springmvc.xml配置檔案-->

  <!--解決中文亂碼的過濾器-->
  <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>


  <!--配置Spring的監聽器,預設隻加載WEB-INF目錄下的applicationContext.xml配置檔案-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--配置前端控制器  controller-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--加載springmvc.xml配置檔案-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--啟動伺服器,建立該servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
           

五、Spring整合SpringMVC的架構2

(1)springmvc中配置視圖解析器

元件掃描,注解驅動

配置springmvc對資源檔案的放行

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

    <!--springmvc是web層 UserController  @controller-->
    <!--打開元件掃描-->
    <context:component-scan base-package="com.smp">
        <!--隻處理帶@Controller的請求-->
        <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/pages"/>
        <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注解的支援 @RequestMapping @RequestBody @ResponseBody-->
    <mvc:annotation-driven/>

</beans>
           

(2)PersonController

(src\main\java\controller)

@Controller
@RequestMapping("/person")
public class PersonController {
    @Autowired
    private IPersonService personService;

    @RequestMapping(path = "/list",method = RequestMethod.GET)
    public String list(Model model){
        //顯示所有的person資料
        List<Person> list=personService.findAll();
        System.out.println("list() list="+list);
        //資料放在Model對象中,
        model.addAttribute("list",list);
        return "list";
    }
}
           

(3)list.jsp頁面進行展示資料

http://localhost:8080/ssm01_war_exploded/person/list

(src\main\webapp\WEB_INF\pages)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1px" width="100%">
    <c:forEach items="${list}" var="person">
        <tr>
            <td>${person.id}</td>
            <td>${person.name}</td>
            <td>${person.money}</td>
        </tr>
    </c:forEach>

</table>

</body>
</html>
           
  • Service由于有junit測試基本不會有bug
  • Web層 使用log4j 列印 請求參數,響應給頁面的資料

六、編寫MyBatis架構

(1)SqlMapConfig.xml

  • 指定四大資訊
  • 指定domain别名
  • 指定映射檔案
<?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>
    <!-- 别名  com.smp.domain.Person  person-->
    <typeAliases>
        <package name="com.smp.domain"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 核心 配置檔案掃描到映射檔案-->
    <mappers>
        <mapper resource="IPersonDao.xml"/>
    </mappers>
</configuration>
           

(2)IPersonDao.xml

(src\main\resources\com\dao)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smp.dao.IPersonDao">

    <!--//select * from person;
    List<Person> findAll();-->
    <select id="findAll" resultType="person">
        select * from person;
    </select>

    <!--//insert into person (name,money)values (?,?)
    void save(Person person);-->
    <insert id="save" parameterType="person">
        insert into person (name,money)values (#{name},#{money})
    </insert>
</mapper>
           

(3)TestMyBatis測試

  • 儲存
  • 查詢

(src\main\test\service)

public class TestMyBatis {
    //最核心對象是session
    private SqlSession session;
    @Before
    public void init() throws IOException {
        // 加載配置檔案
        InputStream in = TestMyBatis.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        // 建立SqlSessionFactory對象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 建立SqlSession對象
        session = factory.openSession();
    }
    @After
    public void destory(){
        session.commit();
        session.close();
    }
    @Test
    public void test01(){
        //查找所有的person
        IPersonDao dao=session.getMapper(IPersonDao.class);
        List<Person> list=dao.findAll();
        System.out.println(list);
    }


    @Test
    public void test02(){
        //儲存新person
        IPersonDao dao=session.getMapper(IPersonDao.class);
        dao.save(new Person("tony",200.00));
    }

}
           

七、Spring整合MyBatis架構

(1)Spring整合MyBatis需要添加整合包

pom.xml

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

(2)什麼是mybatis-spring

MyBatis-Spring 會幫助你将 MyBatis 代碼無縫地整合到 Spring 中。它将允許 MyBatis 參與到 Spring 的事務管理之中,建立映射器 mapper 和 SqlSession 并注入到 bean 中

  • 四大資訊
  • session工廠
  • 資料庫映射

applicationContext.xml

将SqlMapConfig.xml的資料配置到spring中

<!--四大資訊-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm"></property>
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>

    <!--session工廠-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--com.smp.domain.Person person-->
        <property name="typeAliasesPackage" value="com.smp.domain"/>
    </bean>

    <!--IPersonDao.xml IPersonDao.java-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.smp.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
           

(3)TestDataSource測試

(src\main\test\service)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestDataSource {
    private static final Logger log=Logger.getLogger(TestDataSource.class.getName());
    @Autowired
    IPersonDao dao;
    @Test
    public void test01() throws SQLException{
        List<Person> data=dao.findAll();
        System.out.println(data);
    }
    @Test
    public void test02() throws SQLException{
        Person p=new Person("hello",200.00);
        dao.save(p);
    }
}
           

八、Spring整合MyBatis架構配置事務

  • (1)表達式設定有哪些serivce方法需要事務管理
  • (2)通知設定 增删改查業務方法 具體對應的事務
  • (3)運作Test

applicationContext.xml

<!--配置Spring架構聲明式事務管理-->
    <!--配置事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="*" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>

    <!--配置AOP增強-->
    <aop:config>
        <aop:pointcut id="service" expression="execution(* com.smp.service.impl.*ServiceImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="service"/>
    </aop:config>
           

TestPersonService

(src\main\test\service)

@Test
    public void test03(){
        List<Person> personList=new ArrayList<>();
        personList.add(new Person("jack",100.00));
        personList.add(new Person("rose",200.00));
        personList.add(new Person("tony",300.00));

        personService.savePersons(personList);
    }