springDataJPQL实现增删改查及分页,原生sql查询,根据方法命名规则实现查询

Posted zhangrongfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springDataJPQL实现增删改查及分页,原生sql查询,根据方法命名规则实现查询相关的知识,希望对你有一定的参考价值。

一、使用方法

1、在dao中定义开一个方法,使用方法的参数设置jpql,并且使用方法的返回值接受查询结果,在方法上添加@query注解,在注解中写jpql语句进行增删改查,测试

2、使用原生的sql语句:dao中定义一个方法,在方法中添加@query注解,在注解中添加原生sql语句,并且添加一个属性:nativeQuery=true,测试

3、方法命名规则查询:

  通过以肯定的规则,定义一个方法,框架本身就可以根据方法名生成一块个sql语句进行查询,规则:

    1、必须以findBy开头

    2、查询某个字段,findBy后跟实体类的属性名称

    3、如果有多个条件,就在方法后加And后跟实体类的属性名

    4、方法的参数对应查询的定义

    5、返回值根据返回值的数据类型定义;如果是分页查询,在方法中添加一个参数Pageable即可

二、、编写实现类

package cn.zrf.jpa.entity;

import javax.persistence.*;

@Entity
@Table(name = "cust_customer")
public class Customer 
    // 配置主键自增的策略
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name="cust_id")
    private long custId;
    @Column(name="cust_name")
    private String custName;
    @Column(name="cust_source")
    private String custSource;
    @Column(name="cust_indutry")
    private String custIndutry;
    @Column(name="cust_level")
    private String custLevel;
    @Column(name="cust_address")
    private String custAddress;
    @Column(name="cust_phone")
    private String custPhone;

    @Override
    public String toString() 
        return "Customer" +
                "custId=" + custId +
                ", custName=‘" + custName + ‘\‘‘ +
                ", custSource=‘" + custSource + ‘\‘‘ +
                ", custIndutry=‘" + custIndutry + ‘\‘‘ +
                ", custLevel=‘" + custLevel + ‘\‘‘ +
                ", custAddress=‘" + custAddress + ‘\‘‘ +
                ", custPhone=‘" + custPhone + ‘\‘‘ +
                ‘‘;
    

    public long getCustId() 
        return custId;
    

    public void setCustId(long custId) 
        this.custId = custId;
    

    public String getCustName() 
        return custName;
    

    public void setCustName(String custName) 
        this.custName = custName;
    

    public String getCustSource() 
        return custSource;
    

    public void setCustSource(String custSource) 
        this.custSource = custSource;
    

    public String getCustIndutry() 
        return custIndutry;
    

    public void setCustIndutry(String custIndutry) 
        this.custIndutry = custIndutry;
    

    public String getCustLevel() 
        return custLevel;
    

    public void setCustLevel(String custLevel) 
        this.custLevel = custLevel;
    

    public String getCustAddress() 
        return custAddress;
    

    public void setCustAddress(String custAddress) 
        this.custAddress = custAddress;
    

    public String getCustPhone() 
        return custPhone;
    

    public void setCustPhone(String custPhone) 
        this.custPhone = custPhone;
    

  

三、编写dao

package cn.zrf.jpa.dao;

import cn.zrf.jpa.entity.Customer;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface CustomerDao extends JpaRepository<Customer,Long>,JpaSpecificationExecutor<Customer> 
    //查询全部
    @Query("from Customer")
    List<Customer> getAllCustomer();
    //查询全部并分页
    @Query("from Customer ")
    List<Customer> getAllCustomerByPage(Pageable pageable);
    //条件查询(根据ID查询)
    @Query("from Customer where cust_id = ?")
    Customer getCustomerById(Long id);
    //根据地址,姓名模糊查询
    @Query("from Customer where custAddress like ? and custName like ?")
    List<Customer> getCustList(String address,String custName);
    //根据ID进行局部更新操作
    @Query("update Customer set cust_name=? where custId=?")
    @Modifying
    void getUpdateById(String name,Long id);
    //原生sql语句模糊查询操作
    @Query(value = "select * from cust_customer where cust_name like ?",nativeQuery = true)
    List<Customer> getCustomerListByNative(String name);
    //方法命名规则查询
    /**1 应该使用findBy开头
     * 2 查询某个字段  findBy后跟实体类的属性的名称
     * 3 如果有多个条件   就在方法后加And+实体类的属性名
     * 4  方法的参数 对应查询的定义
     * 5 返回值根据返回的数据类型定义
     * 6 如果需要分页查询   在方法中添加一个参数Pageable 即可
     */
    //根据ID查询
    Customer findByCustId(Long id);
    //根据姓名,地址进行模糊查询
    List<Customer> findByCustNameLikeAndCustAddressLike(String name,String address);
    //分页查询
    List<Customer> findByCustAddressLike(String address, Pageable pageable);

  

四、测试类

package cn.jpa.test;

import cn.zrf.jpa.dao.CustomerDao;
import cn.zrf.jpa.entity.Customer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.annotation.Commit;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import java.awt.print.Pageable;
import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestJpql 
    @Autowired
    CustomerDao customerDao;
    //查询全部
    @Test
    public void getAllCustomerTest()
        List<Customer> list = customerDao.getAllCustomer();
        for (Customer customer:list)
            System.out.println(customer);
        
    
    //查询全部并分页
    @Test
    public void getAllCustomerByPageTest()
        List<Customer> list = customerDao.getAllCustomerByPage(new PageRequest(0, 3));
        for (Customer customer:list)
            System.out.println(customer);
        
    
    //根据ID查询
    @Test
    public void getCustomerByIdTest()
        Customer customer = customerDao.getCustomerById(1l);
        System.out.println(customer);
    
    //根据地址,姓名进行模糊查询
    @Test
    public void getCuseListTest()
        List<Customer> custList = customerDao.getCustList("%京%", "%长%");
        for (Customer customer:custList)
            System.out.println(customer);
        
    
    //根据ID进行局部更新操作
    @Test
    @Transactional
    @Commit
    public void getUpdateByIdTest()
        customerDao.getUpdateById("张无忌",3l);
    
    //原生sql语句模糊查询
    @Test
    public void getCustomerByNativeTest()
        List<Customer> list = customerDao.getCustomerListByNative("%长%");
        for (Customer customer:list)
            System.out.println(customer);
        
    
    //方法命名规则查询测试
    //根据ID查询
    @Test
    public void findByIdTest()
        Customer customer = customerDao.findByCustId(1L);
        System.out.println(customer);
    
    //根据地址,姓名进行模糊查询
    @Test
    public void findByCustNameLikeAndAddressLike()
        List<Customer> list = customerDao.findByCustNameLikeAndCustAddressLike("%张%","%京%");
        for (Customer customer:list)
            System.out.println(customer);
        
    
    //根据地址进行分页查询
    @Test
    public void findByCustAddressLike()
        List<Customer> list = customerDao.findByCustAddressLike("%京%", new PageRequest(0, 3));
        for (Customer customer:list)
            System.out.println(customer);
        
    

  

 

以上是关于springDataJPQL实现增删改查及分页,原生sql查询,根据方法命名规则实现查询的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot-Vue实现增删改查及分页小DEMO

简单的增删改查及数据分页

04-springboot整合elasticsearch初识-简单增删改查及复杂排序,分页,聚合操作

SpringBoot WebFlux整合MongoDB实现CRUD及分页功能

动态链表增删改查及排序功能

python课堂整理34----类的增删改查及实例属性增删改查