项目结构
pom.xml
父工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jty</groupId>
<artifactId>springmvc</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>servlet</module>
<module>spring-mvc</module>
<module>tx</module>
<module>xmltx</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!--web子工程需要-->
<!-- <dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
</dependencies>
</project>
子工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springmvc</artifactId>
<groupId>com.jty</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>xmltx</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
</dependencies>
</project>
entity
# 1
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Account {
private Integer id;
private Integer userId;
private Integer money;
}
# 2
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Order {
private Integer id;
private Integer userId;
private String commodityCode;
private Integer count;
private Integer money;
}
# 3
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Storage {
private Integer id;
private String commodityCode;
private Integer count;
private Integer unitPrice;
}
Mapper(Dao)
# 1
public interface AccountMapper {
/**
* s
* @param account
*/
void update(Account account);
}
# 2
public interface OrderMapper {
/**
* s
* @param order
*/
void add(Order order);
}
# 3
public interface StorageMapper {
/**
* s
* @param storage
*/
void update(Storage storage);
}
Service
public class OrderService {
@Autowired
OrderMapper orderMapper;
@Autowired
StorageMapper storageMapper;
@Autowired
AccountMapper accountMapper;
@Transactional(rollbackFor = Exception.class)
public void doOrder(){
//bz0001库存减20
storageMapper.update(new Storage(null,"bz0001",100-20,100));
//增加20份订单
orderMapper.add(
new Order(null,0001,"bz0001",20,20*100));
accountMapper.update(new Account(null,0001,1500-20*100));
}
}
Main
public class XmlMain{
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
OrderService orderService = applicationContext.getBean(OrderService.class);
orderService.doOrder();
}
}
Mapper.xml
AccountMapper.xml
<?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="tx.mapper.AccountMapper">
<insert id="update" parameterType="tx.entity.Account">
update account_tbl t1
set t1.money =#{money}
<where>
t1.user_id = #{userId}
</where>
</insert>
</mapper>
OrderMapper.xml
<?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="tx.mapper.OrderMapper">
<insert id="add" parameterType="tx.entity.Order">
insert into order_tbl
values(null,#{userId},#{commodityCode},#{count},#{money})
</insert>
</mapper>
StorageMapper.xml
<?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="tx.mapper.StorageMapper">
<insert id="update" parameterType="tx.entity.Storage">
update storage_tbl t1
set t1.count =#{count}
<where>
t1.commodity_code = #{commodityCode}
</where>
</insert>
</mapper>
配置文件
application.xml
<?xml version="1.0" encoding="GBK"?>
<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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<!--组件扫描-->
<context:component-scan base-package="tx.*"/>
<context:property-placeholder location="classpath:jdbc-config.properties" ignore-unresolvable="true"/>
<!--详细配置参数见 com.alibaba.druid.pool.DruidAbstractDataSource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
</bean>
<!--配置sqlSessionFactoryBean对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--mybatis核心配置文件-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!--配置Mapper对象-->
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" scope="singleton">
<property name="mapperInterface" value="tx.mapper.AccountMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" scope="singleton">
<property name="mapperInterface" value="tx.mapper.OrderMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" scope="singleton">
<property name="mapperInterface" value="tx.mapper.StorageMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!--注册OrderService bean-->
<bean class="tx.OrderService"/>
</beans>
jdbc-config.properties
#mysql jdbc 连接配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_tx_db?useUnicode=true&characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456
mybatis.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>
<mappers>
<mapper resource="mapperAccountMapper.xml"/>
<mapper resource="mapperOrderMapper.xml"/>
<mapper resource="mapperStorageMapper.xml"/>
</mappers>
</configuration>
注:本文仅做记录