JPA数据操作汇总,常用的数据操作方法都在这了

news/2024/7/8 12:07:54

前言

写博客总结,最近公司进新人,写了个内部文档顺便整理了一下jap的数据操作demo

正文

第一种方式:

根据客户名称查询客户,使用jpql的形式查询,配置jpql语句,使用的@Query注解

@Query(value="from Customer where custName = ?1")
    public Customer findJpql(String custName);

第二种方式:

使用sql的形式查询,

Query:配置sql查询
value:sql语句
nativeQuery:查询方式
	true:sql查询
	false:jpql查询
    @Query(value="select * from cst_customer where cust_name like ?1",nativeQuery = true)
    public List<Object [] > findSql(String name);

第三种方式:

方法名的约定:
findBy: 查询
	对象种的属性名称(首字母大写): 查询条件
	例如:数据库中的字段 cust_name  方法名:findByCustName
	默认情况: 默认使用的是等于的方式查询
列举两种种特殊情况:
1.findBy  + 属性名称 + “查询方式(Like | isnull)”
方法名:findByCustNameLike
2.多条件查询
  findBy + 属性名 + “查询方式”   + “多条件的连接符(and|or)”  + 属性名 + “查询方式”

第四种方式:

使用字符串进行拼接的方式,一定要注意引用的EntityManager的类

package com.demo.dao.imp;

import com.demo.dao.IFindByStr;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import java.math.BigInteger;
import java.util.List;

@Service
public class FindByStr implements IFindByStr {
    @Autowired
    private EntityManager entityManager;
    @Override
    public List findStr(){
        //查询语句string拼接结果
        StringBuffer sql = new StringBuffer("SELECT * " +"FROM cst_customer " +"where 1=1 ");
        //转换数据格式
        String sqlStr = sql.toString();
        //字符串传入到Query中
        javax.persistence.Query query = entityManager.createNativeQuery(sqlStr);
        //查询数据库
        List list = query.getResultList();
        return list;
    }
}

下边就是贴的代码了
在这里插入图片描述
整体的结构是这样的,两个接口,一个实体类,一个实现类

package com.demo.dao;

import java.util.List;


public interface IFindByStr {
    //字符串拼接sql
    public List findStr();
}

package com.demo.dao;

import com.demo.domain.Customer;
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.math.BigInteger;
import java.util.List;

public interface CustomerDao extends JpaRepository<Customer,Long> ,JpaSpecificationExecutor<Customer> {

    @Query(value="from Customer where custName = ?1")
    public Customer findJpql(String custName);


    /**
     *  sql  :update cst_customer set cust_name = ? where cust_id = ?
     *  jpql : update Customer set custName = ? where custId = ?
     */
    @Query(value = " update Customer set custName = ?2 where custId = ?1 ")
    @Modifying
    public void updateCustomer(long custId, String custName);

    @Query(value="select * from cst_customer where cust_name like ?1",nativeQuery = true)
    public List<Object [] > findSql(String name);


    public Customer findByCustName(String custName);

    public List<Customer> findByCustNameLike(String custName);

    //使用客户名称模糊匹配和客户所属行业精准匹配的查询
    public Customer findByCustNameLikeAndCustIndustry(String custName, String custIndustry);



}


package com.demo.domain;

import javax.persistence.*;

@Entity
@Table(name="cst_customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="cust_id")
    private Long custId;
    @Column(name="cust_address")
    private String custAddress;
    @Column(name="cust_industry")
    private String custIndustry;
    @Column(name="cust_level")
    private String custLevel;
    @Column(name="cust_name")
    private String custName;
    @Column(name="cust_phone")
    private String custPhone;
    @Column(name="cust_source")
    private String custSource;

    public Long getCustId() {
        return custId;
    }

    public void setCustId(Long custId) {
        this.custId = custId;
    }

    public String getCustAddress() {
        return custAddress;
    }

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

    public String getCustIndustry() {
        return custIndustry;
    }

    public void setCustIndustry(String custIndustry) {
        this.custIndustry = custIndustry;
    }

    public String getCustLevel() {
        return custLevel;
    }

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

    public String getCustName() {
        return custName;
    }

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

    public String getCustPhone() {
        return custPhone;
    }

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

    public String getCustSource() {
        return custSource;
    }

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

    @Override
    public String toString() {
        return "Customer{" +
                "custId=" + custId +
                ", custAddress='" + custAddress + '\'' +
                ", custIndustry='" + custIndustry + '\'' +
                ", custLevel='" + custLevel + '\'' +
                ", custName='" + custName + '\'' +
                ", custPhone='" + custPhone + '\'' +
                ", custSource='" + custSource + '\'' +
                '}';
    }
}


结束

常用的大概就这四种方式,当然还有其他的一些方法,不妨大家自己去写一写。四种方式的优略都是什么呢?欢迎大家积极评价讨论。


http://www.niftyadmin.cn/n/1974367.html

相关文章

nginx将svn请求转发到apache实现svn http请求

需要安装apache libapache2-svn模块&#xff0c;nginx&#xff0c;svn。安装过程略过。 记录比较重要几点&#xff08;不按先后&#xff09;&#xff1a; 安装apache的svn模块 sudo apt-get install libapache2-svn apahce的svn模块,通过他实现svn权限等问题。 apt-get …

树形结构的遍历过程全遍历

前言 树形结构是项目开发中常常用到的一种结构&#xff0c;也是一种经典的数据结构&#xff0c;比如说常见的二叉树&#xff0c;红黑树等&#xff0c;今天要说的不是基础的数据结构&#xff0c;是业务中用到的树形数据结构。 正文 先来看看业务是什么吧&#xff01; 业务 如…

2014-11-6Android学习------Android图像处理之Bitmap类

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息&#xff0c;进行图像剪切、旋转、缩放等操作&#xff0c;并可以指定格式保存图像文件。本文从应用的角度&#xff0c;着重介绍怎么用Bitmap来实现这些功能。 一、Bitmap的生成 1.1 BitmapFactory dec…

Android如何绘制视图,解释了为何onMeasure有时要调用多次

2019独角兽企业重金招聘Python工程师标准>>> 原文地址&#xff1a;How Android Draws Views 当Activity获取焦点的时候&#xff0c;它就需要绘制布局。Android框架会处理绘制过程&#xff0c;但这个Activity必须提供它布局树的根节点。 绘制过程是从布局的根节点开始…

安利一个画图的网站

前言 大家画流程图&#xff0c;架构图都用什么呢&#xff1f;之前画图用的不同的软件安装到电脑上&#xff0c;比如微软的Visio 画甘特图各种图也都能画&#xff0c;但是不免费不香。然后有用了ProcessOn这个也是挺好用的&#xff0c;就是免费的图有点少&#xff0c;后来通过多…

2014-11-6Android学习------Android Paint和Color类、Canvas类的常用属性

要绘图&#xff0c;首先得调整画笔&#xff0c;待画笔调整好之后&#xff0c;再将图像绘制到画布上&#xff0c;这样才可以显示在手机屏幕上。 graphics中包括了Canvas&#xff08;画布&#xff09;、Paint&#xff08;画笔&#xff09;、Color&#xff08;颜色&#xff09;、B…

14.4.9 Innodb通用表空间

2019独角兽企业重金招聘Python工程师标准>>> 一. 通用表空间简介 通用表空间是innodb表空间新类型&#xff0c;5.7.6引入 通用表空间提供以下功能&#xff1a; 类似系统表空间&#xff0c;是共享表空间&#xff0c;能存储多个表的数据相比独立表空间&#xff0c;通用…

前端时间格式的转换

前言 有没有遇到过写前端页面渲染数据的时候发现后端接口给的格式不能直接拿过来渲染&#xff0c;这个时候怎么办呢&#xff1f;找写接口的小伙伴探讨一下&#xff0c;让他改接口&#xff0c;当然是一种办法&#xff0c;但是作为一个团队就是不管前端给我什么我都能渲染成我想…