修改TP的import方法

本文介绍了一种PHP中实现类库别名导入的方法,并带有缓存功能,旨在提高代码的可读性和效率。通过使用自定义函数import,可以为系统类库设置别名,同时对外部文件采用全称引用的方式。
用起来不习惯,原函数用.代替/,用#代替.
我觉得系统类库和常用类用别名列表导入,引入外部文件,直接引入全称就好了。

/**
+----------------------------------------------------------
* 导入所需的类库 同java的Import
* 本函数有缓存功能
+----------------------------------------------------------
* @param string $class 类库命名空间字符串
+----------------------------------------------------------
* @return boolen
+----------------------------------------------------------
*/
function import($class)
{
static $_class = array();
if(isset($_class[$class])) {
return true;
} else if(file_exists($class)){
$_file[$class] = true;
return require_cache($class);
} else {
return alias_import($class);
}
}
我现在实现了一个springboot项目,用户系统,用mysql实现持久化。我现在想利用cassandra实现持久化,使用Spring Data for Apache Cassandra实现user,并且与mysql同时存在,在Controller层不变的情况下,实现通过简单修改配置后,更换不同的数据库。我的controller代码是/* * Copyright (c) 2020, TP-Link Co.,Ltd. All rights reserved. */ package com.tplink.nbu.demo.basicspringboot.controller; import javax.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.tplink.nbu.demo.basicspringboot.annotation.UserAuth; import com.tplink.nbu.demo.basicspringboot.bean.UserInfo; import com.tplink.nbu.demo.basicspringboot.component.EmailDuplicateCounter; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginSuccessDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserRegisterDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserUpdateDTO; import com.tplink.nbu.demo.basicspringboot.entity.User; import com.tplink.nbu.demo.basicspringboot.exception.EmailExistsException; import com.tplink.nbu.demo.basicspringboot.exception.MaxRegisterExceededException; import com.tplink.nbu.demo.basicspringboot.exception.UnauthorizedException; import com.tplink.nbu.demo.basicspringboot.service.UserService; /** * @author liufuyongle@tp-link.com.cn * @version 1.0 * @since 2020/7/13 */ @Slf4j @RestController @RequestMapping("/user") public class UserLogInOutController { @Autowired private UserService userService; // 注入最大注册数配置 @Value("${system.user.max-register}") private int maxRegister; @Autowired private EmailDuplicateCounter emailDuplicateCounter; // 登录接口 @PostMapping("/login") public UserLoginSuccessDTO login(@Valid @RequestBody UserLoginDTO loginDTO) { boolean auth = userService.auth(loginDTO); if (!auth) { throw new UnauthorizedException(); } log.info("{} login", loginDTO.getUsernameOrEmail()); return UserLoginSuccessDTO.builder() .token(loginDTO.getUsernameOrEmail()) .build(); } // 登出接口 @UserAuth @PostMapping("/logout") public UserInfo logout(UserInfo userInfo) { log.info("{} logout", userInfo.getUsername()); return userInfo; } // 注册接口 @PostMapping("/register") public String register(@Valid @RequestBody UserRegisterDTO registerDTO) { // 邮箱是否重复 if (userService.existsByEmail(registerDTO.getEmail())) { // 触发metrics统计 emailDuplicateCounter.increment(); throw new EmailExistsException(); } // 是否超过最大注册数 if (userService.count() >= maxRegister) { throw new MaxRegisterExceededException(); } // 注册 userService.register(registerDTO); return "REGISTERED SUCCESSFULLY"; } // 注销接口 @UserAuth @PostMapping("/delete") public String delete(UserInfo userInfo) { userService.delete(userInfo.getUsername()); return userInfo.getUsername() + " 注销成功"; } // 查询信息 @UserAuth @PostMapping("/info") public User getUserInfo(UserInfo userInfo) { return userService.getUser(userInfo.getUsername()); } // 修改信息 @UserAuth @PostMapping("/update") public String updateUserInfo(@Valid @RequestBody UserUpdateDTO updateDTO, UserInfo userInfo) { userService.updateUser(updateDTO, userInfo); return userInfo.getUsername() + "用户信息更新成功"; } } mysql数据实体类是package com.tplink.nbu.demo.basicspringboot.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; /** * @author Liu Long * @version 1.0 * @since 2025/8/22 */ @Entity @Table(name = "user", uniqueConstraints = {@UniqueConstraint(columnNames = "email")}) @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; private String address; } mysql的repository是package com.tplink.nbu.demo.basicspringboot.repository; import com.tplink.nbu.demo.basicspringboot.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; /** * @author Liu Long * @version 1.0 * @since 2025/8/22 */ @Repository public interface UserRepository extends JpaRepository<User, Long> { // 根据用户名查询用户 User findByUsername(String username); // 根据邮箱查询用户 User findByEmail(String email); // 校验邮箱是否存在 boolean existsByEmail(String email); } service接口是package com.tplink.nbu.demo.basicspringboot.service; import com.tplink.nbu.demo.basicspringboot.bean.UserInfo; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserRegisterDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserUpdateDTO; import com.tplink.nbu.demo.basicspringboot.entity.User; /** * @author liufuyongle@tp-link.com.cn * @version 1.0 * @since 2020/7/13 */ public interface UserService { // 登陆验证 boolean auth(UserLoginDTO loginDTO); // 注册方法 void register(UserRegisterDTO registerDTO); // 统计用户总数 long count(); // 邮箱存在校验 boolean existsByEmail(String email); // 注销方法 void delete(String username); // 查询方法 User getUser(String usernameOrEmail); // 修改方法 void updateUser(UserUpdateDTO updateDTO, UserInfo userInfo); } service实现类是/* * Copyright (c) 2020, TP-Link Co.,Ltd. All rights reserved. */ package com.tplink.nbu.demo.basicspringboot.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tplink.nbu.demo.basicspringboot.bean.UserInfo; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserRegisterDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserUpdateDTO; import com.tplink.nbu.demo.basicspringboot.entity.User; import com.tplink.nbu.demo.basicspringboot.repository.UserRepository; /** * @author liufuyongle@tp-link.com.cn * @version 1.0 * @since 2020/7/13 */ @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public boolean auth(UserLoginDTO loginDTO) { // 通过用户名查询用户 User user = userRepository.findByUsername(loginDTO.getUsernameOrEmail()); // 若用户名查不到,再通过邮箱查询 if (user == null) { user = userRepository.findByEmail(loginDTO.getUsernameOrEmail()); } return user != null && user.getPassword().equals(loginDTO.getPassword()); } // 注册逻辑 @Override public void register(UserRegisterDTO registerDTO) { User user = new User(); user.setUsername(registerDTO.getUsername()); user.setPassword(registerDTO.getPassword()); user.setEmail(registerDTO.getEmail()); user.setAddress(registerDTO.getAddress()); userRepository.save(user); } // 统计用户总数 @Override public long count() { return userRepository.count(); } // 校验邮箱是否已存在 @Override public boolean existsByEmail(String email) { return userRepository.existsByEmail(email); } // 注销逻辑 @Override public void delete(String username) { User user = userRepository.findByUsername(username); userRepository.delete(user); } // 查询逻辑 @Override public User getUser(String username) { return userRepository.findByUsername(username); } // 更新逻辑 @Override public void updateUser(UserUpdateDTO updateDTO, UserInfo userInfo) { User existingUser = userRepository.findByUsername(userInfo.getUsername()); if (updateDTO.getNewPassword() != null) { existingUser.setPassword(updateDTO.getNewPassword()); } if (updateDTO.getNewAddress() != null) { existingUser.setAddress(updateDTO.getNewAddress()); } userRepository.save(existingUser); } } 配置文件application.properties是# MySQL spring.datasource.url=jdbc:mysql://localhost:3306/user_db?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Cassandra #spring.data.cassandra.contact-points=localhost #spring.data.cassandra.port=9042 #spring.data.cassandra.keyspace-name=user_keyspace #spring.data.cassandra.local-datacenter=datacenter1 #spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS # JPA spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect # Actuator management.endpoints.web.exposure.include=metrics,prometheus # max register system.user.max-register=100我该怎么修改,给我详细的步骤和过程,谢谢
08-30
package com.tplink.cloud.demo.websocket_client; import org.springframework.messaging.converter.MappingJackson2MessageConverter; import org.springframework.messaging.simp.stomp.StompHeaders; import org.springframework.messaging.simp.stomp.StompSession; import org.springframework.messaging.simp.stomp.StompSessionHandler; import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter; import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.messaging.WebSocketStompClient; import org.springframework.web.socket.sockjs.client.SockJsClient; import org.springframework.web.socket.sockjs.client.Transport; import org.springframework.web.socket.sockjs.client.WebSocketTransport; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; import javax.websocket.ContainerProvider; import javax.websocket.WebSocketContainer; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; /** Description of this file @author Li Tailong @version 1.0 @since 2025/10/27 */ public class DeviceImportClient { // HTTP请求的目标URL(根据实际环境修改) private static final String HTTP_ENDPOINT = "http://your-server-domain/api/v2/device/import"; // WebSocket连接地址(根据实际环境修改) private static final String WEBSOCKET_URL = "ws://your-server-domain/ws-endpoint"; public static void main(String[] args) throws Exception { // 1. 配置WebSocket客户端(包含256KB缓冲区) WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.setDefaultMaxTextMessageBufferSize(262144); container.setDefaultMaxBinaryMessageBufferSize(262144); Transport webSocketTransport = new WebSocketTransport(new StandardWebSocketClient(container)); List<Transport> transports = new ArrayList<>(); transports.add(webSocketTransport); SockJsClient sockJsClient = new SockJsClient(transports); WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); stompClient.setMessageConverter(new MappingJackson2MessageConverter()); // 2. 创建STOMP会话处理器 StompSessionHandler sessionHandler = new StompSessionHandlerAdapter() { @Override public void afterConnected(StompSession session, StompHeaders connectedHeaders) { System.out.println("WebSocket连接成功!会话ID: " + session.getSessionId()); // 订阅目标主题(根据实际需求修改) session.subscribe("/topic/device-import-status", this); System.out.println("已订阅设备导入状态主题"); } @Override public void handleFrame(StompHeaders headers, Object payload) { if (payload != null) { System.out.println("收到订阅消息: " + payload.toString()); } } }; // 3. 连接WebSocket服务器 try { StompSession stompSession = stompClient.connect(WEBSOCKET_URL, sessionHandler).get(); System.out.println("WebSocket连接建立完成,准备发送HTTP请求..."); // 4. 发送HTTP POST请求 sendDeviceImportRequest(); // 保持连接以接收订阅消息(根据需要调整等待时间) Thread.sleep(60000); // 等待60秒 stompSession.disconnect(); } catch (InterruptedException | ExecutionException e) { System.err.println("WebSocket连接失败: " + e.getMessage()); } } private static void sendDeviceImportRequest() { // 创建请求对象 DeviceImportRequest request = new DeviceImportRequest(); request.setUsername("admin"); request.setPassword("0pVyQVzuA0cSyS29h7Sn2aqPK7nIAD0EaSu9daKxCx5Sjy6aKkeUbmII5f7Boq/rfGSu8LlzuJcvUV3yNXNjelzQt5iQEXfGJvVeT5DF9/1jP3c9wmC8uJHwELynxM5QLcvj+0FnRpZxzPVFcVq9Qa68u0CzoL5nL7Pt125f6F91yyE06DBEbEkeC0Lmbmcv8lOREiOmxSoMSazi0uiVOMfCjHEli8+YcjjRF7/PJEuchuuro4WuRDpl4fVMvso+F/WZ+W0FI2hP/y90OsZUWgStP591ga9SJYvqlIxHIfjuXhFZlNB8o2QEB9Gvbu2aFntVwyE2283kWcErBUXATw=="); request.setImportId("146a67b7b1350179eac415dc6f2351d5"); request.setNeedInitDevice(false); request.setWhetherRsa(true); // 添加设备列表 List<DeviceInfo> deviceList = new ArrayList<>(); deviceList.add(new DeviceInfo("TP14C3EFF0E1A638F582040")); deviceList.add(new DeviceInfo("TP14C3EFF0E1A62F47C2040")); request.setDeviceList(deviceList); // 配置HTTP请求 RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<DeviceImportRequest> entity = new HttpEntity<>(request, headers); // 发送请求并处理响应 try { ResponseEntity<String> response = restTemplate.postForEntity( HTTP_ENDPOINT, entity, String.class); System.out.println("HTTP请求发送成功!状态码: " + response.getStatusCode()); System.out.println("响应内容: " + response.getBody()); } catch (Exception e) { System.err.println("HTTP请求发送失败: " + e.getMessage()); } } // 内部类定义请求数据结构 static class DeviceImportRequest { private List<DeviceInfo> deviceList; private String username; private String password; private String importId; private boolean needInitDevice; private boolean whetherRsa; // 所有属性的getter和setter public List<DeviceInfo> getDeviceList() { return deviceList; } public void setDeviceList(List<DeviceInfo> deviceList) { this.deviceList = deviceList; } 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 getImportId() { return importId; } public void setImportId(String importId) { this.importId = importId; } public boolean isNeedInitDevice() { return needInitDevice; } public void setNeedInitDevice(boolean needInitDevice) { this.needInitDevice = needInitDevice; } public boolean isWhetherRsa() { return whetherRsa; } public void setWhetherRsa(boolean whetherRsa) { this.whetherRsa = whetherRsa; } } static class DeviceInfo { private String qrCode; public DeviceInfo(String qrCode) { this.qrCode = qrCode; } public String getQrCode() { return qrCode; } public void setQrCode(String qrCode) { this.qrCode = qrCode; } } } 基于这个客户端代码,将其deviceList变成:“TP14C3EFF0E1A638F582040”, “TP14C3EFF0E1A62F47C2040”, “TP14C3EFF0E1A6B477D2040”, “TP14C3EFF0E1A6AFEF02040”, “TP14C3EFF0E1A65C1282040”, “TP14C3EFF0E1A6437D82040”, “TP14C3EFF0E1A67AA172040”, “TP14C3EFF0E1A669FF22040”, “TP14C3EFF0E1A61B01E2040”, “TP14C3EFF0E1A60E0BB2040”, “TP14C3EFF0E1A696EF22040”, “TP14C3EFF0E1A6CE36E2040”, “TP14C3EFF0E1A6E33592040”, “TP14C3EFF0E1A6DF2BC2040”, “TP14C3EFF0E1A6898AD2040”, “TP14C3EFF0E1A6F52152040”, “TP14C3EFF0E1A72699B2040”, “TP14C3EFF0E1A71687A2040”, “TP14C3EFF0E1A73E52E2040”, “TP14C3EFF0E1A7ADB8B2040”, “TP14C3EFF0E1A7407632040”, “TP14C3EFF0E1A7B9DD62040”, “TP14C3EFF0E1A76343B2040”, “TP14C3EFF0E1A75AC5F2040”, “TP14C3EFF0E1A70D21F2040”, “TP14C3EFF0E1A77620B2040”, “TP14C3EFF0E1A792E392040”, “TP14C3EFF0E1A78016E2040”, “TP14C3EFF0E1BE278792040”, “TP14C3EFF0E1BE133D32040”, “TP14C3EFF0E1BE34BA92040”, “TP14C3EFF0E1BEA08EF2040”, “TP14C3EFF0E1BE4A2DA2040”, “TP14C3EFF0E1BEB0B352040”, “TP14C3EFF0E1BE613FF2040”, “TP14C3EFF0E1BE5023D2040”, “TP14C3EFF0E1BE0F3082040”, “TP14C3EFF0E1BE7319A2040”, “TP14C3EFF0E1BE9C4192040”, “TP14C3EFF0E1BE8A4DA2040”, “TP14C3EFF0E1BED0C332040”, “TP14C3EFF0E1BECB3272040”, “TP14C3EFF0E1BEF05EA2040”, “TP14C3EFF0E1BEEEB102040”, “TP14C3EFF0E1BF186642040”, “TP14C3EFF0E1BF056F12040”, “TP14C3EFF0E1BF310D02040”, “TP14C3EFF0E1BF20B912040”, “TP14C3EFF0E1BFBD10E2040”, “TP14C3EFF0E1BFA6D172040”, “TP14C3EFF0E1BF5B3322040”, “TP14C3EFF0E1BF44BC02040”, “TP14C3EFF0E1BF705962040”, “TP14C3EFF0E1BF6606D2040”, “TP14C3EFF0E1BF861312040”, “TP14C3EFF0E1BFFD5662040”, “TP14C3EFF0E1BF97C522040”, “TP14C3EFF0E1BFC44192040”, “TP14C3EFF0E1BFEAB402040”, “TP14C3EFF0E1BFD44A52040”, “TP14C3EFF0E1B9A19872040”, “TP14C3EFF0E1B9DFCEA2040”, “TP14C3EFF0E1B9C4C452040”, “TP14C3EFF0E1B9FB6AD2040”, “TP14C3EFF0E1B9E94142040”, “TP14C3EFF0E1B99CD7F2040”, “TP14C3EFF0E1B9892B42040”, “TP14C3EFF0E1B1C42BA2040”, “TP14C3EFF0E1B1D622B2040”, “TP14C3EFF0E1BBAC7812040”, “TP14C3EFF0E1BB43E5B2040”, “TP14C3EFF0E1BBB48D62040”, “TP14C3EFF0E1BBD066D2040”, “TP14C3EFF0E1BBC1A952040”, “TP14C3EFF0E1BBFF0102040”, “TP14C3EFF0E1BBE25B82040”, “TP14C3EFF0E1BB9E99E2040”, “TP14C3EFF0E1BB85B8C2040”, “TP14C3EFF0E1B8505532040”, “TP14C3EFF0E1B84E1362040”, “TP14C3EFF0E1B871B422040”, “TP14C3EFF0E1B8605C32040”, “TP14C3EFF0E1B8175782040”, “TP14C3EFF0E1B80F12F2040”, “TP14C3EFF0E1B8320C12040”, “TP14C3EFF0E1B82E1EC2040”, “TP14C3EFF0E1B8B4FAC2040”, “TP14C3EFF0E1B8A1C942040”, “TP14C3EFF0E1B8CC1B42040”, “TP14C3EFF0E1B8E8AA42040”, “TP14C3EFF0E1B8DEE662040”, “TP14C3EFF0E1B8879D02040”, “TP14C3EFF0E1B8F6C9C2040”, “TP14C3EFF0E1B89B3C82040”, “TP14C3EFF0E1B9366462040”, “TP14C3EFF0E1B945C3B2040”, “TP14C3EFF0E1B9B9FBE2040”, “TP14C3EFF0E1B96160F2040”, “TP14C3EFF0E1B952BE02040”, “TP14C3EFF0E1B9009322040”, “TP14C3EFF0E1B97469B2040”, “TP14C3EFF0E1B92E0602040”, “TP14C3EFF0E1B91BF7E2040”, “TP14C3EFF0E1BDAAFA42040”, “TP14C3EFF0E1BD4CBD82040”, “TP14C3EFF0E1BDB652E2040”, “TP14C3EFF0E1BD6D1E92040”, “TP14C3EFF0E1A5D9FB12040”, “TP14C3EFF0E1BD58D462040”, “TP14C3EFF0E1A5C9CA52040”, “TP14C3EFF0E1BDF2B6C2040”, “TP14C3EFF0E1A27A74B2040”, “TP14C3EFF0E1BDE59202040”, “TP14C3EFF0E1A26816C2040”, “TP14C3EFF0E1BD9AD8A2040”, “TP14C3EFF0E1A21C7392040”, “TP14C3EFF0E1BD8E3A52040”, “TP14C3EFF0E1A209BC32040”, “TP14C3EFF0E1A2337F12040”, “TP14C3EFF0E1A227C1A2040”, “TP14C3EFF0E1BDD8DC02040”, “TP14C3EFF0E1BDC723E2040”, “TP14C3EFF0E1BA79A162040”, “TP14C3EFF0E1BA6ED472040”, “TP14C3EFF0E1BA187232040”, “TP14C3EFF0E1BA053972040”, “TP14C3EFF0E1BA36CC52040”, “TP14C3EFF0E1BA2072B2040”, “TP14C3EFF0E1BAB5FEB2040”, “TP14C3EFF0E1BAADBE52040”, “TP14C3EFF0E1BA52C812040”, “TP14C3EFF0E1BA473B72040”, “TP14C3EFF0E1BAEC1DB2040”, “TP14C3EFF0E1BAD26E72040”, “TP14C3EFF0E1BA8776F2040”, “TP14C3EFF0E1BAF73E72040”, “TP14C3EFF0E1BA9DAEA2040”, “TP14C3EFF0E1BACCEF22040”, “TP14C3EFF0E1BB69E532040”, “TP14C3EFF0E1BB58E762040”, “TP14C3EFF0E1BB00E992040”, “TP14C3EFF0E1BB7E7C62040”, “TP14C3EFF0E1BB2EFD72040”, “TP14C3EFF0E1BB172E12040”, “TP14C3EFF0E1BB34E872040”, “TP14C3EFF0E1A7D5DFA2040”, “TP14C3EFF0E1A7C04142040”, “TP14C3EFF0E1A7F0EE62040”, “TP14C3EFF0E1A7E30402040”, “TP14C3EFF0E1A41BC4D2040”, “TP14C3EFF0E1A40CE712040”, “TP14C3EFF0E1A438B152040”, “TP14C3EFF0E1A42D1612040”, “TP14C3EFF0E1A4B89712040”, “TP14C3EFF0E1A4A4E542040”, “TP14C3EFF0E1A45A8492040”, “TP14C3EFF0E1A44AAE42040”, “TP14C3EFF0E1A475DBC2040”, “TP14C3EFF0E1A464A042040”, “TP14C3EFF0E1BC1A80C2040”, “TP14C3EFF0E1A4832F12040”, “TP14C3EFF0E1BC0BABE2040”, “TP14C3EFF0E1A4F78132040”, “TP14C3EFF0E1BC3BD3E2040”, “TP14C3EFF0E1BC2A2832040”, “TP14C3EFF0E1A49E4022040”, “TP14C3EFF0E1BCB79282040”, “TP14C3EFF0E1BCAC7072040”, “TP14C3EFF0E1BC5DF1C2040”, “TP14C3EFF0E1A4CDD4C2040”, “TP14C3EFF0E1BC40FB52040”, “TP14C3EFF0E1BC7CF832040”, “TP14C3EFF0E1A4EB2712040”, “TP14C3EFF0E1BC648DC2040”, “TP14C3EFF0E1A4D08262040”, “TP14C3EFF0E1BC8699D2040”, “TP14C3EFF0E1A50AEA82040”, “TP14C3EFF0E1BCF1F0E2040”, “TP14C3EFF0E1A57F7862040”, “TP14C3EFF0E1A525BA42040”, “TP14C3EFF0E1BC9CD8C2040”, “TP14C3EFF0E1A517A292040”, “TP14C3EFF0E1A5322682040”, “TP14C3EFF0E1A5A83BC2040”, “TP14C3EFF0E1BCCEE7E2040”, “TP14C3EFF0E1A5436512040”, “TP14C3EFF0E1A5BFE3D2040”, “TP14C3EFF0E1BCEA8142040”, “TP14C3EFF0E1A564A4C2040”, “TP14C3EFF0E1BCDAAB42040”, “TP14C3EFF0E1A5539AF2040”, “TP14C3EFF0E1BD093C22040”, “TP14C3EFF0E1A5F12202040”, “TP14C3EFF0E1BD7592C2040”, “TP14C3EFF0E1A5E39702040”, “TP14C3EFF0E1BD2C15C2040”, “TP14C3EFF0E1A5955402040”, “TP14C3EFF0E1BD142BD2040”, “TP14C3EFF0E1A58F8E02040”, “TP14C3EFF0E1BD3FAE82040”
10-28
我现在通过Spring Data JPA使用mysql来实现我项目的数据管理,相关代码如下package com.tplink.nbu.demo.basicspringboot.service; import com.tplink.nbu.demo.basicspringboot.bean.UserInfo; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserRegisterDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserUpdateDTO; import com.tplink.nbu.demo.basicspringboot.entity.User; /** @author liufuyongle@tp-link.com.cn @version 1.0 @since 2020/7/13 */ public interface UserService { // 登陆验证 boolean auth(UserLoginDTO loginDTO); // 注册方法 void register(UserRegisterDTO registerDTO); // 统计用户总数 long count(); // 邮箱存在校验 boolean existsByEmail(String email); // 注销方法 void delete(String username); // 查询方法 User getUser(String usernameOrEmail); // 修改方法 void updateUser(UserUpdateDTO updateDTO, UserInfo userInfo); } /* Copyright © 2020, TP-Link Co.,Ltd. All rights reserved. */ package com.tplink.nbu.demo.basicspringboot.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tplink.nbu.demo.basicspringboot.bean.UserInfo; import com.tplink.nbu.demo.basicspringboot.dto.UserLoginDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserRegisterDTO; import com.tplink.nbu.demo.basicspringboot.dto.UserUpdateDTO; import com.tplink.nbu.demo.basicspringboot.entity.User; import com.tplink.nbu.demo.basicspringboot.repository.UserRepository; /** @author liufuyongle@tp-link.com.cn @version 1.0 @since 2020/7/13 */ @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public boolean auth(UserLoginDTO loginDTO) { // 通过用户名查询用户 User user = userRepository.findByUsername(loginDTO.getUsernameOrEmail()); // 若用户名查不到,再通过邮箱查询 if (user == null) { user = userRepository.findByEmail(loginDTO.getUsernameOrEmail()); } return user != null && user.getPassword().equals(loginDTO.getPassword()); } // 注册逻辑 @Override public void register(UserRegisterDTO registerDTO) { User user = new User(); user.setUsername(registerDTO.getUsername()); user.setPassword(registerDTO.getPassword()); user.setEmail(registerDTO.getEmail()); user.setAddress(registerDTO.getAddress()); userRepository.save(user); } // 统计用户总数 @Override public long count() { return userRepository.count(); } // 校验邮箱是否已存在 @Override public boolean existsByEmail(String email) { return userRepository.existsByEmail(email); } // 注销逻辑 @Override public void delete(String username) { User user = userRepository.findByUsername(username); userRepository.delete(user); } // 查询逻辑 @Override public User getUser(String username) { return userRepository.findByUsername(username); } // 更新逻辑 @Override public void updateUser(UserUpdateDTO updateDTO, UserInfo userInfo) { User existingUser = userRepository.findByUsername(userInfo.getUsername()); if (updateDTO.getNewPassword() != null) { existingUser.setPassword(updateDTO.getNewPassword()); } if (updateDTO.getNewAddress() != null) { existingUser.setAddress(updateDTO.getNewAddress()); } userRepository.save(existingUser); } } package com.tplink.nbu.demo.basicspringboot.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; /** @author Liu Long @version 1.0 @since 2025/8/22 */ @Entity @Table(name = “user”, uniqueConstraints = {@UniqueConstraint(columnNames = “email”)}) @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; private String address; } package com.tplink.nbu.demo.basicspringboot.repository; import com.tplink.nbu.demo.basicspringboot.entity.User; import org.springframework.data.jpa.repository.JpaRepository; /** @author Liu Long @version 1.0 @since 2025/8/22 */ public interface UserRepository extends JpaRepository<User, Long> { // 根据用户名查询用户 User findByUsername(String username); // 根据邮箱查询用户 User findByEmail(String email); // 校验邮箱是否存在 boolean existsByEmail(String email); } MySQL spring.datasource.url=jdbc:mysql://localhost:3306/user_db?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver我现在有个想法,使用Spring Data for Apache Cassandra来通过Cassandra实现user的数据存储,达到可替换MySQL,并且在Controller层不变的情况下,实现通过简单修改配置后,更换不同的数据源,如何做到这一点,给我详细的教程,我已经装了cassandra,我的配置文件是application.properties
08-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值