小帅包 2024-05-27 15:54 采纳率: 21.4%
浏览 45

如何用springboot写自定义查询数据库字段以及根据传入字段写增删改查方法

如何用springboot写自定义查询数据库字段以及根据传入字段写增删改查方法

public List<Map<String, Object>> getDataFromSql(String sql) {
             return jdbcTemplate.queryForList(sql);
    }

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-27 15:54
    关注

    引自免费微信小程序:皆我百晓生

    在Spring Boot中,为了实现自定义查询数据库字段并根据传入的参数执行增删改查操作,我们可以使用JPA(Java Persistence API)和Spring Data JPA。这里是一个详细的步骤和示例代码。

    首先,确保你的项目已经配置了Spring Data JPA和一个数据源。如果你还没有配置,可以参考官方文档:https://spring.io/guides/gs/accessing-data-jpa/

    1. 创建实体类(Entity)

    例如,有一个User实体类:

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        private String name;
        private String email;
    
        // getters and setters
    }
    
    1. 创建Repository接口

    创建一个继承了JpaRepository的接口,这个接口会自动提供基本的CRUD操作,并且可以通过方法名来执行自定义SQL查询。例如:

    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.CrudRepository;
    
    import java.util.List;
    
    public interface UserRepository extends CrudRepository<User, Long> {
    
        @Query("SELECT u.name, u.email FROM User u WHERE u.id = ?1")
        List<Map<String, Object>> getNameAndEmailById(Long id);
    
        @Query(value = "SELECT * FROM User", nativeQuery = true)
        List<Map<String, Object>> getAllUsersNative();
    
        // 也可以根据需要添加其他自定义查询方法
    }
    
    1. 使用Repository

    在你的服务类中注入UserRepository,然后就可以调用这些方法了:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
        private final UserRepository userRepository;
    
        @Autowired
        public UserService(UserRepository userRepository) {
            this.userRepository = userRepository;
        }
    
        public Map<String, Object> getUserInfoById(Long id) {
            List<Map<String, Object>> result = userRepository.getNameAndEmailById(id);
            if (result.isEmpty()) {
                throw new ResourceNotFoundException("User not found");
            }
            return result.get(0);
        }
    
        public List<Map<String, Object>> getAllUsers() {
            return userRepository.getAllUsersNative();
        }
    
        // 其他业务逻辑...
    }
    

    这样,你就有了一个可以根据传入参数进行增删改查的方法。注意,对于复杂的查询,可能需要使用到@Query注解配合原生SQL或者HQL(Hibernate Query Language)来实现。同时,对于更复杂的数据处理需求,可以考虑使用MyBatis或手写DAO层。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月27日