举例:购买商品 trans_sale 项目
本例要实现购买商品,模拟用户下订单,向订单表添加销售记录,从商品表减少库存。
实现步骤:
Step0:创建数据库表
创建两个数据库表 sale , goods
sale 销售表:
goods 商品表:
goods 表数据:
Step1: maven 依赖 pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.26</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.26</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.26</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
</dependencies>
<!--插件:-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Step2:创建实体类
创建实体类 Sale 与 Goods
Step3:定义 dao 接口
定义两个 dao 的接口 SaleDao , GoodsDao
SaleDao :
GoodsDao :
Step4:定义 dao 接口对应的 sql 映射文件
SaleDao.xml
GoodsDao.xml
Step5:定义异常类
定义 service 层可能会抛出的异常类 NotEnoughException
Step6:定义 Service 接口
定义 Service 接口 BuyGoodsService
Step7:定义 service 的实现类
定义 service 层接口的实现类 BuyGoodsServiceImpl
1)类定义
2)Dao 属性
3)Buy 方法
Step8:修改 Spring 配置文件内容
声明Mybatis 对象
声明业务层对象
Step9:定义测试类
定义测试类 MyTest。现在就可以在无事务代理的情况下运行了
运行程序并查看数据库:
测试代码可有三种类型:
① 正常购买【id和amount匹配】
② 无此商品【没有库里面的id】
③ 库存不足【amount大于原有的amount】