SSM - Three framework for integration (integrated transfer case and transaction enhancement).

Preparations:
1.pom.xml need to import dependency jar package.
2. Add the account database table.
3.jdbc profile.

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm_db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
jdbc.username=root
jdbc.password=root

 

1.Mybatis operation Mapper (data layer)

 
1.1 Interface: AccountMapper.java

package com.jxj.mapper;

import org.apache.ibatis.annotations.Param;

public interface AccountMapper {
    /**
     *  转账.
     */
    public void out(@Param("name") String outAccount, @Param("money") double money);

    /**
     *  入账
     */
    public void in(@Param("name") String inAccount, @Param("money") double money);
}

1.2 mybatis-config.xml main configuration file

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

</configuration>

1.3 sql statements profile AccountMapper.java

<?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.jxj.mapper.AccountMapper">

    <!-- 出账 -->
    <update id="out">
        update account set money=money-#{money}
        where name=#{name}
    </update>

    <!-- 入账 -->
    <update id="in">
        update account set money=money+#{money}
        where name=#{name}
    </update>
</mapper>

1.4 spring configuration file applicationContext_dao.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 http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 关联jdbc配置文件.  -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- 连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 配置SqlSessoinFactoryBean( mybatis ) -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 关联mybatis主配置文件 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
        <!-- 关联sql语句的配置文件 -->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" />

        <!-- 给POJO对象 起别名 -->
        <property name="typeAliasesPackage" value="com.jxj.domain" />
    </bean>

    <!-- 扫描包: 将dao的实现类交给spring处理 -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.jxj.mapper" />
    </bean>
</beans>

2.Spring operating the service layer (the layer)

 
2.1 Interface AccountService.java

public interface AccoutService {
    /**
     *   转账.
     */
    public void transfer(String outAccount, String inAccount, double money);
}

2.2 implementation class AccountServiceImpl.java

@Service
public class AccoutServiceImpl implements AccoutService {

    @Autowired
    private AccountMapper accountMapper;

    /**
     *  当前方法进行事务增强.
     */
    @Transactional
    public void transfer(String outAccount, String inAccount, double money) {
        // 执行一组sql语句.
        accountMapper.out(outAccount , money);
        //int i = 1/ 0 ;
        accountMapper.in(inAccount , money);
    }
}

2.3 spring configuration file applicationContext_service.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: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 引入外部配置文件 -->
    <import resource="classpath:spring/applicationContext_dao.xml" />

    <!-- 目标类: 将service的实现类 交给spring处理 -->
    <context:component-scan base-package="com.jxj.service" />

    <!-- 增强类: spring提供的事务管理器. -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 通知spring扫描跟事务相关的注解-->
    <tx:annotation-driven transaction-manager="transactionManager" />
</beans>

3.SpringMVC Operation Controller (control layer)

 
3.1 webapp -> web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

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

  <!-- 告知服务器 , 配置文件的位置 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext_*.xml</param-value>
  </context-param>

  <!-- 目的:服务器启动时 , 实例化spring容器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- 转发servlet(DispatchServlet) -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!-- springmvc配置文件的位置 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc/applicationContext_mvc.xml</param-value>
    </init-param>

    <!-- 当前servlet启动时 被创建. -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

3.2 springmvc profile applicationContext_mvc.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:mvc="http://www.springframework.org/schema/mvc"
       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/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.配置映射处理器 和 适配处理器 -->
    <mvc:annotation-driven />

    <!-- 2.配置自定义处理器 -->
    <context:component-scan base-package="com.jxj.controller" />

    <!-- 3.配置视图解析器 -->
    <bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀: 前后都加 / -->
        <property name="prefix" value="/WEB-INF/views/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

3.3 control layer AccountController.java

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

    @Autowired
    private AccoutService accoutService;

    @RequestMapping("transfer/{out}/{in}/{money}")
    public String transfer(@PathVariable("out")String outAccount ,
                           @PathVariable("in")String inAccount,
                           @PathVariable("money")double money,
                           Model model){
        // 调用业务层 , 完成转账功能.
        accoutService.transfer(outAccount , inAccount , money);
        model.addAttribute("msg","转账人: "+outAccount+",收帐人:"+inAccount+",金额:"+money);
        return "success";
    }
}
Published 107 original articles · won praise 173 · views 120 000 +

Guess you like

Origin blog.csdn.net/qq_42986107/article/details/84503903
Recommended