Le référentiel JPA est une interface pratique qui implémente automatiquement CRUD dans DB. Une fois l'environnement défini, la fonction d'accès à la base de données peut être implémentée avec une quantité de code considérablement réduite, mais il est assez difficile de définir l'environnement, je l'ai donc résumé.
Reportez-vous à l'article ci-dessous jusqu'à ce que le modèle JDBC fonctionne pour le moment.
SpringDataJPA Access 1 SpringDataJPA Access 2
Créez le corps du référentiel.
MyPesononalDataDaoRepository.java
package com.tsugaruinfo.repository;
@Repository
public interface MyPesononalDataDaoRepository
extends JpaRepository<Mypersonaldata, Integer> {
}
C'est juste une interface. Il n'est pas nécessaire de mettre en œuvre le contenu.
Enregistrez le référentiel dans le fichier de configuration du bean.
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">
<!--Paramètres du référentiel JPA-->
<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>
Deux points
Ajout de tx et jpa à l'espace de noms
application-config.xml
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
Dans le schéma
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"
Pour rendre disponibles les beans JPA et Transaction. En effet, JPA utilise Transaction sans autorisation lors de la création d'un référentiel.
Ceci est l'enregistrement DI principal Enregistrez le package de référentiel jpa et un bean appelé transactionManager.
appliction-config.xml
<!--Paramètres du référentiel JPA-->
<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>
Veuillez remplacer "com.tsugaruinfo.repository" par votre propre paquet lorsque vous l'utilisez réellement. Le référentiel est maintenant enregistré dans le conteneur DI.
Cette fois, il est implémenté dans Servlet. (Eh bien, comme dans le manuel ...)
BeanAutowiredFilterServlet.java
public class BeanAutowiringFilterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
super.init();
SpringBeanAutowiringSupport
.processInjectionBasedOnCurrentContext(this);
}
Cette commande ** SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this); ** est la clé pour utiliser l'annotation @Autowired. Au moment où cette commande est exécutée, le Bean enregistré dans DI est injecté dans la variable annotée.
Je pense que la variable à injecter est un champ de la classe, donc il peut être bon de l'exécuter dans le constructeur. Cette fois, configurez une classe parente et exécutez-la avec la méthode d'initialisation du servlet.
Avec Spring Boot Il semble s'exécuter automatiquement avec l'annotation @SpringBootApplication
MyPersonalDataServlet.java
@WebServlet("/person")
public class MyPersonalDataServlet extends BeanAutowiringFilterServlet {
private static final long serialVersionUID = 1L;
@Autowired
MyPesononalDataDaoRepository repository;
Injecté dans les champs du servlet. Les conteneurs JPA et DI se matérialiseront sans nouveau.
Exécutons-le dans un servlet. Obtenez tout le contenu de 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="ajouter à"></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>
J'ai pu confirmer que le référentiel fonctionne correctement.
Recommended Posts