举例:购买商品 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】