Spring Boot使用Spring data JPA

前景提要

请先看看笔者的下列文章:
JPA到Spring data JPA
Spring data家族的模块
Spring MVC及常用注解
SpringBoot整合SpringDataJPA依赖和配置导入
参考引用的文章:
JPQL语句格式

Spring Boot项目文件结构


目录结构是Spring MVC的结构
Controller层:控制层,控制负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程
Entity层:实体层 ,数据库在项目中的类,放实体对象
Repository层也叫做Dao层:持久层,主要与数据库进行交互

Spring data JPA支持的操作

Spring Boot JPA就是一层的封装后的数据库操作方式,使得不需要再写JPA的JPQL的数据库操作语句,使得操作变得非常简单。

在进行操作前
导入pom文件依赖和修改application的配置,请看SpringBoot整合SpringDataJPA依赖和配置导入

查询操作

这里有全部的代码和解析Spring data JPA查询操作完整案例,代码根据JpaRepository接口完成,Repository其他接口也可以完成查询方法

第一步:声明接口

请看Spring Data JPA的Repository接口讲解接口内容,在Repositity里构造一个继承的接口,注意尖括号里写的是<类名,id的数据类型>

public interface UserRepository extends JpaRepository<User, Integer> {
}
第二步:构造查询

查询方式
基本查询也分为两种,一种是spring data默认已经实现,一种是根据查询的方法来自动解析成SQL。

  1. 自定义的简单查询就是根据方法名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy,getXXBy后面跟属性名称
  2. 具体的关键字,使用方法和生产成SQL,如下表所示。JpaRepository查询方法解析流程请看Spring Data JPA的Repository接口

注意:

  1. 按照Spring Data的规范,查询方法以find | read | get 开头,涉及查询条件时,条件的属性用条件关键字连接.注意的是:条件属性以首字母大写。而接口也会针对这些用户自命名的方法进行解析,
  2. 实体类里有什么属性才可以查(操作)什么属性
笔者个人对表的理解和解释

keyword列是SQL语句里的关键字,也就是我们在写SQL语句时候的必须用到的。
JPQL snippet列就是JPA规范下,我们在查数据库是需要写的语句。JPQL对SQL语句进行一次封装,形成自己的语法。
Sample列就是Spring data JPA对JPA的JPQL进一步的封装,变成了一个方法!!!大大简化数据库,我们就不需要再写一串长的语句。你需要查什么,就根据你的实体有什么属性,然后按照步骤做就行。

比如查询操作,要查询Person表matthew chen这个人
SQL写法:select firstname,lastname from Person where lastname = ‘chen’ and firstname = ‘matthew’
JPQL写法:select p from Person p where p.lastname = ?chen and p.firstname = ?matthew
sample:调用findByLastnameAndFirstname
在这里插入图片描述
全过程代码和解释请看Spring data JPA查询操作完整案例

第二步:特殊查询操作(分页\排序\使用@Query来指定本地查询等)

Spring Boot JPA 特殊查询操作

第三步:控制层操作

全过程代码和解释请看Spring data JPA查询操作完整案例


增删改查的本质上差不多,搞懂查询,后续的增删改就易上手

删除操作

两种常用方式:第一个直接利用函数;第二个@Modifying + @Query实现JPQL语句实现删除操作

@Repository
interface UserRepository extends Repository<User, Long> {
   //删除操作
    Long deleteByLastname(String lastname);
    List<User> removeByLastname(String lastname);

    @Modifying
    @Query("delete from User u where user.id = ?1")
    void deleteById(Integer id);
}

修改操作

方式一:直接找到要修改的内容,然后改掉就行
方式二:@Modifying + @Query表示进行update操作,JPQL不支持insert操作

@Controller
@RequestMapping(value = "/theuser") 
public class UserController {
    @RequestMapping(value = "/update")
    @ResponseBody
    public String update() {
        Optional<User> user = userRepository.findById(1);
        User newuser=user.get();
        System.out.println("旧用户名: "+newuser.getUsername());
        newuser.setUsername("409");
        userRepository.save(newuser);
        System.out.println("新用户名: "+newuser.getUsername());
        return "Successfully update!";
    }
 }

@Modifying
@Query("update usertable set lastname = :lastname")
void updateUser(@Param("lastName")String lastName);

可以参考这个文章


增添操作

@Controller
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping(value = "/insert")
    @ResponseBody
    public String TestSave() {
        User user = new User();
        user.setId(1);
        user.setPassword(BCrypt.hashpw("0308"));
        userRepository.save(user);
        return "Successfully insert!";
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值