From ab76949109e2cfc3811c45a68cdd0ab4400728f8 Mon Sep 17 00:00:00 2001 From: wuqing Date: Thu, 21 Nov 2019 10:18:58 +0800 Subject: [PATCH 1/5] =?UTF-8?q?save:=20spring=E4=BA=8B=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 6 +- .idea/encodings.xml | 13 ---- .idea/inspectionProfiles/Project_Default.xml | 36 --------- pom.xml | 1 + transaction-demo/doc/README.md | 16 ++++ transaction-demo/doc/transaction.PNG | Bin 0 -> 138520 bytes ...45\350\257\206\346\200\273\347\273\223.md" | 3 + ...51\345\235\221\346\214\207\345\215\227.md" | 1 + transaction-demo/pom.xml | 72 ++++++++++++++++++ transaction-demo/sql/account.sql | 36 +++++++++ transaction-demo/sql/order.sql | 16 ++++ transaction-demo/sql/product.sql | 20 +++++ .../java/com/wyfdc/go/TransactionDemoApp.java | 21 +++++ .../go/transaction/demo/dto/Account.java | 35 +++++++++ .../go/transaction/demo/dto/OrderDTO.java | 39 ++++++++++ .../go/transaction/demo/dto/Product.java | 39 ++++++++++ .../demo/mapper/AccountMapper.java | 19 +++++ .../transaction/demo/mapper/OrderMapper.java | 15 ++++ .../demo/mapper/ProductMapper.java | 19 +++++ .../demo/service/AccountService.java | 19 +++++ .../transaction/demo/service/BizService.java | 13 ++++ .../demo/service/OrderService.java | 14 ++++ .../demo/service/ProductService.java | 18 +++++ .../demo/service/impl/AccountServiceImpl.java | 39 ++++++++++ .../demo/service/impl/BizServiceImpl.java | 44 +++++++++++ .../demo/service/impl/OrderServiceImpl.java | 29 +++++++ .../demo/service/impl/ProductServiceImpl.java | 44 +++++++++++ .../demo/utils/ConnectionUtil.java | 31 ++++++++ .../src/main/resources/application.properties | 16 ++++ .../src/main/resources/banner.txt | 12 +++ .../main/resources/mybatis/AccountMapper.xml | 25 ++++++ .../main/resources/mybatis/OrderMapper.xml | 10 +++ .../main/resources/mybatis/ProductMapper.xml | 32 ++++++++ .../go/SpringTransactionApplicationTests.java | 16 ++++ .../test/java/com/wyfdc/go/jdbc/JDBCTest.java | 40 ++++++++++ 35 files changed, 759 insertions(+), 50 deletions(-) delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 transaction-demo/doc/README.md create mode 100644 transaction-demo/doc/transaction.PNG create mode 100644 "transaction-demo/doc/\347\237\245\350\257\206\346\200\273\347\273\223.md" create mode 100644 "transaction-demo/doc/\350\270\251\345\235\221\346\214\207\345\215\227.md" create mode 100644 transaction-demo/pom.xml create mode 100644 transaction-demo/sql/account.sql create mode 100644 transaction-demo/sql/order.sql create mode 100644 transaction-demo/sql/product.sql create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/TransactionDemoApp.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/BizService.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java create mode 100644 transaction-demo/src/main/resources/application.properties create mode 100644 transaction-demo/src/main/resources/banner.txt create mode 100644 transaction-demo/src/main/resources/mybatis/AccountMapper.xml create mode 100644 transaction-demo/src/main/resources/mybatis/OrderMapper.xml create mode 100644 transaction-demo/src/main/resources/mybatis/ProductMapper.xml create mode 100644 transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java create mode 100644 transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b25b916..68d8560 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,13 +7,16 @@ - + + + + @@ -27,6 +30,7 @@ + diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 6e01d7c..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 6560a98..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7af1f51..7fcec3f 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ zuul hello hello-service-api + transaction-demo diff --git a/transaction-demo/doc/README.md b/transaction-demo/doc/README.md new file mode 100644 index 0000000..04e6e14 --- /dev/null +++ b/transaction-demo/doc/README.md @@ -0,0 +1,16 @@ +- http://localhost:22001/account/userID/lisi/userName/%E6%9D%8E%E5%9B%9B/balance/200 +- http://localhost:22001/account/userID/zhangsan001 + + +- http://localhost:22001/product/name/book1/code/CODE001/price/100.89/amount/1002 +- http://localhost:22001/product/products?id=1&code=CODE001 +- http://localhost:22001/product/products?code=CODE001 +- http://localhost:22001/product/products?id=3 + + +- http://localhost:22001/order/save/zs/1/2 + + +- http://localhost:22001/biz/transaction/yes +- http://localhost:22001/biz/transaction/no +- \ No newline at end of file diff --git a/transaction-demo/doc/transaction.PNG b/transaction-demo/doc/transaction.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b09a2942ccbff5328df75f7facaa5a8f58f18489 GIT binary patch literal 138520 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 z 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 + + + + springcloudcc-study + com.wyfdc.go + 1.0-SNAPSHOT + + 4.0.0 + + transaction-demo + + transaction-demo + + http://www.example.com + + + UTF-8 + 1.8 + 1.8 + + + + + common + com.wyfdc.go + 1.0-SNAPSHOT + + + junit + junit + 4.12 + test + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.0.0 + + + + mysql + mysql-connector-java + runtime + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + src/main/java + + resources/mybatis/*.xml + + + + + + + diff --git a/transaction-demo/sql/account.sql b/transaction-demo/sql/account.sql new file mode 100644 index 0000000..95600d8 --- /dev/null +++ b/transaction-demo/sql/account.sql @@ -0,0 +1,36 @@ +USE test; + +DROP TABLE account; + +CREATE TABLE IF NOT EXISTS account ( + id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + user_id VARCHAR(255) NOT NULL COMMENT '用户id', + user_name VARCHAR(255) NOT NULL COMMENT '用户姓名', + balance INT NOT NULL DEFAULT 0.0, + PRIMARY KEY (id) +) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; + + +ALTER TABLE test.`account` ADD UNIQUE (`user_id`); + +SHOW INDEX FROM test.`account`; + +SELECT * FROM test.`account`; + +UPDATE test.account a SET a.balance = 890 WHERE a.user_id = 'zhangsan001'; + +DELETE FROM test.account WHERE account.id=2; + +INSERT INTO account VALUES (1,"zhangsan001","张三",100); + +INSERT INTO account(user_id,user_name,balance) VALUES ("zhangsan2","张三",200); + +INSERT INTO account(user_id,user_name,balance) VALUES ("lisi001","李四",200); + + +SELECT id AS id, + user_name AS userName, + user_id AS userID, + balance AS balance + FROM account a + WHERE a.user_id='lisi'; \ No newline at end of file diff --git a/transaction-demo/sql/order.sql b/transaction-demo/sql/order.sql new file mode 100644 index 0000000..234b21c --- /dev/null +++ b/transaction-demo/sql/order.sql @@ -0,0 +1,16 @@ +USE test; + +DROP TABLE t_order; + +CREATE TABLE IF NOT EXISTS t_order ( + id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + product_id INT(11) NOT NULL COMMENT '产品表product主键', + user_id VARCHAR(255) NOT NULL COMMENT '用id', + amount INT NOT NULL DEFAULT 0 COMMENT '购买数量', + PRIMARY KEY (id) +) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + + +SELECT * FROM test.`t_order`; + +INSERT INTO t_order(product_id,user_id,amount) VALUES(1000,1000,22); diff --git a/transaction-demo/sql/product.sql b/transaction-demo/sql/product.sql new file mode 100644 index 0000000..e1cd6e9 --- /dev/null +++ b/transaction-demo/sql/product.sql @@ -0,0 +1,20 @@ +USE test; + +DROP TABLE Product; + +CREATE TABLE IF NOT EXISTS Product ( + product_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + NAME VARCHAR(255) NOT NULL COMMENT '产品名称', + CODE VARCHAR(255) NOT NULL COMMENT '产品编码', + price DOUBLE NOT NULL DEFAULT 0.0, + amount INT NOT NULL DEFAULT 0, + PRIMARY KEY (product_id) +) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; + +ALTER TABLE Product ADD UNIQUE INDEX(NAME,CODE); + +SHOW INDEX FROM test.Product; + +SELECT * FROM test.`Product`; + + diff --git a/transaction-demo/src/main/java/com/wyfdc/go/TransactionDemoApp.java b/transaction-demo/src/main/java/com/wyfdc/go/TransactionDemoApp.java new file mode 100644 index 0000000..8e28186 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/TransactionDemoApp.java @@ -0,0 +1,21 @@ +package com.wyfdc.go; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * Hello world! + * + */ +@SpringBootApplication +@EnableTransactionManagement +@MapperScan(basePackages="com.wyfdc.go.transaction.demo.mapper") +public class TransactionDemoApp +{ + public static void main( String[] args ) + { + SpringApplication.run(TransactionDemoApp.class,args); + } +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java new file mode 100644 index 0000000..83d61b9 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java @@ -0,0 +1,35 @@ +package com.wyfdc.go.transaction.demo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Account { + + //主键 + private Long id; + + //用户id + private String userID; + + //用户名称 + private String userName; + + //余额 + private int balance; + + public Account(String userID, + String userName, + int balance) { + this.userID = userID; + this.userName = userName; + this.balance = balance; + } + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java new file mode 100644 index 0000000..59bc23f --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java @@ -0,0 +1,39 @@ +package com.wyfdc.go.transaction.demo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @Author: + */ +@Data +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class OrderDTO { + + private String id; + + private String userID; + + private String productID; + + //数量 + private int amount; + + public OrderDTO(String userID, + String productID, + int amount){ + this.userID = userID; + this.productID = productID; + this.amount = amount; + } + + + + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java new file mode 100644 index 0000000..b0115e6 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java @@ -0,0 +1,39 @@ +package com.wyfdc.go.transaction.demo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * @Author: + */ +@Data +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Product { + //主键 + private Long productID; + + //产品名称 + private String name; + + //产品编码 + private String code; + + //价格 + private double price; + + // 数量 + private int amount; + + public Product(String name, String code, double price, int amount) { + this.name = name; + this.code = code; + this.price = price; + this.amount = amount; + } +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java new file mode 100644 index 0000000..39ce784 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java @@ -0,0 +1,19 @@ +package com.wyfdc.go.transaction.demo.mapper; + +import com.wyfdc.go.transaction.demo.dto.Account; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @Author: + */ +@Mapper +public interface AccountMapper { + + public void saveAccount(@Param(value = "account") Account account); + + public Account getAccountByUserId(@Param("userID") String userID); + + public void updateAccountBalance(@Param("userID") String userID, + @Param("balance") int balance); +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java new file mode 100644 index 0000000..ab156af --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java @@ -0,0 +1,15 @@ +package com.wyfdc.go.transaction.demo.mapper; + +import com.wyfdc.go.transaction.demo.dto.OrderDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @Author: + */ +@Mapper +public interface OrderMapper { + + public void saveOrder(@Param("orderDTO") OrderDTO orderDTO); + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java new file mode 100644 index 0000000..bcd4061 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java @@ -0,0 +1,19 @@ +package com.wyfdc.go.transaction.demo.mapper; + +import com.wyfdc.go.transaction.demo.dto.Product; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @Author: + */ +@Mapper +public interface ProductMapper { + + public void saveProduct(Product product); + + public List getProduct(@Param("productID") String productID,@Param("code") String code); + + public void updateProduct(@Param("productID") String productID,@Param("amount") int amount); +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java new file mode 100644 index 0000000..d221c61 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java @@ -0,0 +1,19 @@ +package com.wyfdc.go.transaction.demo.service; + + +import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.dto.Account; + +/** + * @Author: + */ +public interface AccountService { + + public void saveAccount(Account account); + + public Account getAccountByUserId(String userID); + + public void updateAccountBalance(String userID, int balance) throws BizException; + + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/BizService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/BizService.java new file mode 100644 index 0000000..4b1f05f --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/BizService.java @@ -0,0 +1,13 @@ +package com.wyfdc.go.transaction.demo.service; + +import com.wyfdc.go.common.exception.BizException; +/** + * @Author: + */ +public interface BizService { + + public void insertWithoutTransaction() throws BizException; + + public void insertWithTransaction() throws BizException; + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java new file mode 100644 index 0000000..0b41a1e --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java @@ -0,0 +1,14 @@ +package com.wyfdc.go.transaction.demo.service; + +import com.wyfdc.go.transaction.demo.dto.OrderDTO; + +/** + * @Author: + */ +public interface OrderService { + + public void saveOrder(OrderDTO orderDTO); + + public String buyProduct(String userID, String productID); + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java new file mode 100644 index 0000000..83d0b45 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java @@ -0,0 +1,18 @@ +package com.wyfdc.go.transaction.demo.service; + +import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.dto.Product; +import java.util.List; + +/** + * @Author: + */ +public interface ProductService { + + public void saveProduct(Product product) throws BizException; + + public void updateProduct(String productID, int amount) throws BizException; + + public List getProduct(String productID, String code) throws BizException; + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java new file mode 100644 index 0000000..aae6a03 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java @@ -0,0 +1,39 @@ +package com.wyfdc.go.transaction.demo.service.impl; + +import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.dto.Account; +import com.wyfdc.go.transaction.demo.mapper.AccountMapper; +import com.wyfdc.go.transaction.demo.service.AccountService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Author: woo + */ +@Service +public class AccountServiceImpl implements AccountService { + + @Autowired + private AccountMapper accountMapper; + + @Override + public void saveAccount(Account account) { + accountMapper.saveAccount(account); + } + + @Override + public Account getAccountByUserId(String userID) { + return accountMapper.getAccountByUserId(userID); + } + + @Override + public void updateAccountBalance(String userID, int balance) throws BizException { + if(StringUtils.isEmpty(userID)|| StringUtils.isEmpty(balance)){ + throw new BizException("param is null"); + } + accountMapper.updateAccountBalance(userID,balance); + } + + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java new file mode 100644 index 0000000..25f8308 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java @@ -0,0 +1,44 @@ +package com.wyfdc.go.transaction.demo.service.impl; + +import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.service.AccountService; +import com.wyfdc.go.transaction.demo.service.BizService; +import com.wyfdc.go.transaction.demo.service.ProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: + */ +@Service +public class BizServiceImpl implements BizService { + + @Autowired + private AccountService accountService; + + @Autowired + private ProductService productService; + + /** + * 由于没有加入事务注解 导致被更新掉 + * @throws BizException + */ + @Override + public void insertWithoutTransaction() throws BizException { + accountService.updateAccountBalance("zhangsan001",80); + productService.updateProduct(null,19); + } + + /** + * 加入事务注解 没有被更新掉 + * @throws BizException + */ + @Override + @Transactional(rollbackFor = BizException.class) + public void insertWithTransaction() throws BizException { + accountService.updateAccountBalance("zhangsan001",50); + productService.updateProduct(null,9); + } + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java new file mode 100644 index 0000000..2fcfd20 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java @@ -0,0 +1,29 @@ +package com.wyfdc.go.transaction.demo.service.impl; + +import com.wyfdc.go.transaction.demo.dto.OrderDTO; +import com.wyfdc.go.transaction.demo.mapper.OrderMapper; +import com.wyfdc.go.transaction.demo.service.AccountService; +import com.wyfdc.go.transaction.demo.service.OrderService; +import com.wyfdc.go.transaction.demo.service.ProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Author: + */ +@Service +public class OrderServiceImpl implements OrderService { + + @Autowired + private OrderMapper orderMapper; + + @Override + public void saveOrder(OrderDTO orderDTO) { + orderMapper.saveOrder(orderDTO); + } + + @Override + public String buyProduct(String userID, String productID) { + return null; + } +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..3f7f77c --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java @@ -0,0 +1,44 @@ +package com.wyfdc.go.transaction.demo.service.impl; + +import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.dto.Product; +import com.wyfdc.go.transaction.demo.mapper.ProductMapper; +import com.wyfdc.go.transaction.demo.service.ProductService; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Author: + */ +@Service +public class ProductServiceImpl implements ProductService { + + @Autowired + private ProductMapper productMapper; + + @Override + public void saveProduct(Product product) throws BizException { + productMapper.saveProduct(product); + } + + @Override + public void updateProduct(String productID, int amount) throws BizException { + if(StringUtils.isEmpty(productID)){ + throw new BizException("All params are null"); + } + productMapper.updateProduct(productID,amount); + } + + + @Override + public List getProduct(String productID,String code) throws BizException { + if(StringUtils.isEmpty(productID)&& StringUtils.isEmpty(code)){ + throw new BizException("All params are null"); + } + return productMapper.getProduct(productID, code); + } + + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java new file mode 100644 index 0000000..5c906a4 --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java @@ -0,0 +1,31 @@ +package com.wyfdc.go.transaction.demo.utils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +/** + * @Author: + */ +//TODO 应该写成线程池的形式,且属性应该予以注入 +public class ConnectionUtil { + + public static Connection getConnection() { + Connection conn = null; + try { + // 1、加载驱动 + Class.forName("com.mysql.jdbc.Driver"); + // 2、获取connection + conn = DriverManager.getConnection( + "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC", + "root", "123456"); + System.out.println(conn); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } + return conn; + } + +} diff --git a/transaction-demo/src/main/resources/application.properties b/transaction-demo/src/main/resources/application.properties new file mode 100644 index 0000000..9d8dfd3 --- /dev/null +++ b/transaction-demo/src/main/resources/application.properties @@ -0,0 +1,16 @@ +#应用级别 +spring.application.name=spring-transaction-demo +server.port=15007 + +# 数据源配置 +spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=123456 +spring.datasource.driver-class-name=com.mysql.jdbc.Driver + +# log +logging.level.root=info +logging.level.com.wyfdc.go.transaction.demo.mapper=debug + +# mybatis +mybatis.mapperLocations=classpath:mybatis/*.xml diff --git a/transaction-demo/src/main/resources/banner.txt b/transaction-demo/src/main/resources/banner.txt new file mode 100644 index 0000000..6c1fbba --- /dev/null +++ b/transaction-demo/src/main/resources/banner.txt @@ -0,0 +1,12 @@ + + /$$$$$$ /$$ /$$$$$$$ /$$ /$$$$$$ /$$ /$$ /$$ /$$ /$$ /$$$$$$$$ /$$ /$$ + /$$__ $$ |__/ | $$__ $$ | $$ /$$__ $$ | $$$ /$$$ | $$ | $$ |__/ |__ $$__/ | $$ |__/ +| $$ \__/ /$$$$$$ /$$$$$$ /$$ /$$$$$$$ /$$$$$$ | $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$ |__/ \ $$ | $$$$ /$$$$ /$$ /$$| $$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$$$$$$ | $$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$ /$$$$$$$ +| $$$$$$ /$$__ $$ /$$__ $$| $$| $$__ $$ /$$__ $$| $$$$$$$ /$$__ $$ /$$__ $$|_ $$_/ /$$$$$$/ | $$ $$/$$ $$| $$ | $$| $$__ $$ |____ $$|_ $$_/ | $$ /$$_____/ | $$ /$$__ $$|____ $$| $$__ $$ /$$_____/ |____ $$ /$$_____/|_ $$_/ | $$ /$$__ $$| $$__ $$ + \____ $$| $$ \ $$| $$ \__/| $$| $$ \ $$| $$ \ $$| $$__ $$| $$ \ $$| $$ \ $$ | $$ /$$____/ | $$ $$$| $$| $$ | $$| $$ \ $$ /$$$$$$$ | $$ | $$| $$$$$$ | $$| $$ \__/ /$$$$$$$| $$ \ $$| $$$$$$ /$$$$$$$| $$ | $$ | $$| $$ \ $$| $$ \ $$ + /$$ \ $$| $$ | $$| $$ | $$| $$ | $$| $$ | $$| $$ \ $$| $$ | $$| $$ | $$ | $$ /$$| $$ | $$\ $ | $$| $$ | $$| $$ | $$ /$$__ $$ | $$ /$$| $$ \____ $$ | $$| $$ /$$__ $$| $$ | $$ \____ $$ /$$__ $$| $$ | $$ /$$| $$| $$ | $$| $$ | $$ +| $$$$$$/| $$$$$$$/| $$ | $$| $$ | $$| $$$$$$$| $$$$$$$/| $$$$$$/| $$$$$$/ | $$$$/| $$$$$$$$ | $$ \/ | $$| $$$$$$$| $$$$$$$/| $$$$$$$ | $$$$/| $$ /$$$$$$$/ | $$| $$ | $$$$$$$| $$ | $$ /$$$$$$$/| $$$$$$$| $$$$$$$ | $$$$/| $$| $$$$$$/| $$ | $$ + \______/ | $$____/ |__/ |__/|__/ |__/ \____ $$|_______/ \______/ \______/ \___/ |________/ |__/ |__/ \____ $$|_______/ \_______/ \___/ |__/|_______/ |__/|__/ \_______/|__/ |__/|_______/ \_______/ \_______/ \___/ |__/ \______/ |__/ |__/ + | $$ /$$ \ $$ /$$ | $$ + | $$ | $$$$$$/ | $$$$$$/ + |__/ \______/ \______/ diff --git a/transaction-demo/src/main/resources/mybatis/AccountMapper.xml b/transaction-demo/src/main/resources/mybatis/AccountMapper.xml new file mode 100644 index 0000000..c2b8edd --- /dev/null +++ b/transaction-demo/src/main/resources/mybatis/AccountMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + update test.account a set a.balance = #{balance} + where a.user_id=#{userID} + + + + INSERT INTO account(user_id,user_name,balance) VALUES (#{account.userID},#{account.userName},#{account.balance}) + + + diff --git a/transaction-demo/src/main/resources/mybatis/OrderMapper.xml b/transaction-demo/src/main/resources/mybatis/OrderMapper.xml new file mode 100644 index 0000000..045ded6 --- /dev/null +++ b/transaction-demo/src/main/resources/mybatis/OrderMapper.xml @@ -0,0 +1,10 @@ + + + + + + INSERT INTO t_order(product_id,user_id,amount) + VALUES(#{orderDTO.productID},#{orderDTO.userID},#{orderDTO.amount}); + + + diff --git a/transaction-demo/src/main/resources/mybatis/ProductMapper.xml b/transaction-demo/src/main/resources/mybatis/ProductMapper.xml new file mode 100644 index 0000000..4c1e082 --- /dev/null +++ b/transaction-demo/src/main/resources/mybatis/ProductMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + update test.Product a set a.amount = #{amount} + where a.product_id=#{productID} + + + + INSERT INTO Product VALUES + (#{productID}, #{name},#{code},#{price},#{amount}) + + + diff --git a/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java b/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java new file mode 100644 index 0000000..35356ee --- /dev/null +++ b/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java @@ -0,0 +1,16 @@ +package com.wyfdc.go; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringTransactionApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java new file mode 100644 index 0000000..773306e --- /dev/null +++ b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java @@ -0,0 +1,40 @@ +package com.wyfdc.go.jdbc; + +import com.wyfdc.go.TransactionDemoApp; +import com.wyfdc.go.transaction.demo.utils.ConnectionUtil; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @Author: + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes= TransactionDemoApp.class) +public class JDBCTest { + + @Test + public void testJDBC(){ + Connection conn = ConnectionUtil.getConnection(); + int i = 0; + String sql = "INSERT INTO account(user_id,user_name,balance) VALUES (?,?,?)"; + PreparedStatement pstmt; + try { + pstmt = (PreparedStatement) conn.prepareStatement(sql); + pstmt.setString(1, "wangwu001"); + pstmt.setString(2, "王五"); + pstmt.setInt(3, 1000); + i = pstmt.executeUpdate(); + pstmt.close(); + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + System.out.println(" ---->>> " + i); + } + +} From 3d6b7fa7aa3845e4a203b0c756dc38bafb6e5e8d Mon Sep 17 00:00:00 2001 From: wuqing Date: Wed, 1 Apr 2020 17:08:44 +0800 Subject: [PATCH 2/5] update --- .idea/misc.xml | 3 ++- transaction-demo/pom.xml | 25 +++++++++++-------- transaction-demo/sql/account.sql | 1 - transaction-demo/sql/order.sql | 2 -- transaction-demo/sql/product.sql | 1 - .../go/transaction/demo/dto/Account.java | 2 ++ .../go/transaction/demo/dto/OrderDTO.java | 2 ++ .../go/transaction/demo/dto/Product.java | 2 ++ .../demo/service/AccountService.java | 6 ++--- .../demo/utils/ConnectionUtil.java | 25 +++++++++++++++---- .../src/main/resources/application.properties | 2 +- .../go/SpringTransactionApplicationTests.java | 15 ++++++++--- .../test/java/com/wyfdc/go/jdbc/JDBCTest.java | 8 +++++- .../demo/service/impl/BizServiceImplTest.java | 16 ++++++++++++ 14 files changed, 80 insertions(+), 30 deletions(-) create mode 100644 transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index c4c3c6e..dfdeb58 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,6 +8,7 @@ @@ -61,7 +62,7 @@ - + \ No newline at end of file diff --git a/transaction-demo/pom.xml b/transaction-demo/pom.xml index d980378..fec487e 100644 --- a/transaction-demo/pom.xml +++ b/transaction-demo/pom.xml @@ -35,18 +35,21 @@ test - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 2.0.0 - - - mysql - mysql-connector-java - runtime - + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.0.0 + + + + + org.mariadb.jdbc + mariadb-java-client + 2.4.2 + + diff --git a/transaction-demo/sql/account.sql b/transaction-demo/sql/account.sql index 95600d8..df0f9e3 100644 --- a/transaction-demo/sql/account.sql +++ b/transaction-demo/sql/account.sql @@ -1,6 +1,5 @@ USE test; -DROP TABLE account; CREATE TABLE IF NOT EXISTS account ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', diff --git a/transaction-demo/sql/order.sql b/transaction-demo/sql/order.sql index 234b21c..4f28867 100644 --- a/transaction-demo/sql/order.sql +++ b/transaction-demo/sql/order.sql @@ -1,7 +1,5 @@ USE test; -DROP TABLE t_order; - CREATE TABLE IF NOT EXISTS t_order ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', product_id INT(11) NOT NULL COMMENT '产品表product主键', diff --git a/transaction-demo/sql/product.sql b/transaction-demo/sql/product.sql index e1cd6e9..903ecea 100644 --- a/transaction-demo/sql/product.sql +++ b/transaction-demo/sql/product.sql @@ -1,6 +1,5 @@ USE test; -DROP TABLE Product; CREATE TABLE IF NOT EXISTS Product ( product_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java index 83d61b9..bb3b8f0 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java @@ -4,6 +4,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.Table; + /** * @Author: */ diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java index 59bc23f..f3abb12 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java @@ -6,6 +6,8 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import javax.persistence.Table; + /** * @Author: */ diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java index b0115e6..eddd2e5 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java @@ -6,6 +6,8 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import javax.persistence.Table; + /** * @Author: */ diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java index d221c61..599b9ef 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java @@ -9,11 +9,11 @@ */ public interface AccountService { - public void saveAccount(Account account); + void saveAccount(Account account); - public Account getAccountByUserId(String userID); + Account getAccountByUserId(String userID); - public void updateAccountBalance(String userID, int balance) throws BizException; + void updateAccountBalance(String userID, int balance) throws BizException; } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java index 5c906a4..c4f2fe5 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/utils/ConnectionUtil.java @@ -1,5 +1,8 @@ package com.wyfdc.go.transaction.demo.utils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; @@ -8,18 +11,30 @@ * @Author: */ //TODO 应该写成线程池的形式,且属性应该予以注入 +@Component public class ConnectionUtil { - public static Connection getConnection() { + @Value("${spring.datasource.url}") + private String url; + + @Value("${spring.datasource.driverClassName}") + private String driverName; + + @Value("${spring.datasource.username}") + private String username; + + @Value("${spring.datasource.password}") + private String password; + + public Connection getConnection() { Connection conn = null; try { // 1、加载驱动 - Class.forName("com.mysql.jdbc.Driver"); + Class.forName(url); // 2、获取connection conn = DriverManager.getConnection( - "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC", - "root", "123456"); - System.out.println(conn); + driverName, + username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { diff --git a/transaction-demo/src/main/resources/application.properties b/transaction-demo/src/main/resources/application.properties index 9d8dfd3..748884c 100644 --- a/transaction-demo/src/main/resources/application.properties +++ b/transaction-demo/src/main/resources/application.properties @@ -6,7 +6,7 @@ server.port=15007 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 -spring.datasource.driver-class-name=com.mysql.jdbc.Driver +spring.datasource.driverClassName=org.mariadb.jdbc.Driver # log logging.level.root=info diff --git a/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java b/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java index 35356ee..bd14a0c 100644 --- a/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java +++ b/transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java @@ -1,16 +1,23 @@ package com.wyfdc.go; +import com.wyfdc.go.transaction.demo.service.BizService; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -@RunWith(SpringRunner.class) -@SpringBootTest + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes= TransactionDemoApp.class) public class SpringTransactionApplicationTests { + @Autowired + private BizService bizService; + @Test - public void contextLoads() { + public void insertWithTransaction() { + bizService.insertWithTransaction(); } } diff --git a/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java index 773306e..9c3895a 100644 --- a/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java +++ b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java @@ -7,6 +7,7 @@ import java.sql.SQLException; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -17,9 +18,12 @@ @SpringBootTest(classes= TransactionDemoApp.class) public class JDBCTest { + @Autowired + private ConnectionUtil connectionUtil; + @Test public void testJDBC(){ - Connection conn = ConnectionUtil.getConnection(); + Connection conn = connectionUtil.getConnection(); int i = 0; String sql = "INSERT INTO account(user_id,user_name,balance) VALUES (?,?,?)"; PreparedStatement pstmt; @@ -33,6 +37,8 @@ public void testJDBC(){ conn.close(); } catch (SQLException e) { e.printStackTrace(); + }finally { + } System.out.println(" ---->>> " + i); } diff --git a/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java b/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java new file mode 100644 index 0000000..76b5a05 --- /dev/null +++ b/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java @@ -0,0 +1,16 @@ +package com.wyfdc.go.transaction.demo.service.impl; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class BizServiceImplTest { + + @Test + public void insertWithoutTransaction() { + } + + @Test + public void insertWithTransaction() { + } +} \ No newline at end of file From a441803a67bf7422b39bc5c4ba47edb20b92ea93 Mon Sep 17 00:00:00 2001 From: wuqing Date: Wed, 1 Apr 2020 19:09:02 +0800 Subject: [PATCH 3/5] add tkmybatis --- transaction-demo/sql/account.sql | 35 ------------- transaction-demo/sql/order.sql | 9 ++-- transaction-demo/sql/product.sql | 11 ++-- transaction-demo/sql/t_user.sql | 15 ++++++ .../go/transaction/demo/dto/OrderDTO.java | 41 --------------- .../go/transaction/demo/dto/OrderPO.java | 51 +++++++++++++++++++ .../demo/dto/{Product.java => ProductPO.java} | 18 ++++--- .../demo/dto/{Account.java => UserPO.java} | 13 +++-- .../demo/mapper/AccountMapper.java | 14 ++--- .../transaction/demo/mapper/OrderMapper.java | 8 ++- .../demo/mapper/ProductMapper.java | 14 ++--- .../demo/service/AccountService.java | 9 +--- .../demo/service/OrderService.java | 5 +- .../demo/service/ProductService.java | 6 +-- .../demo/service/impl/AccountServiceImpl.java | 22 +++----- .../demo/service/impl/BizServiceImpl.java | 7 ++- .../demo/service/impl/OrderServiceImpl.java | 16 +++--- .../demo/service/impl/ProductServiceImpl.java | 25 +++------ .../main/resources/mybatis/AccountMapper.xml | 4 +- .../main/resources/mybatis/OrderMapper.xml | 2 +- .../main/resources/mybatis/ProductMapper.xml | 2 +- .../go/SpringTransactionApplicationTests.java | 23 --------- .../demo/service/impl/BizServiceImplTest.java | 19 ++++++- 23 files changed, 152 insertions(+), 217 deletions(-) delete mode 100644 transaction-demo/sql/account.sql create mode 100644 transaction-demo/sql/t_user.sql delete mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java create mode 100644 transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderPO.java rename transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/{Product.java => ProductPO.java} (59%) rename transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/{Account.java => UserPO.java} (64%) delete mode 100644 transaction-demo/src/test/java/com/wyfdc/go/SpringTransactionApplicationTests.java diff --git a/transaction-demo/sql/account.sql b/transaction-demo/sql/account.sql deleted file mode 100644 index df0f9e3..0000000 --- a/transaction-demo/sql/account.sql +++ /dev/null @@ -1,35 +0,0 @@ -USE test; - - -CREATE TABLE IF NOT EXISTS account ( - id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', - user_id VARCHAR(255) NOT NULL COMMENT '用户id', - user_name VARCHAR(255) NOT NULL COMMENT '用户姓名', - balance INT NOT NULL DEFAULT 0.0, - PRIMARY KEY (id) -) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; - - -ALTER TABLE test.`account` ADD UNIQUE (`user_id`); - -SHOW INDEX FROM test.`account`; - -SELECT * FROM test.`account`; - -UPDATE test.account a SET a.balance = 890 WHERE a.user_id = 'zhangsan001'; - -DELETE FROM test.account WHERE account.id=2; - -INSERT INTO account VALUES (1,"zhangsan001","张三",100); - -INSERT INTO account(user_id,user_name,balance) VALUES ("zhangsan2","张三",200); - -INSERT INTO account(user_id,user_name,balance) VALUES ("lisi001","李四",200); - - -SELECT id AS id, - user_name AS userName, - user_id AS userID, - balance AS balance - FROM account a - WHERE a.user_id='lisi'; \ No newline at end of file diff --git a/transaction-demo/sql/order.sql b/transaction-demo/sql/order.sql index 4f28867..1675ff6 100644 --- a/transaction-demo/sql/order.sql +++ b/transaction-demo/sql/order.sql @@ -2,13 +2,12 @@ USE test; CREATE TABLE IF NOT EXISTS t_order ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + user_id VARCHAR(255) NOT NULL COMMENT '用户id', product_id INT(11) NOT NULL COMMENT '产品表product主键', - user_id VARCHAR(255) NOT NULL COMMENT '用id', - amount INT NOT NULL DEFAULT 0 COMMENT '购买数量', + quantity INT NOT NULL DEFAULT 0 COMMENT '购买数量', + pay_amount double NOT NULL DEFAULT 0 COMMENT '支付金额', PRIMARY KEY (id) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; -SELECT * FROM test.`t_order`; - -INSERT INTO t_order(product_id,user_id,amount) VALUES(1000,1000,22); +INSERT INTO t_order(product_id,user_id,quantity,pay_amount) VALUES(1,'zhangsan2',2,400); diff --git a/transaction-demo/sql/product.sql b/transaction-demo/sql/product.sql index 903ecea..b1f86a4 100644 --- a/transaction-demo/sql/product.sql +++ b/transaction-demo/sql/product.sql @@ -1,19 +1,16 @@ USE test; -CREATE TABLE IF NOT EXISTS Product ( +CREATE TABLE IF NOT EXISTS t_Product ( product_id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', NAME VARCHAR(255) NOT NULL COMMENT '产品名称', - CODE VARCHAR(255) NOT NULL COMMENT '产品编码', price DOUBLE NOT NULL DEFAULT 0.0, - amount INT NOT NULL DEFAULT 0, + stock_quantity INT NOT NULL DEFAULT 0, PRIMARY KEY (product_id) -) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; -ALTER TABLE Product ADD UNIQUE INDEX(NAME,CODE); -SHOW INDEX FROM test.Product; +INSERT INTO t_Product(product_id,NAME,price,stock_quantity) VALUES(1,'N95口罩',200,10000); -SELECT * FROM test.`Product`; diff --git a/transaction-demo/sql/t_user.sql b/transaction-demo/sql/t_user.sql new file mode 100644 index 0000000..a177479 --- /dev/null +++ b/transaction-demo/sql/t_user.sql @@ -0,0 +1,15 @@ +USE test; + + +CREATE TABLE IF NOT EXISTS t_user ( + id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + user_id VARCHAR(255) NOT NULL COMMENT '用户id', + user_name VARCHAR(255) NOT NULL COMMENT '用户姓名', + balance double NOT NULL DEFAULT 0.0, + PRIMARY KEY (id) +) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; + + +INSERT INTO t_user(user_id,user_name,balance) VALUES ("zhangsan2","张三",200.25); + +INSERT INTO t_user(user_id,user_name,balance) VALUES ("lisi001","李四",200.22); diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java deleted file mode 100644 index f3abb12..0000000 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderDTO.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.wyfdc.go.transaction.demo.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.persistence.Table; - -/** - * @Author: - */ -@Data -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -public class OrderDTO { - - private String id; - - private String userID; - - private String productID; - - //数量 - private int amount; - - public OrderDTO(String userID, - String productID, - int amount){ - this.userID = userID; - this.productID = productID; - this.amount = amount; - } - - - - -} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderPO.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderPO.java new file mode 100644 index 0000000..c0facbd --- /dev/null +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/OrderPO.java @@ -0,0 +1,51 @@ +package com.wyfdc.go.transaction.demo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Table; + +/** + * @Author: + */ +@Data +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "t_order") +public class OrderPO { + + private String id; + + @Column(name = "user_id") + private String userID; + + @Column(name = "product_id") + private String productID; + + //数量 + @Column(name = "quantity") + private int quantity; + + //支付金额 + @Column(name = "pay_amount") + private double payAmount; + + public OrderPO(String userID, + String productID, + int quantity, double payAmount){ + this.userID = userID; + this.productID = productID; + this.quantity = quantity; + this.payAmount = payAmount; + } + + + + +} diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/ProductPO.java similarity index 59% rename from transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java rename to transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/ProductPO.java index eddd2e5..d4ba55c 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Product.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/ProductPO.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import javax.persistence.Column; import javax.persistence.Table; /** @@ -16,26 +17,29 @@ @Setter @NoArgsConstructor @AllArgsConstructor -public class Product { +@Table(name = "t_Product") +public class ProductPO { //主键 + @Column(name ="product_id" ) private Long productID; //产品名称 + @Column(name = "NAME") private String name; - //产品编码 - private String code; //价格 + @Column(name = "price") private double price; // 数量 - private int amount; + @Column(name = "stock_quantity") + private int stockQuantity; - public Product(String name, String code, double price, int amount) { + + public ProductPO(String name, double price, int amount) { this.name = name; - this.code = code; this.price = price; - this.amount = amount; + this.stockQuantity = amount; } } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/UserPO.java similarity index 64% rename from transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java rename to transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/UserPO.java index bb3b8f0..54e2904 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/Account.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/dto/UserPO.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.persistence.Column; import javax.persistence.Table; /** @@ -12,23 +13,27 @@ @Data @NoArgsConstructor @AllArgsConstructor -public class Account { +@Table(name = "t_user") +public class UserPO { //主键 private Long id; //用户id + @Column(name = "user_id") private String userID; //用户名称 + @Column(name = "user_name") private String userName; //余额 + @Column(name = "balance") private int balance; - public Account(String userID, - String userName, - int balance) { + public UserPO(String userID, + String userName, + int balance) { this.userID = userID; this.userName = userName; this.balance = balance; diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java index 39ce784..e5fce26 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/AccountMapper.java @@ -1,19 +1,13 @@ package com.wyfdc.go.transaction.demo.mapper; -import com.wyfdc.go.transaction.demo.dto.Account; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; +import com.wyfdc.go.transaction.demo.dto.UserPO; + +import tk.mybatis.mapper.common.Mapper; /** * @Author: */ -@Mapper -public interface AccountMapper { - - public void saveAccount(@Param(value = "account") Account account); +public interface AccountMapper extends Mapper { - public Account getAccountByUserId(@Param("userID") String userID); - public void updateAccountBalance(@Param("userID") String userID, - @Param("balance") int balance); } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java index ab156af..13a075d 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/OrderMapper.java @@ -1,15 +1,13 @@ package com.wyfdc.go.transaction.demo.mapper; -import com.wyfdc.go.transaction.demo.dto.OrderDTO; -import org.apache.ibatis.annotations.Mapper; +import com.wyfdc.go.transaction.demo.dto.OrderPO; import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; /** * @Author: */ -@Mapper -public interface OrderMapper { +public interface OrderMapper extends Mapper { - public void saveOrder(@Param("orderDTO") OrderDTO orderDTO); } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java index bcd4061..1bfe413 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/mapper/ProductMapper.java @@ -1,19 +1,11 @@ package com.wyfdc.go.transaction.demo.mapper; -import com.wyfdc.go.transaction.demo.dto.Product; -import java.util.List; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; +import com.wyfdc.go.transaction.demo.dto.ProductPO; +import tk.mybatis.mapper.common.Mapper; /** * @Author: */ -@Mapper -public interface ProductMapper { +public interface ProductMapper extends Mapper { - public void saveProduct(Product product); - - public List getProduct(@Param("productID") String productID,@Param("code") String code); - - public void updateProduct(@Param("productID") String productID,@Param("amount") int amount); } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java index 599b9ef..8939d58 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/AccountService.java @@ -2,18 +2,13 @@ import com.wyfdc.go.common.exception.BizException; -import com.wyfdc.go.transaction.demo.dto.Account; +import com.wyfdc.go.transaction.demo.dto.UserPO; /** * @Author: */ public interface AccountService { - void saveAccount(Account account); - - Account getAccountByUserId(String userID); - - void updateAccountBalance(String userID, int balance) throws BizException; - + void saveAccount(UserPO account); } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java index 0b41a1e..4dd2c2d 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/OrderService.java @@ -1,14 +1,13 @@ package com.wyfdc.go.transaction.demo.service; -import com.wyfdc.go.transaction.demo.dto.OrderDTO; +import com.wyfdc.go.transaction.demo.dto.OrderPO; /** * @Author: */ public interface OrderService { - public void saveOrder(OrderDTO orderDTO); + void saveOrder(OrderPO orderDTO); - public String buyProduct(String userID, String productID); } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java index 83d0b45..7f5da76 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/ProductService.java @@ -1,7 +1,7 @@ package com.wyfdc.go.transaction.demo.service; import com.wyfdc.go.common.exception.BizException; -import com.wyfdc.go.transaction.demo.dto.Product; +import com.wyfdc.go.transaction.demo.dto.ProductPO; import java.util.List; /** @@ -9,10 +9,8 @@ */ public interface ProductService { - public void saveProduct(Product product) throws BizException; + void saveProduct(ProductPO product) throws BizException; - public void updateProduct(String productID, int amount) throws BizException; - public List getProduct(String productID, String code) throws BizException; } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java index aae6a03..3e003ce 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/AccountServiceImpl.java @@ -1,39 +1,29 @@ package com.wyfdc.go.transaction.demo.service.impl; import com.wyfdc.go.common.exception.BizException; -import com.wyfdc.go.transaction.demo.dto.Account; +import com.wyfdc.go.transaction.demo.dto.UserPO; import com.wyfdc.go.transaction.demo.mapper.AccountMapper; import com.wyfdc.go.transaction.demo.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import javax.annotation.Resource; + /** * @Author: woo */ @Service public class AccountServiceImpl implements AccountService { - @Autowired + @Resource private AccountMapper accountMapper; @Override - public void saveAccount(Account account) { - accountMapper.saveAccount(account); - } - - @Override - public Account getAccountByUserId(String userID) { - return accountMapper.getAccountByUserId(userID); + public void saveAccount(UserPO account) { + accountMapper.insert(account); } - @Override - public void updateAccountBalance(String userID, int balance) throws BizException { - if(StringUtils.isEmpty(userID)|| StringUtils.isEmpty(balance)){ - throw new BizException("param is null"); - } - accountMapper.updateAccountBalance(userID,balance); - } } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java index 25f8308..ddac150 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java @@ -26,8 +26,8 @@ public class BizServiceImpl implements BizService { */ @Override public void insertWithoutTransaction() throws BizException { - accountService.updateAccountBalance("zhangsan001",80); - productService.updateProduct(null,19); + + } /** @@ -37,8 +37,7 @@ public void insertWithoutTransaction() throws BizException { @Override @Transactional(rollbackFor = BizException.class) public void insertWithTransaction() throws BizException { - accountService.updateAccountBalance("zhangsan001",50); - productService.updateProduct(null,9); + } } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java index 2fcfd20..cf4a49c 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/OrderServiceImpl.java @@ -1,29 +1,25 @@ package com.wyfdc.go.transaction.demo.service.impl; -import com.wyfdc.go.transaction.demo.dto.OrderDTO; +import com.wyfdc.go.transaction.demo.dto.OrderPO; import com.wyfdc.go.transaction.demo.mapper.OrderMapper; -import com.wyfdc.go.transaction.demo.service.AccountService; import com.wyfdc.go.transaction.demo.service.OrderService; -import com.wyfdc.go.transaction.demo.service.ProductService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * @Author: */ @Service public class OrderServiceImpl implements OrderService { - @Autowired + @Resource private OrderMapper orderMapper; @Override - public void saveOrder(OrderDTO orderDTO) { - orderMapper.saveOrder(orderDTO); + public void saveOrder(OrderPO orderDTO) { + orderMapper.insert(orderDTO); } - @Override - public String buyProduct(String userID, String productID) { - return null; - } } diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java index 3f7f77c..fc9030d 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/ProductServiceImpl.java @@ -1,7 +1,7 @@ package com.wyfdc.go.transaction.demo.service.impl; import com.wyfdc.go.common.exception.BizException; -import com.wyfdc.go.transaction.demo.dto.Product; +import com.wyfdc.go.transaction.demo.dto.ProductPO; import com.wyfdc.go.transaction.demo.mapper.ProductMapper; import com.wyfdc.go.transaction.demo.service.ProductService; import java.util.List; @@ -9,36 +9,23 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import javax.annotation.Resource; + /** * @Author: */ @Service public class ProductServiceImpl implements ProductService { - @Autowired + @Resource private ProductMapper productMapper; @Override - public void saveProduct(Product product) throws BizException { - productMapper.saveProduct(product); - } - - @Override - public void updateProduct(String productID, int amount) throws BizException { - if(StringUtils.isEmpty(productID)){ - throw new BizException("All params are null"); - } - productMapper.updateProduct(productID,amount); + public void saveProduct(ProductPO product) throws BizException { + productMapper.insert(product); } - @Override - public List getProduct(String productID,String code) throws BizException { - if(StringUtils.isEmpty(productID)&& StringUtils.isEmpty(code)){ - throw new BizException("All params are null"); - } - return productMapper.getProduct(productID, code); - } } diff --git a/transaction-demo/src/main/resources/mybatis/AccountMapper.xml b/transaction-demo/src/main/resources/mybatis/AccountMapper.xml index c2b8edd..6a2204a 100644 --- a/transaction-demo/src/main/resources/mybatis/AccountMapper.xml +++ b/transaction-demo/src/main/resources/mybatis/AccountMapper.xml @@ -3,7 +3,7 @@ + - SELECT id AS id, - user_name AS userName, - user_id AS userID, - balance AS balance - FROM test.account a - where a.user_id=#{userID} - - - - update test.account a set a.balance = #{balance} - where a.user_id=#{userID} - - - - INSERT INTO account(user_id,user_name,balance) VALUES (#{account.userID},#{account.userName},#{account.balance}) - - - diff --git a/transaction-demo/src/main/resources/mybatis/OrderMapper.xml b/transaction-demo/src/main/resources/mybatis/OrderMapper.xml deleted file mode 100644 index 61d61d9..0000000 --- a/transaction-demo/src/main/resources/mybatis/OrderMapper.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - INSERT INTO t_order(product_id,user_id,amount) - VALUES(#{orderDTO.productID},#{orderDTO.userID},#{orderDTO.amount}); - - - diff --git a/transaction-demo/src/main/resources/mybatis/ProductMapper.xml b/transaction-demo/src/main/resources/mybatis/ProductMapper.xml deleted file mode 100644 index 3170372..0000000 --- a/transaction-demo/src/main/resources/mybatis/ProductMapper.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - update test.Product a set a.amount = #{amount} - where a.product_id=#{productID} - - - - INSERT INTO Product VALUES - (#{productID}, #{name},#{code},#{price},#{amount}) - - - diff --git a/transaction-demo/src/main/resources/mybatis/UserMapper.xml b/transaction-demo/src/main/resources/mybatis/UserMapper.xml new file mode 100644 index 0000000..4183a4b --- /dev/null +++ b/transaction-demo/src/main/resources/mybatis/UserMapper.xml @@ -0,0 +1,11 @@ + + + + + + update test.t_user a set a.balance = #{balance} + where a.user_id=#{userID} + + + + diff --git a/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java index 9c3895a..666463a 100644 --- a/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java +++ b/transaction-demo/src/test/java/com/wyfdc/go/jdbc/JDBCTest.java @@ -25,13 +25,13 @@ public class JDBCTest { public void testJDBC(){ Connection conn = connectionUtil.getConnection(); int i = 0; - String sql = "INSERT INTO account(user_id,user_name,balance) VALUES (?,?,?)"; + String sql = "INSERT INTO t_user(user_id,user_name,balance) VALUES (?,?,?)"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.setString(1, "wangwu001"); pstmt.setString(2, "王五"); - pstmt.setInt(3, 1000); + pstmt.setDouble(3, 100.78); i = pstmt.executeUpdate(); pstmt.close(); conn.close(); diff --git a/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java b/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java index 5722e84..83bb010 100644 --- a/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java +++ b/transaction-demo/src/test/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImplTest.java @@ -1,26 +1,43 @@ package com.wyfdc.go.transaction.demo.service.impl; +import com.alibaba.fastjson.JSON; import com.wyfdc.go.TransactionDemoApp; +import com.wyfdc.go.transaction.demo.dto.OrderPO; +import com.wyfdc.go.transaction.demo.dto.ProductPO; +import com.wyfdc.go.transaction.demo.dto.UserPO; +import com.wyfdc.go.transaction.demo.mapper.OrderMapper; +import com.wyfdc.go.transaction.demo.mapper.ProductMapper; +import com.wyfdc.go.transaction.demo.mapper.UserMapper; import com.wyfdc.go.transaction.demo.service.BizService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.bind.annotation.RequestBody; -import static org.junit.Assert.*; +import javax.annotation.Resource; +import java.util.List; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes= TransactionDemoApp.class) public class BizServiceImplTest { + @Resource + private OrderMapper orderMapper; + + @Resource + private ProductMapper productMapper; + + @Resource + private UserMapper userMapper; @Autowired private BizService bizService; @Test public void insertWithTransaction() { - bizService.insertWithTransaction(); + bizService.insertWithinTransaction(); } @@ -28,4 +45,24 @@ public void insertWithTransaction() { public void insertWithoutTransaction() { bizService.insertWithoutTransaction(); } + + + @Test + public void test(){ + + userMapper.updateAccountBalance("lisi001",300.00); + +/* List orderPOS = orderMapper.selectAll(); + List productPOS = productMapper.selectAll(); + List userPOS = userMapper.selectAll(); + orderPOS.stream().forEach(x->{ + System.out.println(JSON.toJSONString(x)); + }); + productPOS.stream().forEach(x->{ + System.out.println(JSON.toJSONString(x)); + }); + userPOS.stream().forEach(x->{ + System.out.println(JSON.toJSONString(x)); + });*/ + } } \ No newline at end of file From 0d551f8278e4eb989d9db4815b72fdd7d56b62aa Mon Sep 17 00:00:00 2001 From: wuqing Date: Fri, 3 Apr 2020 16:58:23 +0800 Subject: [PATCH 5/5] a --- transaction-demo/sql/t_user.sql | 8 ++++++ .../demo/service/impl/BizServiceImpl.java | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/transaction-demo/sql/t_user.sql b/transaction-demo/sql/t_user.sql index a177479..0ef032d 100644 --- a/transaction-demo/sql/t_user.sql +++ b/transaction-demo/sql/t_user.sql @@ -10,6 +10,14 @@ CREATE TABLE IF NOT EXISTS t_user ( ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +create unique index t_user_userID_IDX on t_user(user_id); + +-- drop INDEX t_user_userID_IDX on test.t_user; + +-- show INDEX from test.t_user; + + + INSERT INTO t_user(user_id,user_name,balance) VALUES ("zhangsan2","张三",200.25); INSERT INTO t_user(user_id,user_name,balance) VALUES ("lisi001","李四",200.22); diff --git a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java index 5cffa64..7ed9dd4 100644 --- a/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java +++ b/transaction-demo/src/main/java/com/wyfdc/go/transaction/demo/service/impl/BizServiceImpl.java @@ -1,6 +1,11 @@ package com.wyfdc.go.transaction.demo.service.impl; import com.wyfdc.go.common.exception.BizException; +import com.wyfdc.go.transaction.demo.dto.ProductPO; +import com.wyfdc.go.transaction.demo.dto.UserPO; +import com.wyfdc.go.transaction.demo.mapper.OrderMapper; +import com.wyfdc.go.transaction.demo.mapper.ProductMapper; +import com.wyfdc.go.transaction.demo.mapper.UserMapper; import com.wyfdc.go.transaction.demo.service.UserService; import com.wyfdc.go.transaction.demo.service.BizService; import com.wyfdc.go.transaction.demo.service.ProductService; @@ -8,6 +13,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; + /** * @Author: */ @@ -20,6 +27,15 @@ public class BizServiceImpl implements BizService { @Autowired private ProductService productService; + @Resource + private OrderMapper orderMapper; + + @Resource + private ProductMapper productMapper; + + @Resource + private UserMapper userMapper; + /** * 由于没有加入事务注解 导致被更新掉 * @throws BizException @@ -37,7 +53,17 @@ public void insertWithoutTransaction() throws BizException { @Override @Transactional(rollbackFor = BizException.class) public void insertWithinTransaction() throws BizException { + ProductPO record = new ProductPO(); + record.setName("iphoneX"); + record.setPrice(5999.00); + record.setStockQuantity(10000); + productMapper.insert(record); + UserPO userPO = new UserPO(); + userPO.setUserID("fuckDu"); + userPO.setUserName("操读"); + userPO.setBalance(0.0); + userMapper.insert(userPO); } }