spring boot jpa学习:1.Model类的注释annatation
spring boot jpa学习:2.DAO和Service的自增id、删、查、改操作
spring boot jpa学习:3.Controller层的入门
一、成品
Model类对应数据库中的表
package com.sand.alphon.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import jdk.nashorn.internal.objects.annotations.Getter;
import javax.persistence.*;
@Entity
public class User {
@Id
@Column(name = "userid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userId;
private String password;
private String name;
private int sex;
private int age;
private String email;
@Column(name = "phonenum")
private String phoneNum;
private String type;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
二、规则
1.@Entity和@Table()
意思:都用来指定表名
- @Entity表示这是一个实体类,意思是指定对应数据库中的表。
- @Table指定对应的数据库的表名,优先级比@Entity更高
规则:
-
@Entity必须有,@Table看情况可以没有
因为@Entity默认指定class的名字,即按照class名生成一个对应的表名。 -
@Entity(name = "xxx")
和@Table(name = "xxx")
:将name
按SnakeCaseStrategy(命名策略)生成表名,将你指定的名字name
转化为SnakeCase样式,就是表名。
(1)蛇形命名法(SnakeCase)即用下划线将小写单词连接起来,例如:file_name
、line_number
。
(2)驼峰命名法(camel case)即第一个单词首字母小写,后面单词首字母大写,例如:fileName
、lineNumber
。
(3)所以,比如Book
/book
→book
,MyBook
/myBook
→my_book
。 -
数据库Mysql中是大小写不敏感的,
myBook
认为是mybook
。 -
问题就是你指定的名字是
my_book
,但你数据库中的表是mybook
,这样就链接不上了。
使用:
- 使用一个就行了,比如
@Entity
- 建议Model类名直接就是表名,如果包含大写字母的话,
@Entity(name = "全小写表名")
2.@Id和@GeneratedValue
意思:
@Id
表示主键,必须有@GeneratedValue
:用主键自增的时候就用这个,如果不是自增就可以不用这个了,@GeneratedValue(strategy = GenerationType.IDENTITY)
使用:
spring boot jpa学习:自增id、删、查、改操作
3.@Column
使用:
- 让类中名字和表中列名一致。
- 也是SnakeCaseStrategy命名策略
- 应该让含有大写的列名的@Colume(name = “全小写”)
分析:JPA:java.sql.SQLSyntaxErrorException: Unknown column ‘book0_.book_id’ in ‘field list’
三、配置application.yml
# 后端端口
server:
port: 8443
# spring配置
spring:
# 数据库
datasource:
url: jdbc:mysql://localhost:3306/lib?useSSL=false&serverTimezone=UTC&&allowPublicKeyRetrieval=true #url
username: root
password: 1234
# 注意是cj
driver-class-name: com.mysql.cj.jdbc.Driver
# jpa自动数据库
jpa:
hibernate:
ddl-auto: none
# 可不写,在控制台显示sql语句好调试
show-sql: true
重点是sprint的配置:
- 说明数据库:要不然去哪取数据
①注意library
要改成你自己的数据库名。
②后面那个useSSL…之类的,一定要有,不然还是链接不上。
③用户名和密码要改你自己的
④注意是cj
- 说明使用jpa规则:这不是默认的,要指明使用jps规则,因为还有mybatis-plus规则