LoginSignup

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

LocalDateからSQLのDate型に変換したい Java11

解決したいこと

java11,springで日付検索の機能を作成しているのですが、
LocalDateからSQLのDate型への変換方法がわからず困っています。

わかる方がいれば教えていただきたいです。よろしくお願いします。

開発環境
java 11
spring 2.7.0
MySQL
mybatis-spring-boot-starter 2.2.2

発生している問題・エラー

LocalDateからSQLのDate型への変換方法

該当するソースコード

Controller

@PostMapping("/id_search")
    public String search(
            @Validated @ModelAttribute InventorySearchReq inventorySearchReq,
            Model model) {



        java.sql.Date sqlDate = (現状わかっていない部分)

        List<Inventory> list = inventoryService.findByDate(sqlDate);

        model.addAttribute("list", list);
        model.addAttribute("在庫一覧", "タスク一覧");

        return "inventory/index";
    }

Entity

@Data
public class InventorySearchReq implements Serializable{

    @NotNull (message = "日付を設定してください。")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @PastOrPresent(message = "日付が未来に設定されています。")
    private LocalDate reportDate;

}

Service

@Service
@RequiredArgsConstructor
public class InventoryServiceImpl implements InventoryService {

    private final InventoryMapper inventoryMapper;

    @Override
    public List<Inventory> findByDate(Date sqlDate) {
        return inventoryMapper.findByDate(sqlDate);
    }

}

Mapper

@Mapper
public interface InventoryMapper {

    @Select("SELECT * FROM inventorys INNER JOIN products ON inventorys.products_id = products.id"
            + "WHERE report_date = #{sqlDate}")
    List<Inventory> findByDate(Date sqlDate);
}

自分で試したこと

文字列からsqlのデータ型への変換はjava.sql.Date.valueOf.を使用すればいいのはわかったのですが、LocalDateからStringへの方法がうまくいっていない状況です。

0

1Answer

Comments

  1. @changshangq

    Questioner
    それを参考に下記にしてみたのですが、
    java.sql.Date sqlDate = java.sql.Date.valueOf(inventorySearchReq);
    inventorySearchReqがStringでないといけないよとエラーが出ます。
    しかし、引数であるEntityのデータ型はLocalDateになっています。
  2. @changshangq

    Questioner
    自己解決しました。下記のようにすると無事変換できました。
    java.sql.Date sqlDate = java.sql.Date.valueOf(inventorySearchReq.getReportDate());

    情報をくださってありがとうございました。

Your answer might help someone💌