@cake9973

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌