はじめに
Springの勉強を始めてSpring Data JDBCの@Queryの操作が上手くいかず、
数時間を溶かしたので備忘録として残します。
参考リンク
問題
エラーを吐くわけではないのに、SELECT文がnullで返ってくる。
Users.java(Domain Object)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Users {
	/** 識別ID */
	@Id
	private Integer id;
	/** ユーザ名 */
	private String name;
	/** パスワード */
	private String password;
	/** 作成日時 */
	private Timestamp created_at;
	/** 更新日時 */
	private Timestamp updated_at;
}
Repository.java
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = ':name'")
	List<Users> uniqueUser(String name);
}
Application.java
@SpringBootApplication
public class LearningTimerApplication {
	public static void main(String[] args) {
		SpringApplication.run(LearningTimerApplication.class, args)
				.getBean(LearningTimerApplication.class).execute();
	}
	@Autowired
	UsersRepository users_repository;
	private void execute() {
		//ユーザチェック
		checkUser();
	}
	private void checkUser() {
		//ユーザ名,パスワード
		String name = "hogehoge";
		//ユーザ名が存在しているかチェック
		List<Users> users = users_repository.uniqueUser(name);
		System.out.println(users);
	}
コンソール
[]
解決方法
Repository.javaのWHEREに''(シングルクォーテーション)が不要でした。
Repository.javaを見てみる
Repository.java
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = ':name'")
	List<Users> uniqueUser(String name);
}
SQLに渡したいパラメータは:引数名で指定できますが、
:引数名を入れると''(シングルクォーテーション)も入るようです。
つまり、 WHERE NAME = ':name'と指定していますが、
WHERE NAME = :nameが正しいです。
Repository.java(修正後)
public interface UsersRepository extends CrudRepository<Users,Integer>{	
	//ユーザ重複確認
	@Query("SELECT * FROM USERS WHERE NAME = :name")
	List<Users> uniqueUser(String name);
}
コンソール
[Users(id=10, name=hogehoge, password=hogehoge, created_at=2023-08-16 20:26:41.670788, updated_at=2023-08-16 20:26:41.670788)]
終わりに
どなたかの参考になれば幸いです。