From 2df6ee04bc3b34846bd2d9733254d79a7677ef64 Mon Sep 17 00:00:00 2001 From: JACKYMYPERSON <1627832236@qq.com> Date: Mon, 2 Mar 2026 16:07:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javamemories-common/pom.xml | 28 ++++ .../src/main/java/cn/mayiming/App.java | 14 ++ .../src/test/java/cn/mayiming/AppTest.java | 38 +++++ pom.xml | 156 ++++++++++-------- user-service/pom.xml | 35 ++++ .../src/main/java/cn/mayiming/App.java | 17 ++ .../mayiming/Controller/Redis/RedisParam.java | 26 +++ .../mayiming/Controller/Redis/Redistest.java | 22 +++ .../mayiming/Controller/UserCon/UserBody.java | 22 +++ .../Controller/UserCon/UserController.java | 46 ++++++ .../java/cn/mayiming/Mapper/UserMapper.java | 81 +++++++++ .../src/main/resources/application.yml | 24 +++ .../src/test/java/cn/mayiming/AppTest.java | 38 +++++ 13 files changed, 474 insertions(+), 73 deletions(-) create mode 100644 javamemories-common/pom.xml create mode 100644 javamemories-common/src/main/java/cn/mayiming/App.java create mode 100644 javamemories-common/src/test/java/cn/mayiming/AppTest.java create mode 100644 user-service/pom.xml create mode 100644 user-service/src/main/java/cn/mayiming/App.java create mode 100644 user-service/src/main/java/cn/mayiming/Controller/Redis/RedisParam.java create mode 100644 user-service/src/main/java/cn/mayiming/Controller/Redis/Redistest.java create mode 100644 user-service/src/main/java/cn/mayiming/Controller/UserCon/UserBody.java create mode 100644 user-service/src/main/java/cn/mayiming/Controller/UserCon/UserController.java create mode 100644 user-service/src/main/java/cn/mayiming/Mapper/UserMapper.java create mode 100644 user-service/src/main/resources/application.yml create mode 100644 user-service/src/test/java/cn/mayiming/AppTest.java diff --git a/javamemories-common/pom.xml b/javamemories-common/pom.xml new file mode 100644 index 0000000..b5f6199 --- /dev/null +++ b/javamemories-common/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + + cn.mayiming + javamemories-parent + 1.0-SNAPSHOT + + + javamemories-common + jar + + javamemories-common + http://maven.apache.org + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + diff --git a/javamemories-common/src/main/java/cn/mayiming/App.java b/javamemories-common/src/main/java/cn/mayiming/App.java new file mode 100644 index 0000000..bf85d76 --- /dev/null +++ b/javamemories-common/src/main/java/cn/mayiming/App.java @@ -0,0 +1,14 @@ +package cn.mayiming; + +/** + * Hello world! + * + */ +@Spring +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/javamemories-common/src/test/java/cn/mayiming/AppTest.java b/javamemories-common/src/test/java/cn/mayiming/AppTest.java new file mode 100644 index 0000000..2244532 --- /dev/null +++ b/javamemories-common/src/test/java/cn/mayiming/AppTest.java @@ -0,0 +1,38 @@ +package cn.mayiming; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/pom.xml b/pom.xml index 88fe444..f9c25c4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,99 +1,109 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + cn.mayiming - javamemories + javamemories-parent 1.0-SNAPSHOT - jar + pom - javamemories + javamemories-parent http://maven.apache.org + org.springframework.boot spring-boot-starter-parent - 3.2.3 + UTF-8 - 22 + 2023.0.1 + 2023.0.1.0 + 3.0.3 + + 3.2.3 + + 8.0.33 - - - junit - junit - 3.8.1 - test - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.springframework.boot - spring-boot-starter-jdbc - - - - com.mysql - mysql-connector-j - runtime - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.3 - - - - - - - javamemories - - - - + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis-spring-boot.version} + + + + com.mysql + mysql-connector-j + ${mysql.version} + runtime + + + org.springframework.boot - spring-boot-maven-plugin - 3.2.3 - - - - - repackage - - - - + spring-boot-starter-web + ${spring-boot.version} + + + + org.springframework.boot + spring-boot-starter-data-redis + ${spring-boot.version} + + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + test + + + + + + + javamemories-common + user-service + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 - cn.mayiming.App + ${java.version} + ${java.version} - + \ No newline at end of file diff --git a/user-service/pom.xml b/user-service/pom.xml new file mode 100644 index 0000000..9637115 --- /dev/null +++ b/user-service/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + cn.mayiming + javamemories-parent + 1.0-SNAPSHOT + ../pom.xml + + + user-service + jar + + user-service + http://maven.apache.org + + + UTF-8 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-test + test + + + diff --git a/user-service/src/main/java/cn/mayiming/App.java b/user-service/src/main/java/cn/mayiming/App.java new file mode 100644 index 0000000..bd10567 --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/App.java @@ -0,0 +1,17 @@ +package cn.mayiming; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * Hello world! + * + */ +@SpringBootApplication +public class App +{ + public static void main( String[] args ) + { + SpringApplication.run(App.class, args); + } +} diff --git a/user-service/src/main/java/cn/mayiming/Controller/Redis/RedisParam.java b/user-service/src/main/java/cn/mayiming/Controller/Redis/RedisParam.java new file mode 100644 index 0000000..59e7ed9 --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/Controller/Redis/RedisParam.java @@ -0,0 +1,26 @@ +package cn.mayiming.Controller.Redis; + +public class RedisParam { + private String key; + private String value; + + // 必须加无参构造器(JSON解析需要) + public RedisParam() {} + + // GET/SET方法(必须加,否则JSON解析不到值) + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/user-service/src/main/java/cn/mayiming/Controller/Redis/Redistest.java b/user-service/src/main/java/cn/mayiming/Controller/Redis/Redistest.java new file mode 100644 index 0000000..9ecfabe --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/Controller/Redis/Redistest.java @@ -0,0 +1,22 @@ +package cn.mayiming.Controller.Redis; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.TimeUnit; + +@RestController +public class Redistest { + @Autowired + private StringRedisTemplate stringRedisTemplate; + @PostMapping("/redis/put") + public String put(@RequestBody RedisParam param) { + String key = param.getKey(); + stringRedisTemplate.opsForValue().set(key, "123", 10, TimeUnit.MINUTES); + String redisValue = stringRedisTemplate.opsForValue().get(key); + return "Redis写入成功!key=" + key + ",value=" + redisValue; + } +} diff --git a/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserBody.java b/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserBody.java new file mode 100644 index 0000000..1be8081 --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserBody.java @@ -0,0 +1,22 @@ +package cn.mayiming.Controller.UserCon; + +public class UserBody { + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String username; + public String password; +} diff --git a/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserController.java b/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserController.java new file mode 100644 index 0000000..2db35f9 --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/Controller/UserCon/UserController.java @@ -0,0 +1,46 @@ +package cn.mayiming.Controller.UserCon; + +import cn.mayiming.Mapper.UserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +public class UserController { + + @Autowired + private UserMapper userMapper; + + @PostMapping("/login") + public Map login(@RequestBody UserBody user) { + Map result = new HashMap<>(); + try { + String dbPassword = userMapper.getPasswordByUsername(user.getUsername()); + String username = user.getUsername(); + String password = user.getPassword(); + // 3. 编写 SQL 查询数据库中的用户密码 + // 用 ? 占位符,防止 SQL 注入(必须!) + + // 4. 验证密码(实际项目要加密对比,这里简单演示) + if (password != null && password.equals(dbPassword)) { + result.put("code", 200); + result.put("msg", "登录成功"); + result.put("data", username); + } else { + result.put("code", 400); + result.put("msg", "密码错误"); + } + } catch (Exception e) { + // 捕获“用户不存在”等异常 + result.put("code", 404); + result.put("msg", "用户名不存在或登录失败"); + result.put("error", e.getMessage()); + } + return result; + } +} diff --git a/user-service/src/main/java/cn/mayiming/Mapper/UserMapper.java b/user-service/src/main/java/cn/mayiming/Mapper/UserMapper.java new file mode 100644 index 0000000..874dde2 --- /dev/null +++ b/user-service/src/main/java/cn/mayiming/Mapper/UserMapper.java @@ -0,0 +1,81 @@ +package cn.mayiming.Mapper; +import cn.mayiming.Controller.UserCon.UserBody; +import org.apache.ibatis.annotations.*; + +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserMapper { + @Select("SELECT password FROM user WHERE username = #{username}") + String getPasswordByUsername(String username); + /** + * 根据ID查询用户(单条查询) + * @param id 用户ID + * @return 完整用户信息 + */ + @Select("SELECT id, username, password, nickname, create_time AS createTime FROM user WHERE id = #{id}") + UserBody getUserById(Long id); + + /** + * 根据用户名查询完整用户信息(登录/校验用) + * @param username 用户名 + * @return 完整用户信息 + */ + @Select("SELECT id, username, password, nickname, create_time AS createTime FROM user WHERE username = #{username}") + UserBody getUserByUsername(String username); + + /** + * 查询所有用户(分页建议用 MyBatis-Plus,这里先实现全量) + * @return 用户列表 + */ + @Select("SELECT id, username, password, nickname, create_time AS createTime FROM user") + List listAllUsers(); + + // ==================== 增 ==================== + /** + * 新增用户(自增ID) + * @param user 用户实体 + * @return 影响行数(1=成功,0=失败) + */ + @Insert("INSERT INTO user (username, password, nickname, create_time) VALUES (#{username}, #{password}, #{nickname}, #{createTime})") + @Options(useGeneratedKeys = true, keyProperty = "id") // 自动返回自增的ID到user对象的id字段 + int insertUser(UserBody user); + + // ==================== 改 ==================== + /** + * 根据ID修改用户昵称 + * @param id 用户ID + * @param nickname 新昵称 + * @return 影响行数 + */ + @Update("UPDATE user SET nickname = #{nickname} WHERE id = #{id}") + int updateNicknameById(@Param("id") Long id, @Param("nickname") String nickname); + + /** + * 根据用户名修改密码 + * @param username 用户名 + * @param newPassword 新密码 + * @return 影响行数 + */ + @Update("UPDATE user SET password = #{newPassword} WHERE username = #{username}") + int updatePasswordByUsername(@Param("username") String username, @Param("newPassword") String password); + + // ==================== 删 ==================== + /** + * 根据ID删除用户 + * @param id 用户ID + * @return 影响行数 + */ + @Delete("DELETE FROM user WHERE id = #{id}") + int deleteUserById(Long id); + + /** + * 根据用户名删除用户 + * @param username 用户名 + * @return 影响行数 + */ + @Delete("DELETE FROM user WHERE username = #{username}") + int deleteUserByUsername(String username); +} diff --git a/user-service/src/main/resources/application.yml b/user-service/src/main/resources/application.yml new file mode 100644 index 0000000..42d3b93 --- /dev/null +++ b/user-service/src/main/resources/application.yml @@ -0,0 +1,24 @@ +server: + port: 9091 +spring: + data: + redis: + port: 6379 + password: "" + database: 0 + timeout: 10000 + datasource: + # 连接 URL(关键:test_db 是你要连接的数据库名,需提前创建) + url: jdbc:mysql://rm-f8z6oc5a03331500p8o.mysql.rds.aliyuncs.com:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + # 数据库用户名 + username: root + # 数据库密码(替换为你的 MySQL 密码) + password: Root123456 + # 驱动类名(MySQL 8.x 用这个,5.x 改为 com.mysql.jdbc.Driver) + driver-class-name: com.mysql.cj.jdbc.Driver + # 连接池配置(可选,提升性能) + hikari: + maximum-pool-size: 10 # 最大连接数 + minimum-idle: 2 # 最小空闲连接数 + idle-timeout: 60000 # 空闲连接超时时间(毫秒) + connection-timeout: 30000 # 连接超时时间(毫秒) \ No newline at end of file diff --git a/user-service/src/test/java/cn/mayiming/AppTest.java b/user-service/src/test/java/cn/mayiming/AppTest.java new file mode 100644 index 0000000..2244532 --- /dev/null +++ b/user-service/src/test/java/cn/mayiming/AppTest.java @@ -0,0 +1,38 @@ +package cn.mayiming; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +}