【原创】Spring-boot快速入门(二)JPA数据源--转载请注明出处

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/qq_35427785/article/details/77370802

Spring-boot快速入门(二)JPA数据源
声明:本篇博客一切代码基于 Spring-boot快速入门(一)进行。
一、JPA介绍
Spring Data JPA,是一款直接整合了hibernate的数据库资源访问的Spring Data下的子项目,通过JPA对数据库进行访问,可以直接省去很多数据访问方案中的代码量,极大的提高数据库的应用的开发效率。
使用JPA只需要进行使数据源接口继承于JpaRepository接口,然后使用@repository注解即可以使用大量的JPA数据库操作方法。
JPA具有根据已经定义好的Entity数据库试题映射,来自动进行方法实现的功能,但是依然有美中不足的地方。在使用JPA进行复杂SQL处理的时候,JPA则显得苍白无力,需要在代码中写SQL语句,不能实现良好的SQL与代码分离。

二、数据源与JPA配置
1.阿里druid连接池介绍
数据源的使用,我们将会使用druid数据连接池。Druid是一款阿里的关系型数据库连接池,该连接池在监控、稳定性、扩展性和性能方面具有明显的优势。通过监控功能可以实时观察数据库连接池以及Sql的当前情况。
2.druid连接池配置
首先需要在pom.xml中添加支持:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.0.18</version>
</dependency>

这里我所使用的数据库为mysql数据库,因此还需要引入数据库的jdbc驱动:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

然后在application.yml中添加datasource数据源配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver

这时,我们已经配置完成了基本的数据源,但需要注意的是在数据源配置时,我只配置了必须的配置,其他的配置均使用的默认配置,需要时,可以自己进行配置。
在这个数据源中还具有一个监控系统,监控系统配置代码如下,采用的是javaConfig的形式进行配置:

package com.mdoa.bootparent.config;


import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DruidConfig {

    @Bean
    public ServletRegistrationBean statViewServle(){
        //配置访问地址
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
                new StatViewServlet(), "/druid/*");
        //配置IP白名单
        servletRegistrationBean.addInitParameter("allow","192.168.1.218,127.0.0.1");
        //IP黑名单
        servletRegistrationBean.addInitParameter("deny", "192.168.1.200");
        //控制台的登录账户和密码
        servletRegistrationBean.addInitParameter("loginUsername","druid");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能重置数据
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean statFilter(){
        //拦截使用的过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(
                new WebStatFilter());
        //添加的过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        //不进行拦截的请求
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,/druid/*");
        return filterRegistrationBean;
    }
}

在将这些配置配置完成以后,可以通过访问http://localhost:8090/hello/druid/login.html来查看druid的后台监控。输入账号密码后进入界面:
这里写图片描述

3.JPA配置
首先需要在pom.xml中引入JPA的相关jar包:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

然后添加配置到application.yml文件中的spring下:

jpa:
  database: mysql
  show-sql: true
  hibernate:
    ddl-auto: update
    naming: org.hibernate.cfg.ImproveNamingStrategy
  properties:
    hibernate:
      dialect: org.hibernate.dialect.MySQL5Dialect

之后配置一个相应的JPA的javaConfig文件:

package com.mdoa.bootparent.config;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableJpaRepositories(basePackages = "com.zhou")
@EntityScan(basePackages = "com.zhou")
public class JpaConfig {

    @Bean
    PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
        return new PersistenceExceptionTranslationPostProcessor();
    }
}

上面的配置中,Entity注解,标注的是所扫描的Entity类的包,enableJpaRepositpry注解所标注的是所扫描的 repository接口的包。如果在不同的包下,修改这两个注解的值即可。
三、JPA的使用
1.创建entity类
进行对JPA的使用时,首先在现有包结构下,创建一个entity包,然后在该包下创建一个User类,代码如下:

package com.mdoa.bootparent.entity;



import javax.persistence.*;

@Entity
@Table(name="user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    public User(){

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

注解含义
@Entity:标识该类是一个持久层交互类,entity类
@Table:表示与该类所相关的数据库表名称
@Id:Id标识该字段为数据库主键
@GeneratedValue:标识主键的自动生成方式,具有四种不同的生成策略:
Identity:表自动增长字段,Oracle不支持这种方式;
AUTO:JPA自动选择合适的策略,是默认选项;
Sequence:通过序列产生主键,通过@SequenceGenerator注解指定序列名,Mysql不支持这种方式。
TABLE:通过表产生主键,框架借由表模拟产生主键,使用该策略可以使用更易于数据库的移植。
2.创建repository类
在现有的包结构下创建一个repository包,然后再该包下创建一个接口类UserRepository,并继承自接口JpaRepository。

package com.mdoa.bootparent.repository;

import com.mdoa.bootparent.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long>{

}

该接口中的方法将会被自动进行实现,我们只需要进行调用即可。
3.创建测试接口
创建数据库表user,其中有两个字段分别为id和name,id为主键,int类型,然后任意放入一条数据。(Jpa具有自动创建表的功能,但是笔者不知道什么原因并没有自动创建,如果知道的可以在评论处指出。)
在AppController类中添加以下代码:

@Autowired
private UserRepository userRepository;

@ResponseBody
@RequestMapping("getUser")
public String getUser(){
    List<User> users = userRepository.findAll();
    return "用户名:"+users.get(0).getName();
}

最后访问URL:localhost:8090/hello/getUser
进入如下界面:
这里写图片描述
本次博客在此结束,如有问题欢迎在评论区指出,如果读者较为满意,欢迎点赞!

猜你喜欢

转载自blog.csdn.net/qq_35427785/article/details/77370802