Spring data JPA查询操作完整案例

本文介绍了一个基于Java的简单用户管理系统实现,包括实体类User的设计、Repository接口定义以及Controller层的操作方法。通过具体代码示例展示了如何进行用户数据的增删改查等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义Entity层实体类User:

User.java类包含id,lastname,password三个属性

package com.example.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "usetable")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String lastname;
    
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String string) {
        this.password = string;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", lastname=" + lastname + ", password=" + password + "]";
    }
    
}

定义Dao层或Repository层的接口UserRepository.java

package com.example.demo.repository;

import java.util.List;
import java.util.Optional;
import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

/**
 * 定义一个dao层接口,此接口只需要继承JpaRepository和JpaSpecificationExecutor接口即可,该接口就具备了增删改	*   查和分页等功能。
 * JpaRepository<实体类类型,主键类型>:完成基本的CRUD操作
 * JpaSpecificationExecutor<实体类类型>:用于复杂查询(分页等查询操作)
 * @author cxl(RUCmatthewchen)
 *
 */

@Repository // 创建数据库操作接口
public interface UserRepository extends JpaRepository<User, Integer> {

    // 利用关键字定义查询方法(不完全列举) 注意实体类里有的属性才可以查
    List<User> findByLastname(String lastname);// 用lastname属性来查
    Optional<User> findById(Integer id);// 用id属性来查
    List<User> findByPassword(String password);//利用password来查
    //对照表和规则完成下属的查询方法构建
    List<User> findByIdANDLastname(Integer id,String lastname);//构造方法查id和lastname同时满足的记录,and关键字使用
    List<User> findByIdOrPassword(Integer id,String password);//or关键字使用
    List<User> findByIdEqueals(Integer id);//equals关键字
    List<User> findByIdBetween(Integer id);//Between关键字
    List<User> findByIdLessThan(Integer id);//lessthan关键字
    List<User> findByLastnameLike(String lastname);//like关键字
    List<User> findByIdIn(Integer id);//in关键字

    //简单的查询直接在Controller里定义就行
}


定义Controller层的UserController.java

package com.example.demo.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.hutool.crypto.digest.BCrypt;

@Controller //声明此类为控制器
@RequestMapping(value = "/theuser") //映射此类的访问路径
public class UserController {
    
    @Autowired
    private UserRepository userRepository;

    @RequestMapping(value = "/finduser")
    @ResponseBody
    public String findUser(){//使用简单的默认查询方法
        userRepository.findAll();
        userRepository.count();
        return "success";
    } 

    @RequestMapping(value = "/newone")
    @ResponseBody
    public String newUser(){
        User user = new User();
        user.setLastname("chenlong");
        user.setId(23121321);
        user.setPassword(BCrypt.hashpw("123456")); 
        userRepository.save(user);//增操作 存数据
        //查询所有数据
        List<User> list = userRepository.findAll();
        for(User us : list){
            System.out.println(us);
        }
        //userRepository.delete(user);//删除
        return "success";
    }
  
    @RequestMapping(value = "/finduser2")
    @ResponseBody
    public String findUser2(){//使用接口里构造的的查询方法
        userRepository.findById(1);
        userRepository.findByLastnameLike("jack");
        userRepository.findByIdANDLastname(1, "jack");
        userRepository.findByIdIn(25);
        return "success";
    } 

}  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值