Compare commits

..

8 Commits

Author SHA1 Message Date
c1fcf476bd update 8.21 2025-08-22 17:32:16 +08:00
c5dbd3f133 update 8.21 2025-08-22 17:30:36 +08:00
b209fd40b4 update 8.21 2025-08-22 17:21:28 +08:00
dd8e8254d6 update 8.21 2025-08-22 17:18:53 +08:00
3eaf3373aa update 8.20 2025-08-20 22:57:52 +08:00
cfcda48e34 update 8.20 2025-08-20 19:31:43 +08:00
8a34d3c7ca second 2025-08-19 21:00:48 +08:00
af500ad757 first 2025-08-18 20:07:04 +08:00
16 changed files with 468 additions and 226 deletions

14
pom.xml
View File

@ -72,10 +72,18 @@
<scope>test</scope>
</dependency>
<!-- knife4j -->
<dependency>
<groupId>com.github.code-cxz</groupId>
<artifactId>custom-toolkit</artifactId>
<version>v1.0.0</version>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
</dependencies>

View File

@ -0,0 +1,34 @@
package com.example.practice.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Knife4j 接口文档配置
* 官网地址
*/
@Configuration
public class Knife4jConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("cxz")
.version("1.0")
.description("SpringBoot速成")
.termsOfService("http://doc.xiaominfo.com")
.license(new License().name("Apache 2.0")
.url("http://doc.xiaominfo.com")));
}
}

View File

@ -0,0 +1,84 @@
package com.example.practice.controller;
import com.example.practice.entity.User;
import com.example.practice.mapper.UserMapper;
import com.example.practice.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController // @Controller + @ResponseBody
@RequestMapping("/user")
public class UserController {
@Resource
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<User> queryAll() {
return userMapper.selectAll();
}
@GetMapping("/test")
public String test() {
return "启动成功";
}
@PostMapping("/add")
public int add(@RequestBody User user) {
return userMapper.insert(user);
}
@PostMapping("/update")
public int update(@RequestBody User user) {
return userMapper.update(user);
}
@PostMapping("/delete")
public int delete(Long id) {
return userMapper.delete(id);
}
@GetMapping("/queryOne")
public User queryOne(Long id) {
return userMapper.selectOne(id);
}
@GetMapping("pageQuery")
public List<User> pageQuery(@RequestParam int pageNum, @RequestParam int pageSize) {
int offset = (pageNum - 1) * pageSize;
return userMapper.pageQuery(pageSize, offset);
}
}

View File

@ -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() {
}
}

View File

@ -0,0 +1,9 @@
package com.example.practice.exception;
public class MoneyNotEnoughException extends RuntimeException {
public MoneyNotEnoughException() {
super("余额不足");
}
}

View File

@ -0,0 +1,26 @@
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 extends BaseMapper<User> {
List<User> selectAll();
User selectOne(Long id);
int insert(User user);
int update(User user);
int delete(Long id);
List<User> pageQuery(int pageSize, int offset);
User selectByAccount(String userAccount);
}

View File

@ -0,0 +1,10 @@
package com.example.practice.service;
public interface UserService {
/**
* 转账功能
*/
boolean transfer(String fromAccount, String toAccount, int money);
}

View File

@ -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;
}
}

View File

@ -1,114 +0,0 @@
package com.example.practice.sqlsession;
import com.example.practice.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class SqlSessionTest {
public static void main(String[] args) throws IOException {
String path = "mybatis-config.xml";
// 文件字节流
InputStream is = Resources.getResourceAsStream(path);
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 数据库连接对象类似于JDBC中的Connection对象, 每调用一次都会创建一次(使用连接池可进行复用)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 插入
User insertUser = new User();
insertUser.setId(null);
insertUser.setNickName("管理员2");
insertUser.setPhoneNumber("12345678901");
insertUser.setUserAccount("admin2");
insertUser.setUserPassword("12345678");
insertUser.setUserRole("admin");
insert(sqlSession, insertUser);
// 根据id删除
delete(sqlSession, 12L);
// 修改
User updateUser = new User();
updateUser.setId(11L);
updateUser.setNickName("管理员dsfaf2");
updateUser.setPhoneNumber("fdsdsgsfdsf");
updateUser.setUserAccount("fds");
updateUser.setUserPassword("12345678");
updateUser.setUserRole("admin");
update(sqlSession, updateUser);
// 查询
selectList(sqlSession);
// 根据id查询
selectOne(sqlSession, 4L);
}
private static void insert(SqlSession sqlSession, User user) {
try {
int result = sqlSession.insert("fdeawgryer.insert", user);
if (result == 0) throw new RuntimeException("添加失败");
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
}
private static void delete(SqlSession sqlSession, Long id) {
try {
int result = sqlSession.delete("fdeawgryer.delete", id);
if (result == 0) throw new RuntimeException("删除失败");
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
}
private static void update(SqlSession sqlSession, User user) {
try {
int result = sqlSession.update("fdeawgryer.update", user);
if (result == 0) throw new RuntimeException("更新失败");
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
}
private static void selectList(SqlSession sqlSession) {
List<User> userList = sqlSession.selectList("fdeawgryer.dfsakdf");
for (User user : userList) {
System.out.println(user);
}
}
private static void selectOne(SqlSession sqlSession, Long id) {
User user = sqlSession.selectOne("fdeawgryer.selectOne", id);
System.out.println(user);
}
}

View File

@ -0,0 +1,14 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/practice
username: root
password: 123456
mybatis:
mapper-locations: classpath:mapper/*.xml
server:
port: 9090

View File

@ -2,8 +2,8 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sdfdsafdfd">
<select id="selectList" resultType="com.example.practice.entity.User">
<mapper namespace="com.example.practice.mapper.UserMapper">
<select id="selectAll" resultType="com.example.practice.entity.User">
select * from user
</select>
@ -23,10 +23,13 @@
update user set nickName = #{nickName}, phoneNumber = #{phoneNumber}, userAccount = #{userAccount}, userPassword = #{userPassword}, userRole = #{userRole}, money = #{money} where id = #{id}
</update>
<select id="pageQuery" resultType="com.example.practice.entity.User">
select * from user limit #{pageSize} offset #{offset}
</select>
<select id="selectByAccount" resultType="com.example.practice.entity.User">
select * from user where userAccount = #{userAccount}
</select>
</mapper>
<!--SQL映射文件-->
<!--SQL映射文件-->

View File

@ -1,23 +0,0 @@
<?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>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/practice"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
<!--Mybatis核心配置文件-->

View File

@ -0,0 +1,51 @@
//package com.draft;
//
//import com.example.practice.entity.User;
//import com.example.practice.mapper.UserMapper;
//import com.example.practice.utils.SqlSessionFactoryUtils;
//import org.apache.ibatis.session.SqlSession;
//
//import java.util.List;
//
//public class UserMapperImpl implements UserMapper {
//
//
// SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
//
//
// UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//
//
// @Override
// public List<User> selectAll() {
// // Mybatis动态代理机制
// return userMapper.selectAll();
// }
//
// @Override
// public User selectOne(Long id) {
// User user = userMapper.selectOne(id);
// return user;
// }
//
// @Override
// public int insert(User user) {
// int result = userMapper.insert(user);
// sqlSession.commit();
// return result;
// }
//
// @Override
// public int update(User user) {
// int result = userMapper.update(user);
// sqlSession.commit();
// return result;
// }
//
// @Override
// public int delete(Long id) {
// int result = userMapper.delete(id);
// sqlSession.commit();
// return result;
// }
//}

View File

@ -0,0 +1,28 @@
<!--<?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>-->
<!-- <environments default="dev">-->
<!-- <environment id="dev">-->
<!-- <transactionManager type="JDBC"/>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/practice"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="123456"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <mapper resource="mapper/UserMapper.xml"/>-->
<!-- </mappers>-->
<!--</configuration>-->

View File

@ -0,0 +1,108 @@
//package com.example.practice.sqlsessionTest;
//
//import com.example.practice.entity.User;
//import com.example.practice.mapper.UserMapper;
//import com.example.practice.mapper.UserMapperImpl;
//
//import java.io.IOException;
//import java.util.List;
//
//public class SqlSessionTest {
//
// public static void main(String[] args) throws IOException {
//
//
//// com.example.practice.mapper.UserMapper userMapper = new com.draft.UserMapperImpl();
//
// UserMapper userMapper = new UserMapperImpl();
// List<User> users = userMapper.selectAll();
// for (User user : users) {
// System.out.println(user);
// }
//
//// List<Object> list = sqlSession.selectList("fdgggsdd.selectAll");
//// for (Object o : list) {
//// System.out.println(o);
//// }
//// User user = new User();
//// user.setId(null);
//// user.setNickName("张三");
//// user.setPhoneNumber("12345678901");
//// user.setUserAccount("123456");
//// user.setUserPassword("123456");
//// user.setUserRole("user");
////
//// sqlSession.insert("fdgggsdd.insert", user);
//// sqlSession.commit();
//
//// UserMapper userMapper = new UserMapperImpl();
//// List<User> users = userMapper.selectAll();
//// for (User user : users) {
//// System.out.println(user);
//// }
//
//// User user = userMapper.selectOne(2L);
//// System.out.println(user);
////
//// userMapper.delete(2L);
////
////
//// User insertUser = new User();
//// userMapper.insert(insertUser);
////
////
//// User updateUser = new User();
//// userMapper.update(updateUser);
//
//
//// SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
//
//// List<User> list = sqlSession.selectList("fdsgfgd.selectList");
//// for (User user : list) {
//// System.out.println(user);
//// }
////
//// User user = sqlSession.selectOne("fdsgfgd.selectOne", 2);
//// System.out.println(user);
////
////
//// int delete = sqlSession.delete("fdsgfgd.delete", 2);
//// if (delete == 0) throw new RuntimeException("删除失败");
//// sqlSession.commit();
////
////
//// User user = new User();
//// user.setId(null);
//// user.setNickName("张三");
//// user.setPhoneNumber("12345678901");
//// user.setUserAccount("123456");
//// user.setUserPassword("123456");
//// user.setUserRole("user");
//// user.setMoney(10000);
//// sqlSession.insert("fdsgfgd.insert", user);
//// sqlSession.commit();
////
////
//// User user = new User();
//// user.setId(9L);
//// user.setNickName("张三dfsafda");
//// user.setPhoneNumber("12345678901");
//// user.setUserAccount("123456");
//// user.setUserPassword("123456");
//// user.setUserRole("user");
//// user.setMoney(10000);
//// sqlSession.update("fdsgfgd.update", user);
//// sqlSession.commit();
//
//
// }
//
//
//// public static void selectList() {
//// List<User> list = sqlSession.selectList("fdsgfgd.selectList");
//// for (User user : list) {
//// System.out.println(user);
//// }
//// }
//
//}

View File

@ -0,0 +1,43 @@
//package com.draft.utils;
//
//import org.apache.ibatis.io.Resources;
//import org.apache.ibatis.session.SqlSession;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//
//import java.io.IOException;
//import java.io.InputStream;
//
//public class SqlSessionFactoryUtils {
//
// private static SqlSessionFactory sqlSessionFactory;
//
// // 初始化SqlSessionFactory对象表示需要操作哪个数据库
// static {
// // 加载配置文件(转成字节流的形式)
// String resourcePath = "com/draft/mybatis-config.xml";
// InputStream is = null;
// try {
// is = Resources.getResourceAsStream(resourcePath);
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// // SqlSessionFactoryBuilder负责创建SqlSessionFactory对象
// // SqlSessionFactory负责生产SqlSession对象
// // SqlSession对象是负责连接数据库, 每执行一条sql语句就会创建或者连接池中获取一个对象
// SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// }
//
//
// // 获取数据库连接对象
// public static SqlSession getSqlSession() {
// SqlSession sqlSession = sqlSessionFactory.openSession();
// return sqlSession;
// }
//
//
//
//
//}