文章目录
一、什么是JPA
JPA是一个持久层的ORM框架。对jdbc 的封装。使用jpa可以实现操作实体对象就能够实现对数据库表的CRUD 。
Orm关系映射:
关系型数据库 | java |
---|---|
数据表 | java当中的实体类 |
记录数 | 对应Java当中的对象 |
Field | 对应java类当中属性 |
Java程序员面向对象的角度操作对象,由于我们的表以及表当中的属性已经和关系型数据库当中表和字段进行了一个一一映射。我们操作了对象就能够操作表当中的记录。
二、SpringBoot整合JPA
2.1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.2、配置数据库连接信息
jpa:
#逆向工程:存在数据库的表,然后数据库表可以生成实体类
#正向工程:先存在实体类,然后根据实体类,生成底层的表
#开发阶段可以设置为true,开启了逆向工程
generate-ddl: true
hibernate:
#create :设置为create,每次运行程序都会将原来的数据表删除,然后重新创建一个表
#create-drop :每次将创建一个数据表,数据表使用完毕之后,将数据表再次删除。
##none将功能不生效
#update 如果你设定的实体类发生了改变,数据表会更新:
#如果数据库当中有数据表,就使用原来的表。没有数据表,就会创建一个数据表。
#validate实体类和数据表进行校验,如果属性或者个数不一致,就会抛出异常。
ddl-auto: update
#操作实体对象的时候,会跟我们生成sql语句
show-sql: true
#指定了数据库的类型:
database-platform: org.hibernate.dialect.MySQL8Dialect
2.3、创建实体和数据表的映射
import javax.persistence.Table;
//Users 实体类,对应底层数据库表。mysqL数据库当中没有Users表,可以使用jpa的提供的正向工程
@Data
@Entity()
public class Users {
@Id //id唯一值
@GeneratedValue(strategy = GenerationType.IDENTITY)//指定了当前主键生层策略
private Integer id;
@Column //标识username就是一个普通的列:注解当中可以指定很多属性,
private String username;
private String password;
}
2.4、CRUD
import com.example.demo07.bean.Users;
import org.springframework.data.jpa.repository.JpaRepository;
//JpaRepository <T, ID> jpa提供的一个接口:接口的当中定义了实体的基本操作;
//T 指定具体操作的实现类:pet实体类
//ID指定主键字段的类型(实体类当中带有id注解的属性)Integer
public interface UsersDao extends JpaRepository<Users,Integer> {
}
2.4.1、添加
@Autowired
public UsersDao dao;
public String add(){
Users user=new Users ();
user.name("123");
user.passworf("666");
dao.save(user);
return "添加成功";
}
2.4.2、删除
void deletepet {
Users user=new Users ();
user.setId(1);
dao.delete(pet);
}
2.4.3、查找
public User find(){
//通过ID查询
optional<Users> optional=dao.findById(1);
Users user=optional.get()
return user;
}
//排序查询
List<Pet> pname = petDao.findAll(Sort.by("name"));
//分页查询
Pageable pageable = PageRequest.of(xxx)
petDao.findAll(pageable);
2.4.3、更改
save方法:
如果没有指定id字段,直接回进行一个insert操作;
如果指定了id字段:
根据指定的id先去查询:
如果查询至到id对应的记录存在的话,进行一个更新操作。
2.4.4、自定义语句
@Transient
@Modifying
@Query(value = "insert into t_comment(content,author,a_id) VALUES(?1,?2,?3)",nativeQuery = true)
int add(Comment comment);