Das JPA-Repository ist eine praktische Schnittstelle, die CRUD automatisch in DB implementiert. Sobald die Umgebung festgelegt ist, kann die DB-Zugriffsfunktion mit einer beträchtlich geringen Menge an Code implementiert werden, aber es ist ziemlich schwierig, die Umgebung festzulegen, daher habe ich sie zusammengefasst.
Lesen Sie den folgenden Artikel, bis die JDBC-Vorlage vorerst funktioniert.
SpringDataJPA Access 1 SpringDataJPA Access 2
Erstellen Sie den Repository-Body.
MyPesononalDataDaoRepository.java
package com.tsugaruinfo.repository;
@Repository
public interface MyPesononalDataDaoRepository
extends JpaRepository<Mypersonaldata, Integer> {
}
Es ist nur eine Schnittstelle. Der Inhalt muss nicht implementiert werden.
Registrieren Sie das Repository in der Bean-Konfigurationsdatei.
appllicatio-config.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<!--JPA-Repository-Einstellungen-->
<jpa:repositories base-package="com.tsugaruinfo.repository" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
Zwei Punkte
TX und jpa zum Namespace hinzugefügt
application-config.xml
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
Im Schema
application-config.xml
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"
Bereitstellung von JPA- und Transaktions-Beans. Dies liegt daran, dass JPA beim Erstellen eines Repositorys die Transaktion ohne Berechtigung verwendet.
Dies ist die Haupt-DI-Registrierung Registrieren Sie das jpa-Repository-Paket und eine Bean namens transactionManager.
appliction-config.xml
<!--JPA-Repository-Einstellungen-->
<jpa:repositories base-package="com.tsugaruinfo.repository" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
Bitte ändern Sie "com.tsugaruinfo.repository" in Ihr eigenes Paket, wenn Sie es tatsächlich verwenden. Das Repository ist jetzt im DI-Container registriert.
Dieses Mal ist es in Servlet implementiert. (Nun, wie im Lehrbuch ...)
BeanAutowiredFilterServlet.java
public class BeanAutowiringFilterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
super.init();
SpringBeanAutowiringSupport
.processInjectionBasedOnCurrentContext(this);
}
Dieser Befehl ** SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this); ** ist der Schlüssel zur Verwendung der Annotation @Autowired. In dem Moment, in dem dieser Befehl ausgeführt wird, wird die in DI registrierte Bean in die mit Anmerkungen versehene Variable eingefügt.
Ich denke, dass die zu injizierende Variable ein Feld der Klasse ist, daher kann es sinnvoll sein, sie im Konstruktor auszuführen. Richten Sie dieses Mal eine übergeordnete Klasse ein und führen Sie sie mit der Initialisierungsmethode des Servlets aus.
Mit Spring Boot Es scheint automatisch mit der Annotation @SpringBootApplication ausgeführt zu werden
MyPersonalDataServlet.java
@WebServlet("/person")
public class MyPersonalDataServlet extends BeanAutowiringFilterServlet {
private static final long serialVersionUID = 1L;
@Autowired
MyPesononalDataDaoRepository repository;
In die Felder des Servlets injiziert. JPA- und DI-Container werden ohne neue Material entstehen.
Lassen Sie es uns in einem Servlet ausführen. Holen Sie sich den gesamten Inhalt der DB
MyPersonalDataServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
List<Mypersonaldata> list = repository.findAll();
request.setAttribute("entities", list);
response.getWriter().append("Served at: ").append(request.getContextPath());
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}
index.jsp
<!DOCTYPE html>
<%@ page import="java.util.List" %>
<%@ page import="com.tsugaruinfo.model.Mypersonaldata" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<meta charset="utf-8">
<title>JPA Sample1</title>
</head>
<body>
<h1>Welcome to JPA Sample!</h1>
<form method="post" action="person">
<table>
<tr><td>Name:Input<input type ="text" name="name"></td></tr>
<tr><td>Mail:Input<input type ="text" name="mail"></td></tr>
<tr><td>Age:Input<input type ="text" name="age"></td></tr>
<tr><td><input type ="submit" value="hinzufügen"></td></tr>
</table>
</form>
<c:url value="/showMessage.html" var="messageUrl" />
<a href="${messageUrl}">Click to enter</a>
<ol>
<% for(Object entity : (List)request.getAttribute("entities")){ %>
<li><%=entity %></li>
<% } %>
</ol>
</body>
</html>
Ich konnte bestätigen, dass das Repository ordnungsgemäß funktioniert.
Recommended Posts