javaによる業務用アプリケーションの作成(インターフェースが見つからない)
解決したいこと
注文フォームを表示したいです。
https://qiita.com/homes31285/items/2115d1e743ce8e5002f0
上記のサイトで業務用アプリケーションを作成していますが、
OrderRepositoryが見つからないとエラーが出ており、spring bootを起動しても止まってしまします。
解決方法を教えて下さい。
発生している問題・エラー
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.example.practice.domain.order.OrderService required a bean of type 'com.example.practice.domain.order.OrderRepository' that could not be found.
Action:
Consider defining a bean of type 'com.example.practice.domain.order.OrderRepository' in your configuration.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.7/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD SUCCESSFUL in 24s
3 actionable tasks: 2 executed, 1 up-to-date
19:26:54: ':PracticeApplication.main()' の実行を完了しました。
OrderRepository.java
package com.example.practice.domain.order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import java.util.List;
import com.example.practice.web.order.OrderForm;
/*
@Mapperをつけることでメソッドを呼び出すときに
自動的に適切なSQLクエリを実行し、
データベースとの間で情報をやり取りできる。
*/
@Mapper
public interface OrderRepository {
/*
SQLクエリを指定して、データベースから全ての注文情報を取得するメソッドです。
@Selectアノテーションにより、このメソッドはMyBatisが自動的にSQLクエリとして認識し、実行します。
"select * from orders"は、ordersテーブルからすべてのカラムを取得するSQLクエリです。
*/
@Select("select * from orders")
/*
取得した注文情報をorderEntityクラスのリストとして返します。
これにより、このインタフェースを呼び出すと、MyBatisが自動的にデータベースから注文情報を取得してリストとして返します。
*/
List<OrderEntity> findAll();
@Insert("insert into ORDERS(order_id,order_date,company_no,company_name,item_no,item,quantity,unit_price,price) values (#{orderId}, #{orderDate}, #{companyNo}, #{companyName}, #{itemNo}, #{item}, #{quantity}, #{unitPrice}, #{price})")
void insert(OrderForm orderForm);
@Select("SELECT MAX(CAST(order_id, SIGNED)) FROM ORDERS")
Integer findMaxOrderId();
}
OrderService.java
package com.example.practice.domain.order;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.example.practice.web.order.OrderForm;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository repository;
@Transactional(readOnly = true)
public List<OrderEntity> findAll() {
return repository.findAll();
}
@Transactional
public void create(OrderForm form, Model model) {
//OrderRepository の insert メソッドを呼び出してデータベースに新しい注文情報を挿入する
repository.insert(form);
}
}
PracticeApplication.java
package com.example.practice;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PracticeApplication {
public static void main(String[] args) {
SpringApplication.run(PracticeApplication.class, args);
}
}
自分で試したこと
・PracticeApplivcation.javaに@MapperScan("com.example.practice.domain.order")を追加。
→SqlSessionFactory と SqlSessionTemplatewを作成してくださいとエラー。作成後も同様のOrderRepositoryが見つからないとエラーが出る
0 likes