SpringBoot整合JPA
1、简介
JPA:Java Persistence API的简称,中文名Java持久层API,是关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Spring Data Jpa:JPA规范的再次封装抽象,底层还是使用的Hibernate的JPA技术实现。通过Spring Data JPA的封装,我们在进行基础的CRUD操作的时候可以不用再去写方法,只需要实现它提供的接口就可以进行操作了
2、实现步骤
2.1、引入jpa相关依赖
2.2、配置application.properties或yml文件jpa相关部分
2.3、配置实体类
2.4、添加持久层,创建实体类对应的repository接口
2.5、测试
2.1、引入jpa相关依赖
<!--数据库驱动依赖-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!--Starter for using Spring Data JPA with Hibernate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.2、配置application.properties
#数据库的地址以及端口号
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
#账号/密码
spring.datasource.username=postgres
spring.datasource.password=postgres
#配置数据库驱动
spring.datasource.driverClassName=org.postgresql.Driver
#声明SQL语句的方言,指定连接的语言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
#配置自动建表:updata:没有表新建,有表更新操作,控制台显示建表语句
spring.jpa.properties.hibernate.hbm2ddl.auto=none
#定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。
spring.jpa.show-sql=true
# 将SQL脚本进行格式化后再输出
spring.jpa.format-sql= false
#数据库驱动配置完毕,启动时出现org.postgresql.jdbc.PgConnection.createClob()方法尚未被实作的问题,
#虽然不影响使用,但是每次启动都会报这个错,在配置文件中配置以下代码即可忽略这个报错
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
注:
配置自动建表:update:没有表新建,有表更新操作,控制台显示建表语句
当spring.jpa.properties.hibernate.hbm2ddl.auto=update时,程序启动时,控制台输出ddl语句
Hibernate: alter table t_user add column password varchar(255)
2.3、配置实体类
存放业务逻辑需要的实体对象属性或方法
@Data
@Table(name="t_user")//当实体类与其映射的数据库表名不同名时需要使用
@Entity//表明该类 (UserEntity)为一个实体类
public class UserEntity {
@Id//标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。
@Column(name="id")//列名需要与实体类中列名对应,如不对应需使用@Column注解配置
private String id;
@Column(name="name")
private String name;
@Column(name="sex")
private String sex;
@Column(name="age")
private String age;
@Column(name="password")
private String password;
}
2.4、添加持久层,创建repository接口
@Repository//spring的注解,主动标识当前类要交给spring容器管理
public interface UserRepository extends JpaRepository<UserEntity,String> {
int countById(String id);
}
2.4.1、@Repository注解:
Repository注解详情
@Repository注解修饰哪个类,则表明这个类具有对对象进行CRUD的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan 通过路径扫描给找到。
2.4.2、JpaRepository
JpaRepository是实现Spring Data JPA技术访问数据库的关键接口。
JpaRepository<T, ID extends Serializable>
这个接口提供了JPA的相关功能
List findAll();//查找所有实体
List findAll(Sort sort);//排序 查找所有实体
List save(Iterable<? extends T> entities);//保存集合
void flush();//执行缓存与数据库同步
T saveAndFlush(T entity);//强制执行持久化
void deleteInBatch(Iterable entities);//删除一个实体集合
2.5、测试
2.5.1、controller调用服务类所提供的方法
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/getUserId",method = RequestMethod.GET)
public Response getCountUserId(@RequestParam String user){
String a="test";
if(user!=null&&!"".equals(user)){
a=userService.getUserIdCount(user);
}
return new Response(true,a,1);
}
}
2.5.2、Service也就是提供服务的类
public interface UserService {
String getUserIdCount(String id);
}
2.5.3、Service接口对应的实现类
@Service
public class UserImpl implements UserService {
@Autowired
private UserRepository userRepo;
@Override
public String getUserIdCount(String id) {
String a= String.valueOf(userRepo.countById(id));
return a;
}
}
2.5.4、调用该接口,成功返回,至此,一个接口的开发就完成了