mysql binary jpa 主键_SpringBoot(二)——使用Mysql和JPA

本文介绍了如何在SpringBoot应用中配置数据源和JPA,通过application.yml配置MySQL连接参数,演示了如何创建Player、Team和Position实体与数据库表的映射,并展示了如何使用JpaRepository进行CRUD操作的实战教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一篇博客写了如何搭建一个简单的SpringBoot程序,搭建好了之后,就已经有了一个简单的WEB程序。不过这是一个没有数据源的程序,就相当与一本没有内容的书,这里就通过一个简单的Mysql数据库和JPA来完成一些基本的CIUD操作。

添加需要的依赖项

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

runtime

配置SpringBoot的数据源和JPA

通过SpringBoot的核心配置文件,放置在resources根目录下的application.yml 或application.properties来进行配置。相对来说,application.yml 的树状结构看起来层次感更清楚,所以这里用application.yml 来配置,配置如下。

spring:

datasource:

url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8

username: root

password: "********"

jpa:

database: MYSQL

show-sql: true

#Hibernate ddl auto

hibernate:

ddl-auto: update

naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy

properties:

hibernate:

dialect: org.hibernate.dialect.MySQL5Dialect

datasource定义了数据源的连接url、用户和密码。

jpa中定义了有关JPA的配置。ddl-auto设置为update,是使用Hibernate来自动更新表结构,表不存在则自动建表;或在修改表结构后,程序启动时执行表结构的同步更新。dialect配置Hibernate的数据库方言,这里用默认的MySQL5Dialect,也可以根据需要,继承MySQL5Dialect做一些修改。

实体类

首先创建一些实体类,来与数据库中的表建立映射关系,假设一个NBA中,有球员、球队和所处位置三个实体,并且一个球员可以承担多种位置,则有如下实体类。

/**

* 球员实体类

*/

@Entity

@Table(name = "player")

public class Player implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

private Date createdate;

@ManyToOne

@JoinColumn(name = "did")

@JsonBackReference

private Team team;

@ManyToMany(cascade = {}, fetch = FetchType.EAGER)

@JoinTable(name = "player_position",

joinColumns = {@JoinColumn(name = "player_id")},

inverseJoinColumns = {@JoinColumn(name = "position_id")})

private List positions;

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;

}

public Date getCreatedate() {

return createdate;

}

public void setCreatedate(Date createdate) {

this.createdate = createdate;

}

public Team getTeam() {

return team;

}

public void setTeam(Team team) {

this.team = team;

}

public List getPositions() {

return positions;

}

public void setPosition(List positions) {

this.positions = positions;

}

}

/**

* 球队实体类

*/

@Entity

@Table(name = "team")

public class Team implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

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

@Table(name = "position")

public class Position implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String name;

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;

}

}

使用JPA持久化实体

定义一个接口并且继承于JPA资源库的JpaRepository接口,同时通过@Repository注解将这个接口也定义为资源库,使其可以被其他程序引用并且提供数据库的存取功能。球员实体的Repository接口如下,另外两个同理。

@Repository

public interface PlayerRepository extends JpaRepository {

}

这样,一个大致的配置数据源和JPA来连接数据库就完成了,接下来就可以编写测试用例来验证一下以上配置的正确性。

JPA测试用例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值