SpringBoot + JPA的自学之路(一)基本配置

由于现在的项目要使用JPA,所以也需要学习一下JPA的使用,之前一直使用的是Mybatis,不得不说JPA要上手确实比Mybatis要复杂一些,难一些,Mybatis和JPA的比较我这里就不多说了,关于这个网上有很多总结的非常好的文章,大家有兴趣可以去看一看,这里就主要分享一下在SpringBoot下使用JPA。

1、环境搭建

这里主要需要引入JPA和MySQL的依赖

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

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

引入依赖之后修改application.yml配置文件,这里只是最基本的配置,更多的配置可以自行了解

spring:
  # 数据库配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/java?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
  # jpa配置
  jpa:
    # 数据库类型
    database: MySQL
    # 是否打印sql
    show-sql: true
  hibernate:
    ddl-auto: update

 

2、数据库结构

数据库主要是有两张表,用户表(t_user)和部门表(t_dept),部门和用户是一对多的关系(通过dept_id关联)


-- 部门表
CREATE TABLE `t_dept` (
  `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id',
  `name` varchar(100) NOT NULL COMMENT '部门名称',
  `created_ts` datetime NOT NULL COMMENT '创建时间',
  `last_modified_ts` datetime DEFAULT NULL COMMENT '最近修改时间',
  `creator` bigint(20) NOT NULL COMMENT '创建人id',
  `editor` bigint(20) DEFAULT NULL COMMENT '最近修改人id',
  PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;

-- 用户表
CREATE TABLE `t_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `name` varchar(100) NOT NULL COMMENT '用户姓名',
  `gender` int(3) NOT NULL COMMENT '用户性别 1:男,2:女',
  `phone` varchar(50) NOT NULL COMMENT '用户电话',
  `note` text COMMENT '备注',
  `created_ts` datetime NOT NULL COMMENT '创建时间',
  `last_modified_ts` datetime DEFAULT NULL COMMENT '最近修改时间',
  `creator` bigint(20) NOT NULL COMMENT '创建人id',
  `editor` bigint(20) DEFAULT NULL COMMENT '最近修改人id',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门id',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4;

3、目录结构

项目结构如下

这里就不每个文件都说一遍了,需要的时候在说,这里主要说一下BaseModel和BaseRepo

BaseModel.java

package priv.cwr.model;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.util.Date;

/**
 * 公共Model,将每个表都有的公共字段抽取出来
 *
 * @MappedSuperclass注解表示不是一个完整的实体类,将不会映射到数据库表,但是它的属性都将映射到其子类的数据库字段中
 */
@MappedSuperclass
@Data
public class BaseModel implements Serializable {
    /**
     * 创建时间
     */
    @Column(name = "created_ts")
    private Date createdTs = new Date();

    /**
     * 创建人id
     */
    private Long creator;

    /**
     * 最近修改时间
     */
    @Column(name = "last_modified_ts")
    private Date lastModifiedTs = new Date();

    /**
     * 最近修改人id
     */
    private Long editor;
}

BaseModel是每个表都有的公共字段组成的类,加上@MappedSuperclass注解则不会映射到数据库中,它是所有实体类的父类。

BaseRepo.java

package priv.cwr.repository;

import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import priv.cwr.model.BaseModel;

/**
 * 公共Repository
 * @NoRepositoryBean注解表示Spring Data Jpa在启动时就不会去实例化这个接口
 */
@NoRepositoryBean
public interface BaseRepo<T extends BaseModel> extends PagingAndSortingRepository<T, Long>, JpaSpecificationExecutor<T> {

}

BaseRepo是一个公用的Repository,加上@NoRepositoryBean注解表示Spring Data Jpa在启动时就不会去实例化这个接口,BaseRepo继承了JPA的两个接口,我们自己的Repository只需要继承BaseRepo即可,不用每一个都去继承JPA的接口。

基本的配置就完成了,下一节会分享JPA的简单使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值