2016-08-28 7 views
1

私はSpringプロジェクトを作成しました。私は1つのファイルに対して複数のクエリを作成したいと思います。 、そして、インタフェースTodoRepository.java複数の名前付きクエリ(春)

import org.springframework.data.jpa.repository.Query; 
import org.springframework.data.repository.Repository; 

import java.util.List; 

interface TodoRepository extends Repository<Todo, Long> { 

    @Query(nativeQuery = true) 
    public List<Todo> findByTitleIs(); 
} 

spring.xml

<?xml version="1.0" encoding="UTF-8"?> 
<entity-mappings 
     xmlns="http://java.sun.com/xml/ns/persistence/orm" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" 
     version="2.0"> 

    <named-query name="Todo.findByTitleIs"> 
     <query>SELECT t FROM Todo t WHERE t.title = 'title'</query> 
    </named-query> 
</entity-mappings> 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="employeeDAO" class="com.journaldev.spring.jdbc.dao.EmployeeDAOImpl"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="employeeDAOJDBCTemplate" class="com.journaldev.spring.jdbc.dao.EmployeeDAOJDBCTemplateImpl"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="todoRepositoryBean" class="com.journaldev.spring.jdbc.dao.TodoRepositoryBeanImpl"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/springdb" /> 
     <property name="username" value="root" /> 
     <property name="password" value="root" /> 
    </bean> 

</beans> 

をグーグル後、私は、ファイルorm.xmlを作成する必要があり、https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-with-named-queries/

だから、このリンクを見つけましたクラスSpringMain.javaがある:

public class SpringMain { 

    public static void main(String[] args) 
    { 
     ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 
     EmployeeDAO employeeDAO = ctx.getBean("todoRepositoryBean", EmployeeDAO.class); 
     List<Employee> les = employeeDAO.getAll(); 
     System.out.println("The list size is: + les.size()"); 
     ctx.close(); 
    } 
} 

私はそれが便利だったと思うが、私は問題を発見:どのように私はmainクラスに名前付きクエリTodo.findByTitleIsを使用することができますか?

+1

:あなたはまた、メソッド名メカニズムからクエリの作成を使用しており、このような以前のクエリを記述することができ

@Repository public interface TodoRepository extends JpaRepository<Todo, Long> { // define your custom query @Query("SELECT t FROM Todo t WHERE t.title = :title") public List<Todo> findByTitleIs(@Param("title") String title); // write here all the Todo queries } 

最初のメインクラス?また、ドキュメンテーションを見てください。注釈を使用すると、あなたの経験が向上すると思います。http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query- methods.named-queries –

+0

私は同意すると、注釈はすべてを簡単にすると思います。とにかく、実際にメインクラスのクエリが必要な場合(理由は?)、単純にBeanになるため、ApplicationContextからTodoRepositoryを取得できます。 –

+0

こんにちは、はいメインクラスでは不要なBeanクラスのクエリが必要です。私は私の質問にspring.xmlとSpringMain.javaというファイルを追加しました。 TodoRepositoryを実装すべきクラスTodoRepositoryBeanImplの例を私に教えてもらえますか?ご協力いただきありがとうございます。 – Rosa

答えて

2

ペトリKainulainenのチュートリアルは本当に良いです、あなたはこれを読むことによって、あなたの目標を達成する必要があります

https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-eight-adding-functionality-to-a-repository/

彼はTodoRepositoryクラスを実装する方法をexplaines。

休息Webアプリケーションを開発する場合、あなたは、単一の機能(例えばTodoController)を処理するために@Controllerクラスを使用することができ、あなたのリポジトリに定義されたクエリを使用するには。あなたが唯一の春マネージクラス(リポジトリに豆をautowireできることを覚えておいてください

public void doSomething() { List<Todo> todoList = todoRepository.findByTitleIs(); }

:その後、

@Autowired private TodoRepository todoRepository;

し、あなたの方法でそれを使用します。コントローラでは、リポジトリをautowireすることができますサービス、コントローラ、コンポーネント、構成ecc)

そうでなければ、 ApplicationContextの、お勧めできません:

個人的に

Why is Spring's ApplicationContext.getBean considered bad?

私は(メインのテストクラスを作成する)のみテストの目的のために、このメソッドを使用します。

次に、リポジトリ・インタフェースに直接問合せを書くことをお勧めします。これは、より簡単です(この方法で、orm.xmlファイルの使用を避けることができます)。例:あなたは上のクエリを入れたいと思うのはなぜ

public List<Todo> findByTitle(String title); 

http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html

+0

こんにちは@amicoderozer、私は注釈(@Query)を使用する方がorm.xmlのメソッドを使用するより簡単ですが、今では(少なくとも2つの方法で作業している)両方をマスターしようとしています。あなたの返信は役に立ちそうですが、あなたが気に入らなければ、ファイルorm.xmlをファイルspring.xml – Rosa

+0

にどのようにマッピングするか教えてください。役に立ったhttp://stackoverflow.com/questions/12252088/unable-to-import-persistence-xml-within-applicationcontext-xml-file – amicoderozer

+1

こんにちは@amicoderozer、ありがとうございました。 – Rosa

関連する問題