Spring Cloud与微服务构建(四)开发框架Spring Boot 4.5 Spring Boot整合JPA

JPA全称为JAVA Persistence API,它是一个数据持久化的类和方法的集合。JPA的目标是制定一个很多数据库供应商实现的API,开发人员可以通过编码实现该API。目前,在Java项目开发中提到JPA一般是指用Hibernate的实现,因为在Java的ORM框架中,只有Hibernate实现得最好。本节以案例的形式来讲述如何在Spring Boot工程中使用JPA。另外,案例使用的数据库为MySQL数据库,需要自行安装。

(1)新建一个Spring Boot项目

在Spring Boot工程的pom文件依次引入Web功能的起步依赖spring-boot-starter-web、JPA的起步依赖spring-boot-starter-data-jpa、MySQL数据库的连接器的依赖mysql-connector-java,其代码如下:

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
(2)配置数据源

在工程的配置文件application.yml文件中加上相应的配置,需要配置两个选项:DataSource数据源的配置和JPA的配置。其中,数据源的配置包括连接MySQL的驱动类(例如com.mysql.jdbc.Driver)、MySQL数据库的地址Url、MySQL数据库的用户名username和密码password。JPA的配置包括hibernate.ddl-auto配置,配置为create时,程序启动时会在MySQL数据库中建表;配置为update时,在程序启动时不会在MySQL数据库中建表;jpa.show-sql配置为在通过JPA操作数据库时是否显示操作的SQL语句。配置代码如下:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring-cloud?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: create    #第一次建表create   后面用update
    show-sql: true
(3)创建实体对象

通过@Entity注解表明该类是一个实体类,它和数据库的表名相对应;@Id注解表明该变量对应于数据库中的Id,@GeneratedValue注解配置Id字段为自增长;@Column表明该变量对应于数据库表中的字段,unique=true表明该变量对应于数据库表中的字段为唯一约束。代码如下:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable = false,unique = true)
    private String username;
    
    @Column
    private String password;


    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
(4)创建DAO层

数据访问层DAO,通过编写一个UserDao类,该类继承JpaRepository的接口,继承之后就能对数据库进行读写操作,包含了基本的单表查询的方法,非常方便。在UserDao类写一个findByUsername的方法,传入参数username,JPA已经实现了根据某个字段去查找的方法,所以该方法可以根据username字段从数据库中获取User的数据,不需要做额外的编码。代码如下:

public interface UserDao extends JpaRepository<User,Long> {
    User findByUsername(String username);
}
(5)创建Service层

在UserService类中注入UserDao,并写一个根据用户名获取用户的方法,代码如下:

@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    public User findUserByName(String username){
        return userDao.findByUsername(username);
    }
}
(6)创建Controller层

在UserController类写一个Get类型的API接口,其中需要说明的是@Path Variable注解,可以获取RESTful风格的Url路径上的参数。

@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    UserService userService;
    @GetMapping("/{username}")
    public User getUser(@PathVariable("username")String username){
        return userService.findUserByName(username);
    }
}

启动运行程序,控制台输出的日志如下:

Hibernate: drop table if exists user
Hibernate: create table user (id bigint not null auto_increment, password varchar(255), username varchar(255) not null, primary key (id))
Hibernate: alter table user add constraint UK_sb8bbouer5wak8vyiiy4pf2bx unique (username)

可见,JPA在启动程序时在数据中创建了user表。在navcat中查看确实发现user表被创建了。这时在数据库中插入一条数据:

INSERT into `user`(username,password)values('rock','123456');

再打开浏览器,在浏览器中输入"localhost:8080/user/rock”,可以从数据库中读取username字段为rock的用户对象,浏览器显示如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值