diff --git a/pom.xml b/pom.xml index 42dc25d..d82147c 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,12 @@ 4.4.0 + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.5 + diff --git a/src/main/java/com/example/practice/controller/UserController.java b/src/main/java/com/example/practice/controller/UserController.java index 20fa63e..2d3c577 100644 --- a/src/main/java/com/example/practice/controller/UserController.java +++ b/src/main/java/com/example/practice/controller/UserController.java @@ -2,8 +2,12 @@ package com.example.practice.controller; import com.example.practice.entity.User; +import com.example.practice.exception.MoneyNotEnoughException; import com.example.practice.mapper.UserMapper; +import com.example.practice.service.UserService; +import com.example.practice.service.impl.UserServiceImpl; import jakarta.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -13,7 +17,25 @@ import java.util.List; public class UserController { @Resource - UserMapper userMapper; + private UserMapper userMapper; + + + @Resource + private UserService userService; + + + /** + * A->B转账 + */ + @Transactional // 多条DML语句要么同时执行成功,要么同时失败 + @GetMapping("transfer") + public boolean transfer(@RequestParam String fromAccount, + @RequestParam String toAccount, + @RequestParam int money) { + + return userService.transfer(fromAccount, toAccount, money); + } + @GetMapping("/queryAll") public List queryAll() { @@ -50,6 +72,15 @@ public class UserController { return userMapper.selectOne(id); } + @GetMapping("pageQuery") + public List pageQuery(@RequestParam int pageNum, @RequestParam int pageSize) { + int offset = (pageNum - 1) * pageSize; + return userMapper.pageQuery(pageSize, offset); + } + + + + } diff --git a/src/main/java/com/example/practice/entity/User.java b/src/main/java/com/example/practice/entity/User.java index 926d45e..f326903 100644 --- a/src/main/java/com/example/practice/entity/User.java +++ b/src/main/java/com/example/practice/entity/User.java @@ -1,6 +1,13 @@ package com.example.practice.entity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor public class User { /** @@ -38,85 +45,5 @@ public class User { */ private Integer money; - @Override - public String toString() { - return "User{" + - "id=" + id + - ", nickName='" + nickName + '\'' + - ", phoneNumber='" + phoneNumber + '\'' + - ", userAccount='" + userAccount + '\'' + - ", userPassword='" + userPassword + '\'' + - ", userRole='" + userRole + '\'' + - ", money=" + money + - '}'; - } - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNickName() { - return nickName; - } - - public void setNickName(String nickName) { - this.nickName = nickName; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getUserAccount() { - return userAccount; - } - - public void setUserAccount(String userAccount) { - this.userAccount = userAccount; - } - - public String getUserPassword() { - return userPassword; - } - - public void setUserPassword(String userPassword) { - this.userPassword = userPassword; - } - - public String getUserRole() { - return userRole; - } - - public void setUserRole(String userRole) { - this.userRole = userRole; - } - - public Integer getMoney() { - return money; - } - - public void setMoney(Integer money) { - this.money = money; - } - - public User(Long id, String nickName, String phoneNumber, String userAccount, String userPassword, String userRole, Integer money) { - this.id = id; - this.nickName = nickName; - this.phoneNumber = phoneNumber; - this.userAccount = userAccount; - this.userPassword = userPassword; - this.userRole = userRole; - this.money = money; - } - - public User() { - } } diff --git a/src/main/java/com/example/practice/exception/MoneyNotEnoughException.java b/src/main/java/com/example/practice/exception/MoneyNotEnoughException.java new file mode 100644 index 0000000..c1aac37 --- /dev/null +++ b/src/main/java/com/example/practice/exception/MoneyNotEnoughException.java @@ -0,0 +1,9 @@ +package com.example.practice.exception; + +public class MoneyNotEnoughException extends RuntimeException { + + public MoneyNotEnoughException() { + super("余额不足"); + } + +} diff --git a/src/main/java/com/example/practice/mapper/UserMapper.java b/src/main/java/com/example/practice/mapper/UserMapper.java index 0337595..5a9631d 100644 --- a/src/main/java/com/example/practice/mapper/UserMapper.java +++ b/src/main/java/com/example/practice/mapper/UserMapper.java @@ -1,12 +1,13 @@ package com.example.practice.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.practice.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper // 生成当前UserMapper接口的实现类对象,并且把这个对象放到SpringIOC 容器中 -public interface UserMapper { +public interface UserMapper extends BaseMapper { List selectAll(); @@ -18,5 +19,8 @@ public interface UserMapper { int delete(Long id); + List pageQuery(int pageSize, int offset); + + User selectByAccount(String userAccount); } diff --git a/src/main/java/com/example/practice/service/UserService.java b/src/main/java/com/example/practice/service/UserService.java new file mode 100644 index 0000000..eec936d --- /dev/null +++ b/src/main/java/com/example/practice/service/UserService.java @@ -0,0 +1,10 @@ +package com.example.practice.service; + +public interface UserService { + + /** + * 转账功能 + */ + boolean transfer(String fromAccount, String toAccount, int money); + +} diff --git a/src/main/java/com/example/practice/service/impl/UserServiceImpl.java b/src/main/java/com/example/practice/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..90a310e --- /dev/null +++ b/src/main/java/com/example/practice/service/impl/UserServiceImpl.java @@ -0,0 +1,34 @@ +package com.example.practice.service.impl; + +import com.example.practice.entity.User; +import com.example.practice.exception.MoneyNotEnoughException; +import com.example.practice.mapper.UserMapper; +import com.example.practice.service.UserService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + @Resource + private UserMapper userMapper; + + @Override + public boolean transfer(String fromAccount, String toAccount, int money) { + User fromUser = userMapper.selectByAccount(fromAccount); + Integer fromAccountMoney = fromUser.getMoney(); + if (money > fromAccountMoney) throw new MoneyNotEnoughException(); + + // 更新转出账户的余额 + fromUser.setMoney(fromAccountMoney - money); + userMapper.update(fromUser); + + User toUser = userMapper.selectByAccount(toAccount); + Integer toUserMoney = toUser.getMoney(); + + // 跟新转入账户的余额 + toUser.setMoney(toUserMoney + money); + userMapper.update(toUser); + return true; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 60a001f..2720d35 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -8,3 +8,7 @@ spring: mybatis: mapper-locations: classpath:mapper/*.xml + + +server: + port: 9090 diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index a378f57..315ebe7 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -23,7 +23,13 @@ update user set nickName = #{nickName}, phoneNumber = #{phoneNumber}, userAccount = #{userAccount}, userPassword = #{userPassword}, userRole = #{userRole}, money = #{money} where id = #{id} + + \ No newline at end of file