SpringBoot数据访问jpa

Spring Boot 结合 JPA(Java Persistence API)提供了一种非常强大且灵活的数据访问方式,使得开发者能够更专注于业务逻辑的实现,而不是底层的数据库操作。以下是对Spring Boot数据访问JPA的总结:

1. 依赖引入

在Spring Boot项目中,要使用JPA,首先需要在pom.xml(Maven项目)或build.gradle(Gradle项目)中引入JPA的依赖,通常还会包括数据库驱动和Spring Data JPA的starter依赖。例如,对于Maven项目,可以添加如下依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-jpa</artifactId>  
</dependency>  
<dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
    <scope>runtime</scope>  
</dependency>

2. 配置数据源

application.propertiesapplication.yml配置文件中,配置数据库连接信息、JPA相关属性(如DDL生成策略、显示SQL等)。

spring.application.name=T369-Spring-Boot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

#??JPA(Hibernate)????
#spring.jpa.properties.hibernate.hbm2ddl.auto=update
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
#spring.jpa.show-sql=true
#spring.jpa.properties.hibernate.format_sql=true
#mybatis.config-location=classpath:mybatis/mybatis-config.xml
#mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.ktjiaoyu.crm.entity
logging.level.root=warn
logging.level.com.ktjiaoyu.crm.mapper=trace
logging.pattern.console=%p%m%n

3. 实体类

使用JPA注解(如@Entity@Id@GeneratedValue@Column等)定义实体类,映射数据库表及其字段。

package com.ktjiaoyu.crm.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "sys_role")

public class Role implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private Long roleId;
@Column(name = "role_name")
private String roleName;
@Column(name = "role_desc")
private String roleDesc;
@Column(name = "role_flag")
private Integer roleFlag;
@OneToMany(targetEntity = User.class,fetch = FetchType.LAZY,cascade = CascadeType.REMOVE,mappedBy = "role")
private Set<User> users=new HashSet<User>();

public Role() {
}

public Role(String roleName, String roleDesc, Integer roleFlag) {
this.roleName = roleName;
this.roleDesc = roleDesc;
this.roleFlag = roleFlag;
}

public Long getRoleId() {
return roleId;
}

public void setRoleId(Long roleId) {
this.roleId = roleId;
}

public String getRoleName() {
return roleName;
}

public void setRoleName(String roleName) {
this.roleName = roleName;
}

public String getRoleDesc() {
return roleDesc;
}

public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}

public Integer getRoleFlag() {
return roleFlag;
}

public void setRoleFlag(Integer roleFlag) {
this.roleFlag = roleFlag;
}

public Set<User> getUsers() {
return users;
}

public void setUsers(Set<User> users) {
this.users = users;
}
}

4. 仓库接口

继承JpaRepositoryCrudRepository(或其他特定查询的仓库接口),定义数据访问方法。Spring Data JPA会基于方法名或@Query注解自动实现这些方法。

import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { // 根据用户名查找用户 User findByUsername(String username); }

 

5. 服务层

在服务层中注入仓库接口,编写业务逻辑。

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public User getUserByUsername(String username) { return userRepository.findByUsername(username); } } 

6. 控制器层

在控制器层中调用服务层的方法,处理HTTP请求。

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user") public User getUser(@RequestParam String username) { return userService.getUserByUsername(username); } }

 

7. 优点与不足

  • 优点
    • 简化数据访问层的代码,提高开发效率。
    • 支持复杂的查询,通过方法名或JPQL/Criteria API实现。
    • 灵活的数据库迁移策略。
    • 良好的集成Spring事务管理。
  • 不足
    • 对于复杂的数据操作,可能需要手动编写JPQL或Criteria查询,增加了学习成本。
    • 性能调优需要更多的关注,如批量操作、分页优化等。

总的来说,Spring Boot结合JPA为开发者提供了一种高效、灵活的数据访问方式,是构建企业级应用的重要技术栈之一。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值