前言
入门 , 单看这一篇连门都入不了… 只用作介绍基本操作和基本概念
(其实是我又懒又笨还没开学 )
JPA是JavaEE规范 , 对持久化操作 进行 标准化
.
举个栗子 : 美国在工业革命时期, 大力推广标准化零件(标准件之父惠特尼) , 其革命性影响在于提高了工业产品的整体质量.
JPA也类似 , 它提供的标准化API大大简化了开发流程
ORM : 打开对象与持久化层的大门 : 写过关于ORM的概念,这里直接传送ORM概念
提示:以下是本篇文章正文内容,下面案例可供参考
一、SpringBoot 整合SpringData JPA
1.创建实体类和数据表进行映射,配置好映射关系
如果出错了,建议重建项目
下面我将以User类作为实体类
代码如下(示例):
@Entity
@Table(name = "tbl_user")
public class User {
@Id //这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
private Integer id;
@Column(name = "last_name",length = 50) //这是和数据表对应的一个列
private String lastName;
@Column //省略默认列名就是属性名
private String email;
getter & setter省略
}
讲几个注意点 :
- 导包问题 : 我们需要导入的是
import javax.persistence.*;
包 - 主键自增 : 这句注解需要你记住
@GeneratedValue(strategy = GenerationType.IDENTITY)
- 主键需要打上
@Id
注解,其余的打@Column
注解 - 必须打上
@Entity
注解,否则容器找不到实体类的位置
2.Dao层
也就是repository包下的接口
代码如下(示例):
public interface UserRepository extends JpaRepository<User,Integer> {
}
上面的接口 , 我们能看到继承了JpaRepository
接口 , 而该接口又是一系列继承关系的最后一层 , 通过查看源码我们能发现 ,
尖括号内的第一个参数是一个泛型 , 也就是我们传入的要映射成数据库表的实体类, 第二个参数ID指的是实体类对象的主键
3.配置基本的JPA
这里的JPA配置不全面 , 只能用作基本使用
spring:
datasource:
url: jdbc:mysql://主机名或localhost/数据库名
username: root
password: 自己设置的密码
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
# 更新或者创建数据表结构(这样我们才能创建数据库表)
ddl-auto: update
# 控制台显示SQL
show-sql: true
这是输出的SQL语句
二、增删改查
还是做简单介绍吧, 毕竟自己也没真的深入了解,只能看视频了解了
1.查
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Integer id){
User user = userRepository.getOne(id);
System.out.println(user.getId());
return user;
}
如果出现No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor
报错 , 则需要的实体类上打上@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})
注解即可解决问题
2.增
@GetMapping("/user")
public Integer insertUser(User user){
User result = userRepository.save(user);
return 1;
}
3.删
@DeleteMapping("/deluser/{id}")
public Integer deleteUser(@PathVariable("id") Integer id){
userRepository.deleteById(id);
return 1;
}
注 : insert操作不应该使用PostMapping
吗 ,为什么这里用了@GetMapping
?
因为实验中没有给出HTML表单, 所以我们只能通过浏览器地址栏传输数据,因此只能使用GetMapping