1. Introducción
(1) MySQL es un sistema de base de datos relacional, la base de datos más utilizada y extensa para las compañías de Internet en la actualidad. Es una base de datos del lado del servidor que puede soportar altas visitas concurrentes.
(2) Spring-Data-JPA es una implementación de la capa de repositorio proporcionada bajo la especificación JPA. Se puede desarrollar utilizando diferentes marcos de implementación como Hibernate, OpenJPA y otros marcos. Esto puede simplificar el repositorio y resolver su acoplamiento con la capa de negocios.
En este estudio, usamos MySQL + Spring-Data-JPA para construirlo. El método de implementación de JPA usa Hibernate. El grupo de conexión de la base de datos utiliza DBCP para la conexión.
2. Construcción del proyecto
1. Introducir dependencias relacionadas con MySQL y JPA:
< <artifactid> mysql-confonector-java </artifactid> </pepertency> <!-Las dependencias relacionadas con JPA incluyen Spring-Data-JPA, Spring-anMy Hibernate para admitir JPA-> <Spendency> <MoupROUMID> org.springFrameWork.Boot </Groupid> <artifactid> spring-boot starter-data-jPa </artifactid> </pepertency>
Se deben introducir tres dependencias. JDBC es la dependencia requerida al integrar MySQL. El segundo es la dependencia del controlador de la base de datos de MySQL, y el tercero es la dependencia relacionada con el spring-data-jPA:
Incluye dependencias como AOP, JDBC, Spring-Germ, Transaction Transaction-API y Hibernate para apoyarlo. Por lo tanto, JPA es predeterminado para implementarlo usando Hibernate.
2. Configuración del archivo Configuración:
Seleccionamos el archivo de formato .yml para el archivo de configuración y usamos DPCP2 para configurar los parámetros del grupo de conexión:
1) Configuración relacionada con el proyecto:
Servidor: #Configuración Número de puerto Puerto: 8088spring: Aplicación: #Configuration Nombre del nombre del servicio: CMS-Dept
Aquí está la información relevante sobre la configuración de la apertura del servidor, principalmente configurar el nombre y el puerto del servidor
2) Configuración relacionada con MySQL
Spring: #Data Source y JPA Configuración de datos Cource: #Configuración relacionada con la base de datos URL -SSL La conexión se establece en FALSE URL: JDBC: MySQL: // Localhost: 3306/CRM? Caracterioning = UTF8 & USessl = falso #Configuration UserName: *** #Configuration Password: *****
Aquí hay algunas configuraciones relacionadas con la base de datos, que configuran principalmente la URL de la base de datos, la cuenta y la contraseña. La información de configuración después de URL es el formato de codificación de MySQL conectado y si el cifrado SSL está habilitado.
3) Configuración relacionada con DBCP
Primavera: #the siguiente es una configuración DBCP2 para el grupo de conexión relacionada: #inicialice el tamaño del grupo de conexión tamaño inicial: 10 #número mínimo de grupos de conexión mínimo: 10 #configure el número máximo de grupos de conexión máxima: 30 #configure el tiempo de espera para el tiempo de espera del tiempo de espera de la conexión de la conexión de la conexión: 30000 #configurar cuándo el tiempo para detectar el tiempo de espera que se detiene el tiempo de espera para el tiempo de espera. Tiempo entre el tiempo-revicción-Runs-Millis: 200000 #Configure El tiempo mínimo de supervivencia de la conexión en el grupo de conexión elimina el mantenimiento abandonado: 200000
Se configura principalmente como información de grupo de conexión, y los detalles de configuración se muestran en los comentarios anteriores.
4) Spring-Data-JPA se basa en la configuración relacionada con IHibernata
spring: jpa: #Configure database type database: MYSQL #Configure whether to print sql show-sql: true #Hibernate related configuration hibernate: #Configure cascade level ddl-auto: update naming: #Naming strategy: org.hibernate.cfg.ImprovedNamingStrategy properties: hibernate: dialect: org.hibernate.dialect.mysql5dialect
La configuración es el tipo de base de datos de conexión y si debe imprimir la cascada de SQL y Hibernate, hay varios tipos:
1) Validar- Cuando se cargue Hibernate, verifique la creación de la estructura de la tabla de la base de datos.
2) Crear- Recrea cada vez que se carga Hibernate, se recrea la estructura de la tabla de la base de datos, que es la razón de la pérdida de datos de la tabla de la base de datos.
3) Cree-Drop creado cuando Hibernate se carga, y la salida es eliminar la estructura de la tabla.
4) Actualizar la carga de actualización de la carga Hibernate actualiza automáticamente la estructura de la base de datos.
Aquí elegimos actualizaciones en cascada e iterar en la tabla original.
Hay dos tipos de estrategias de nombres:
1), org.springframework.boot.orm.jpa.hibernate.springphysicalnamingstrategy encuentra la letra mayúscula más "_".
2), org.hibernate.cfg.ProvedNamingStrategy sin nombres de modificaciones.
3. Configurar clases relacionadas:
La clase de configuración debe configurarse en un directorio horizontal o subdirectorio con la clase neumática antes de que pueda configurarse con éxito. Aquí usamos la configuración de la clase Java en lugar del método XML para la configuración:
/*** @Function Descripción: Clase para la configuración relacionada con MySQL* @Author Administrator* /// La interfaz de anotación utilizada para la clasificación se utiliza para lidiar con problemas de prioridad de carga. Tiene dos variables de enumeración @order (ordenadas.highest_precedence) // La siguiente línea representa esta clase como la clase de configuración @configuration // La siguiente línea representa esta clase para habilitar la administración de transacciones @enableTransactionManagement (proxyTargetClass = true) // también se puede definir como una clase como deptrepository.class. También puede definir los filtros includefilters = { @componentscan.filter (type = filtreType.annotation, value = servicio.class)} @enablejparePositories (basepackages = "com.hzt. ** {return New PersistenceExceptionTranslationPostPossor (); }} 1) @Order Annotation, utilizada para configurar la prioridad de carga de la clase, tiene dos variables de enumeración:
Ordenado.highest_precedence- integer.min_value - valor mínimo, con la más alta prioridad
Ordenado.lowest_precedence -integer.max_value -maximum valor, con la prioridad más baja
2) Anotación de @Configuration, lo que significa que esta clase es una clase de configuración
3) @EnabletransactionManagement Management para MySQL proxyTargetClass = verdadero medios para habilitar la gestión de transacciones de la clase
4) @EnableJParepositories se usa para configurar las transacciones. Aquí, la ruta está representada por una expresión de CGNL, y también se puede definir como una clase específica, como DeptRepository.Class
Su elemento infantil incluye Filters puede definir interceptoras de transacciones, como includefilters = { @componentscan.filter (type = filtreType.annotation, valor = servicio.class)}
4. Código relacionado con la clase de mapeo ORM Java:
1) Estructura de la tabla de bases de datos
2) Mapeo de clase de entidad
@Entity // representa este tipo de clase de entidad de asignación para una tabla @Table (name = "tbl_dept") // Establecer el nombre de la tabla de la tabla Class pública implementa serializable { /*** Descripción de la función: Unicura durante la serialización, los métodos GET y SET correspondientes se han omitido. */ Private static final Long SerialVersionUid = 1L; /** Clave primaria -id uuid*/@id // Esta nota significa que el campo es la clave principal de la clase @GeneratedValue (generador = "System -Uuid") @GenericGenerator (name = "System -Uuid", estrategia = "Uuid") // Nombre -Especifique el nombre de la columna correspondiente, longitud -Longitud máxima @Column (name = "Id", Longitud = 32)/Name//Nombre de la columna correspondiente; /** Numeral, único*/// NULLABLE - ¿Puede ser nulo, predeterminado a verdadero único? Si es único, predeterminado a false @column (name = "no", nullable = false, unique = true) privado entero no; / ** Nombre del departamento*/ @column (name = "name", unique = true, nullable = false) nombre de cadena privada; / ** Gestión del departamento Clave primaria -id uuid*/ @column (name = "gerente", unique = true, nullable = false) administrador de cadenas privadas; / ** Descripción del departamento*/ @column (nombre = "Descripción") Descripción de cadena privada; / ** Teléfono del departamento*/ @column (name = "Teléfono") Teléfono de cadena privada; / ** Teléfono del departamento*/ @column (name = "Teléfono") Teléfono de cadena privada; / ** Tiempo de creación del departamento*/ @column (name = "CreateTime") @DatetimeFormat (Pattern = "yyyy-mm-dd HH: mm: ss") Fecha privada CreateTime; / ** Tiempo de modificación del departamento*/ @Column (name = "Edittime") @DatetimeFormat (Pattern = "yyyy-mm-dd HH: mm: ss") Fecha privada EditTime;} (1), @Entity representa la estructura de la tabla de este tipo de mapeo como base de datos
(2), @Table (name = "tbl_dept") Esta anotación se utiliza para configurar la relación entre la clase de entidad y el mapeo de la tabla. El nombre representa el nombre de la tabla asignada.
(3) La anotación @ID significa que esta clase es una clave principal
(4), la anotación @GeneratedValue se utiliza para configurar la información relacionada con la clave primaria, y el atributo del generador se utiliza para configurar la estrategia de generación. Existen los siguientes valores de enumeración:
1.Auto: la clave principal está controlada por el programa.
2. Identidad: generada automáticamente por la base de datos.
3. Enerator: especifica el generador utilizado para generar la clave primaria.
4. Secuencia: genere claves primarias basadas en la secuencia de la base de datos subyacente.
5. Tabla: use una tabla de base de datos específica para guardar la clave principal.
6. System-UUID representa el uso del UUID generado por el sistema para la coincidencia.
(5) Anotación de @column para configurar información relacionada con la columna 1. El campo de nombre se utiliza para especificar el campo de mapeo asignado a la estructura de la tabla.
2. La longitud representa la restricción de longitud de este campo y se puede omitir.
3. El atributo único representa si este campo tiene restricciones únicas habilitadas. El valor predeterminado es falso y lo único es verdadero.
4. Nullable significa si este campo puede estar vacío y el valor predeterminado es verdadero. falso significa que no puede estar vacío.
(6) @DateTimeFormat se usa para asignar el tiempo de la tabla de la base de datos.
Se han omitido los métodos GET y SET correspondientes.
3) Implementación de la capa DeptRepository
Como se muestra en la figura, el respository es una especificación de interfaz, con una herencia de subterfaz diferente. Además de heredar todas las funciones de la interfaz principal, cada subterfaz también agregará métodos adicionales para diferentes implementaciones. La clase CrudRepository define el método básico y sus subclases se amplían por separado.
Por ejemplo, además de heredar todos los métodos de CrudRepository, la clase Paging y SortingRepository también lo expande, agregando métodos relevantes para la búsqueda de paginación:
Iterable <t> findall (sort sort); página <t> findall (pagible pagible);
JParepository se expande en base a Paging ySortingRepository.
1. Capa del repositorio:
@Repository representa que esta clase es administrada por Spring, y es una capa DAO
/*** @Function Descripción: Interfaz de capa DAO para la operación de la tabla del departamento* @author administrador*/ @repository // repository Esta es una implementación de la capa DAO, la interfaz pública de la interfaz de depósito extiende jParepository <Dept, string> {}Dependiendo de la clase de implementación, tiene diferentes métodos para llamar. En general, todos pueden conocer el uso de este método conociendo el nombre y el significado. En el tipo genérico, el primer parámetro representa la clase de entidad del mapa de la tabla, y el segundo parámetro representa el tipo de clave principal.
2. Implementación de la capa de servicio:
/*** @Function Descripción: Clase de implementación para operaciones de servicio del departamento* @Author Administrator*/ @ServicePublic Class DePTServiceImpl implementa DePTService {/** Log Processing Class*/Private Final Logger log = loggerFactory.getLogger (getClass ()); @AUTOWIREDIRDED Repository private DeptRepository; @Override Public Dept QueryById (ID de cadena) lanza la excepción {try {dept result = repository.findone (id); log.info (result.toString ()); resultado de retorno; } catch (excepción e) {log.info (e.ToString (), e); tirar una nueva ServiceException ("Se produjo una excepción mientras consultas según ID!"); }}}Donde FindOne es el método implementado por jParepository.
3. Implementación de la capa del controlador:
@RestController@requestMapping ("/API/V1/Dept") Public Class DeptController {/** Logging Class*/private logger log = loggerFactory.getLogger (getClass ()); / ** Mi propio servicio*/ @@AUTOWIREDIREDIRDRED SERVICE DE SERVICE DEL PRIVAD; /*** @Function Descripción: Método para consultar el contenido del departamento basado en ID* @return Dept*/@getMapping ("/id/get") Resultado público GetByid (ID de cadena) lanza la excepción {verify (nueva verifyParam ("ID de departamento", id)); devolver nuevo resultado ("obtenido con éxito a través de ID!", Service.QueryById (ID)); }}Donde RestController representa el controlador que devuelve el formato JSON, @RequestMapping define la URL de su mapa de clase. Los datos que aceptamos aquí son un tipo de cadena normal. Si necesita aceptar el tipo JSON, necesita @RequestBody String ID para configurar los parámetros de solicitud para aceptar.
4. Prueba:
Simule enviar solicitudes para obtener para completar la integración y configuración de Spring-Data-JPA y MySQL.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.