1. Introdução
(1) O MySQL é um sistema de banco de dados relacional, o banco de dados mais comumente usado e extenso para empresas de Internet hoje. É um banco de dados do lado do servidor que pode suportar altas visitas simultâneas.
(2) Spring-Data-JPA é uma implementação da camada de repositório fornecida sob a especificação JPA. Ele pode ser desenvolvido usando diferentes estruturas de implementação, como Hibernate, OpenJPA e outras estruturas. Isso pode simplificar o repositório e resolver seu acoplamento com a camada de negócios.
Neste estudo, usamos o MySQL + Spring-Data-JPA para construí-lo. O método de implementação JPA usa o Hibernate. O pool de conexão do banco de dados usa o DBCP para conexão.
2. Construção de projetos
1. Apresente dependências relacionadas ao MySQL e JPA:
<!-dependências relacionadas à primavera relacionadas a Spring-JDBC-> <Ependency> <Puperid> org.springframework </frugiD> <stifactId> spring-jdbc </artifactId> </dependency> <!-dependências relacionadas para conectar-se a mysql-> <pendência> <purbrougid> mysql </grupoid> </ArtifactId> mysql-conector-java </storkactid> </dependency> <!-As dependências relacionadas a JPA incluem Spring-Data-JPa, Spring-Aorm e Hibernate para apoiar JPA-> <pendência> <Groupid> org.springframework.boot </Groupid> <TarifactId> Spring-Boot-Starter-Data-JPA </sutifactId> </Dependency>
Três dependências precisam ser introduzidas. JDBC é a dependência exigida pela mola integrando MySQL. O segundo é a dependência do driver do banco de dados do MySQL, e a terceira é a dependência relacionada à mola-Data-JPA:
Inclui dependências como AOP, JDBC, Spring-ATM, Transaction Transaction-API e Hibernate para apoiá-lo. Portanto, o JPA é padronizado para implementá -lo usando o Hibernate.
2. Configuração do arquivo de configuração:
Selecionamos o arquivo de formato .yML para o arquivo de configuração e usamos o DPCP2 para configurar os parâmetros do pool de conexão:
1) Configuração relacionada ao projeto:
Servidor: #Configuration Porta Número Porta: 8088Spring: Aplicativo: #Configuration Nome do nome: CMS-Dept
Aqui estão as informações relevantes sobre a configuração da abertura do servidor, configurando principalmente o nome e a porta do servidor
2) Configuração relacionada ao MySQL
Spring: #Data Fonte e JPA Configuração DataSource: #A conexão URL de configuração relacionada ao banco de dados é definida como False URL: JDBC: MySQL: // LocalHost: 3306/CRM? CaracterenCoding = UTF8 & USESSL = False #Configuration: *** #COMENCINTURAÇÃO = UTF8 & USESSL = False #Configuration: *** #CONCIONGURNO = UTF8 & Usessl = Falsenfiguration: ***Figning
Aqui estão algumas configurações relacionadas ao banco de dados, configurando principalmente o URL, conta e senha do banco de dados. As informações de configuração após a URL são o formato de codificação do MySQL conectado e se a criptografia SSL está ativada.
3) Configuração relacionada ao DBCP
mola: #O seguinte é um DBCP2 de configuração para o pool de conexão Relacionado: #initialize o tamanho do pool de conexão tamanho inicial: 10 #Sitting Número mínimo de pools de conexão Min-Idle: 10 #configure o número máximo de pool de conexão MAX-IDLE: 30 #configure O tempo de tempo limite para o tempo limite a conexão com o tempo para o tempo-mIlis: 3000000 #fl #conf #conf, como o tempo limite a conexão com o tempo que não se pode Time-Between-Extiction-Runs-Millis: 200000 #Configure o tempo mínimo de sobrevivência de conexão no pool de conexão Removeu-em-manutenção: 200000
Ele é configurado principalmente como algumas informações do pool de conexão e os detalhes da configuração são mostrados nos comentários acima.
4) Spring-Data-JPA é baseado na configuração relacionada a Ihibernata
Spring: JPA: #Configure Database Type Database: MySQL #Configure Se imprimir o SQL SHOW-SQL: TRUE #HIBERNATE RELACIONADO HIBERNATE: #CONFIGURE Nível de cascata DDL: Atualização de nomeação: #naming Strategy: org.Ibric. org.hibernate.dialect.mysql5Dialect
A configuração é o tipo de banco de dados de conexão e se deve imprimir a cascata de SQL e Hibernate, existem vários tipos:
1) Validar- Quando o hibernato for carregado, verifique a criação da estrutura da tabela de banco de dados.
2) Criar- recriar sempre que o hibernato é carregado, a estrutura da tabela de banco de dados é recriada, que é o motivo da perda de dados da tabela de banco de dados.
3) Create-Drop criado quando o hibernato é carregado e a saída é excluir a estrutura da tabela.
4) Update-Cascade Update Load Hibernate Atualiza automaticamente a estrutura do banco de dados.
Aqui escolhemos atualizações em cascata e iteramos na tabela original.
Existem dois tipos de estratégias de nomeação:
1), org.springframework.boot.orm.jpa.hibernate.springphysicalnamingstrategy Encontra a letra maiúscula mais "_".
2), org.hibernate.cfg.improvednamingstrategy nenhuma nomeação de modificação.
3. Configure as classes relacionadas:
A classe de configuração precisa ser configurada em um diretório horizontal ou subdiretório com a classe pneumática antes que possa ser configurada com sucesso. Aqui usamos a configuração da classe Java em vez do método XML para configuração:
/*** @function Descrição: classe para configuração relacionada ao MySQL* @Author Administrator* /// A interface de anotação usada para classificação é usada para lidar com problemas de prioridade de carga. Possui duas variáveis de enumeração @Order (ordenadas.highest_precedence) // A linha a seguir representa essa classe como a classe de configuração @configuration // a linha a seguir representa essa classe para ativar o gerenciamento de transações @enableTransactionManagement (proxyTargetSls =) // também pode ser definido como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como Classen, como a Classent (ProxyTargetSl =) // também pode ser definida como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como uma Classe como Classen, como deprep. Ele também pode definir filtros incluemfilters = { @componentscan.filter (type = filtertype.annotation, value = service.class)} @enablejparepositionies (bashEpackages = "com.hzt. **. PersistenceExceptionTranslationPostProcessor () {return New PersistenceExceptionTranslationPostProcessor (); }} 1) Anotação @Order, usada para configurar a prioridade de carregamento da classe, possui duas variáveis de enumeração:
Ordened.highest_precedence- Integer.min_value - valor mínimo, com a maior prioridade
Ordened.lowest_precedence -integer.max_value -Maximum Value, com a menor prioridade
2) Anotação @Configuration, o que significa que esta classe é uma classe de configuração
3) @enableTransactionManagement Transaction Management para MySQL proxyTargetClass = true significa para permitir o gerenciamento de transações da classe
4) @enablejparepositories é usado para configurar transações. Aqui, o caminho é representado por uma expressão de CGNL e também pode ser definido como uma classe específica, como deptrepository.class
Seu elemento filho inclui filtros pode definir interceptores de transação, como incluir filters = { @componentscan.filter (type = filtertype.annotation, value = service.class)}
4. Orm Mapping Java Class Related Code:
1) Estrutura da tabela de banco de dados
2) Mapeamento de classe de entidade
@Entity // Representa esse tipo de classe de entidade de mapeamento para uma tabela @Table (name = "tbl_dept") // Defina o nome da tabela correspondente da classe pública Departamento implementa serializável { /*** Função Descrição: exclusividade durante a serialização, os métodos de GEG e SET correspondentes foram omitidos. */ private estático final serialversionuid = 1L; /** Chave primária -id uuid*/@id // Esta nota significa que o campo é a chave primária da classe @GeneratedValue (generator = "System -uuid") @GenericGenerator (Nome = "System -uuid", Strategtion = "Uuid") // Nome -especifique o nome da coluna correspondente, comprimento -máximo/máximo = "cumn @cnumn) // nome da coluna "4 de comprimento", maxium2), "),"), 4), 4), o nome "), comprimento"). /** numeral, exclusivo*/// Nullable - pode ser nulo, padrão para True único - seja exclusivo, padrão para false @column (name = "não", anulável = false, exclusivo = true) Inteiro privado não; / ** Nome do departamento*/ @column (name = "name", exclusivo = true, nullable = false) nome da string privada; / ** Chave primária de gerenciamento de departamento -id uuid*/ @column (name = "gerente", exclusivo = true, nullable = false) privado string gerenciador; / ** Descrição do departamento*/ @column (name = "Descrição") String privada Descrição; / ** Telefone do departamento*/ @column (name = "telefone") String private String Phone; / ** Telefone do departamento*/ @column (name = "telefone") String private String Phone; / ** Tempo de criação do departamento*/ @column (name = "createTime") @datetimeformat (padrony = "yyyy-mm-dd hh: mm: ss") data privada createTime; / ** Tempo de modificação do departamento*/ @column (name = "edittime") @datetimeFormat (padronizo = "yyyy-mm-dd hh: mm: ss") data privada Edittime;} (1), @Entity representa a estrutura da tabela desse tipo de mapeamento como um banco de dados
(2), @Table (name = "tbl_dept") Esta anotação é usada para configurar a relação entre a classe de entidade e o mapeamento da tabela. O nome representa o nome da tabela mapeada.
(3) A anotação @id significa que esta classe é uma chave primária
(4), a anotação @GeneratedValue é usada para configurar as informações relacionadas à chave primária, e o atributo gerador é usado para configurar a estratégia de geração. Existem os seguintes valores de enumeração:
1.Auto - A chave primária é controlada pelo programa.
2. Identidade - gerado automaticamente pelo banco de dados.
3. Enerador - Especifica o gerador usado para gerar a chave primária.
4. Sequência - Gere teclas primárias com base na sequência do banco de dados subjacente.
5. Tabela - Use uma tabela de banco de dados específica para salvar a chave primária.
6. O System-Uuid representa o uso do UUID gerado pelo sistema para correspondência.
(5) Anotação @Column para configurar informações relacionadas à coluna 1. O campo Nome é usado para especificar o campo de mapeamento mapeado para a estrutura da tabela.
2. O comprimento representa a restrição de comprimento desse campo e pode ser omitido.
3. O atributo exclusivo representa se esse campo possui restrições exclusivas ativadas. O padrão é falso e o único é verdadeiro.
4. Nullável significa se esse campo pode estar vazio e o padrão é verdadeiro. Falso significa que não pode estar vazio.
(6) @DateTimeFormat é usado para mapear o horário da tabela do banco de dados.
Os métodos GET e Set correspondentes foram omitidos.
3) Implementação da camada de descrição
Como mostrado na figura, o Respository é uma especificação de interface, com diferente herança da sub-interface. Além de herdar todas as funções da interface pai, cada sub-interface também adicionará métodos adicionais para diferentes implementações. A classe Crudrepositório define o método básico e suas subclasses são expandidas separadamente.
Por exemplo, além de herdar todos os métodos de crudrepositório, a classe PagingAndSortingRepository também o expande, adicionando métodos relevantes para pesquisa de paginação:
Iterable <T> findAll (classificação de classificação); página <t> findAll (pagável pagável);
O JPoPository é expandido com base no pagingandsortingRepository.
1. Camada do repositório:
@Repository representa que esta classe é gerenciada pela primavera e é uma camada dao
/*** @function Descrição: Interface da camada DAO para operação da tabela de departamento* @author Administrator*/ @repositório // repositório Este é uma implementação da camada DAO Deption de interface pública, estende jparepository <Dept, string> {}Dependendo da classe de implementação, ela possui métodos diferentes para ligar. Geralmente, todos podem conhecer o uso desse método sabendo o nome e o significado. No tipo genérico, o primeiro parâmetro representa a classe de entidade do mapa da tabela e o segundo parâmetro representa o tipo de chave primária.
2. Implementação da camada de serviço:
/*** @function Descrição: Classe de implementação para operações de serviço de departamento* @Author Administrator*/ @ServicePublic Class DeptServiceImpl implementa DeptService {/** Classe de processamento de log*/logger final privado Log = LoggerFactory.getLogger (getClass ()); @AUTOWIRED PRIVADO PRIVADO PRIVADO PARA REPOSITION; @Override Public Dept QuerybyId (string ID) lança exceção {try {dept resultado = repository.findone (id); log.info (resultado.toString ()); resultado de retorno; } catch (Exceção e) {log.info (e.toString (), e); lançar nova serviço ("a exceção ocorreu ao consultar de acordo com o ID!"); }}}Onde findOne é o método implementado pelo jparepository.
3. Implementação da camada do controlador:
@RestController@requestmapp ("/api/v1/dept") public classe DeptController {/** classe de log*/logger privado log = loggerFactory.getLogger (getClass ()); / ** meu próprio serviço*/ @AUTOWIRED PRIVIDO PRIVIDO DE DEPTROSTIVE; /*** @function Descrição: Método para conteúdo do departamento de consulta com base no ID* @return Dept*/@getMapping ("/id/get") resultado público getById (string id) lança exceção {verifique (new verifyparam ("departamento id", id)); Retornar novo resultado ("obtido com sucesso através do ID!", Service.QueryById (ID)); }}Onde o RestController representa o controlador que retorna o formato JSON, @RequestMapping define o URL de seu mapa de classe. Os dados que aceitamos aqui são um tipo de string normal. Se você precisar aceitar o tipo JSON, precisará do @RequestBody String ID para configurar os parâmetros de solicitação para aceitar.
4. Teste:
Simule o envio de solicitações GET para concluir a integração e configuração do Spring-Data-JPA e MySQL.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.