准备工作:
1.pom.xml导入需要的依赖jar包.
2.数据库添加账户表.
3.jdbc配置文件.
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操作mapper( 数据层 )
1.1 接口: 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
<?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语句配置文件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配置文件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操作service层( 业务层 )
2.1 接口AccountService.java
public interface AccoutService {
/**
* 转账.
*/
public void transfer(String outAccount, String inAccount, double money);
}
2.2 实现类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配置文件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操作controller( 控制层 )
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配置文件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 控制层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";
}
}