RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-550226

Олег Макаров's questions

Martin Hope
Олег Макаров
Asked: 2025-01-02 04:14:15 +0000 UTC

数据库中运行的查询出现 BadSqlGrammarException

  • 5

我收到以下错误:

获取请求:

{
    "timestamp": "2025-01-01T19:53:26.424+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "trace": "org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select id, name, description from roll_data]\r\n\tat",
    "message": "PreparedStatementCallback; bad SQL grammar [select id, name, description from roll_data]",
    "path": "/rolls/all"
}

请求本身:

public static final String GET_ALL_ROLLS = "select id, name, description from roll_data";

实体:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "roll_data", schema = "rolls")
public class RollEntity {
    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;
}

映射器:

@Component
public class RollMapper implements RowMapper<RollDto> {

    @Override
    public RollDto mapRow(ResultSet rs, int rowNum) throws SQLException {
        return new RollDto(
                rs.getLong("id"),
                rs.getString("name"),
                rs.getString("description")
        );
    }
}

数据传输对象:

@Data
public class RollDto {

    private Long id;
    private String name;
    private String description;

    public RollDto(Long id, String name, String description) {
        this.id = id;
        this.name = name;
        this.description = description;
    }

    public RollDto() {
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Long id() {
        return id;
    }

    public String name() {
        return name;
    }

    public String description() {
        return description;
    }
}

存储库:

@Repository
public class RollRepositoryImpl implements RollRepository {

    private final NamedParameterJdbcTemplate jdbcTemplate;

    private RollMapper rollMapper;

    public RollRepositoryImpl(NamedParameterJdbcTemplate jdbcTemplate, RollMapper rollMapper) {
        this.jdbcTemplate = jdbcTemplate;
        this.rollMapper = rollMapper;
    }

    @Override
    public List<RollDto> allRolls() throws NullPointerException{
        MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource();
        return new
                ArrayList<>
                (jdbcTemplate.query(Sql.GET_ALL_ROLLS, mapSqlParameterSource, rollMapper));
    }
}

相同的查询在数据库中也有效。

java
  • 1 个回答
  • 34 Views
Martin Hope
Олег Макаров
Asked: 2023-07-14 13:28:25 +0000 UTC

不将 Json 解析为 DTO

  • 6

我正在尝试为 patch 方法制作一个通用的 DTO,但是背心 JSON 被写入关键字段

实体对象:

@Entity
@Table(name = "employee")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="employee_seq")
    @SequenceGenerator(name="employee_seq", sequenceName="employee_seq", allocationSize=1)
    private Integer id;

    @Nonnull
    private String name;

    @Nonnull
    private String position;

    @Nonnull
    private Integer department;

    @Nonnull
    private Long phone;


    private String address;

    @Nonnull
    private String employmentDate;

}

DTO:

@Data
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class PatchDTO <T> {

    private String key;
    private T value;
}

控制器:

@RestController
public class EmployeeController{

    @Autowired
    EmployeeServiceImpl employeeService;

    EmployeeMapper mapper;


    @PatchMapping("/employee/{id}/update/{parameter}")
    public <T> HttpStatus updateEmployee(@PathVariable(value = "id") Integer employeeId,
                                         @PathVariable(value = "parameter") String parameter,
                                         @RequestBody Map<String, T> jsonData) throws
            EmployeeNotFoundException, ParseException{
        return employeeService.updateEmployee(employeeId, jsonData);
    }


}

服务:

@Service
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    @Autowired
    private DepartmentServiceImpl departmentService;

    @Autowired
    private PositionServiceImpl positionService;

    @Autowired
    private EmployeeMapperImpl employeeMapperImpl;

    public <T> HttpStatus updateEmployee(Integer employeeId, Map<String, T> jsonData) throws
            EmployeeNotFoundException, ParseException{

        Employee employee = (Employee) employeeRepository.findById(employeeId)
                .orElseThrow(() -> new EmployeeNotFoundException(employeeId));

        System.out.println(1234567890);

        PatchDTO patchDTO = employeeMapperImpl.toPatchDTO(jsonData);


        System.out.println("error is here");

        if (patchDTO.getKey().equals("name")) {
            employee.setName(patchDTO.getValue().toString());
        }

        employeeRepository.save(employee);
        return HttpStatus.OK;
    }
}

地图绘制者:

@Component
public interface EmployeeMapper {

    EmployeeDTO toEmployeeDTO(Employee employee);

    Employee toEmployee(EmployeeDTO employeeDTO);

    <T> PatchDTO toPatchDTO(Map<String, T> dataToUpdate);

}
@Component
public class EmployeeMapperImpl implements EmployeeMapper {

    @Override
    public EmployeeDTO toEmployeeDTO(Employee employee) {
        if ( employee == null ) {
            return null;
        }

        EmployeeDTO employeeDTO = new EmployeeDTO();

        employeeDTO.setId( employee.getId() );
        employeeDTO.setName( employee.getName() );
        employeeDTO.setPosition( employee.getPosition() );
        employeeDTO.setDepartment( employee.getDepartment() );
        employeeDTO.setPhone( employee.getPhone() );
        employeeDTO.setAddress( employee.getAddress() );
        employeeDTO.setEmploymentDate( employee.getEmploymentDate() );

        return employeeDTO;
    }

    @Override
    public Employee toEmployee(EmployeeDTO employeeDTO) {
        if ( employeeDTO == null ) {
            return null;
        }

        Employee employee = new Employee();

        employee.setId( employeeDTO.getId() );
        employee.setName( employeeDTO.getName() );
        employee.setPosition( employeeDTO.getPosition() );
        employee.setDepartment( employeeDTO.getDepartment() );
        employee.setPhone( employeeDTO.getPhone() );
        employee.setAddress( employeeDTO.getAddress() );
        employee.setEmploymentDate( employeeDTO.getEmploymentDate() );

        return employee;
    }

    @Override
    public <T> PatchDTO toPatchDTO(Map<String, T> dataToUpdate) {
        if ( dataToUpdate == null ) {
            return null;
        }

        PatchDTO patchDTO = new PatchDTO();
        patchDTO.setKey(new ArrayList<String>(dataToUpdate.keySet()).get(0));
        patchDTO.setValue(new ArrayList<T>(dataToUpdate.values()).get(0));

        return patchDTO;
    }
}

问题是最后一个映射器中的 setKey() 方法设置了传递的 json 本身,而不仅仅是它的键。

如果您能提供帮助,我将非常高兴。

java
  • 1 个回答
  • 29 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5