https://www.jianshu.com/p/f72d82e90948

可以重点关注方法二,把原生sql传入数据库去查询

好处是:更加灵活
坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sql某些字段不存在或者拼接后语法不符合sql语句

package com.aircas.satellitemanagement.jpa;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List; @RestController
@RequestMapping(value = "/user")
public class UserController { @Autowired
LocalContainerEntityManagerFactoryBean entityManagerFactory; @GetMapping(value = "/all/4")
public List<User> exec() {
EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();
StringBuilder sqljoint = new StringBuilder(300);
sqljoint.append("SELECT * FROM user");
String sql = sqljoint.toString();
em.getTransaction().begin();
// User是我自己定义的entity bean
Query query = em.createNativeQuery(sql, User.class);
List<User> obj = query.getResultList();
return obj;
} }
package com.aircas.satellitemanagement.jpa;

import lombok.Data;
import lombok.ToString; import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table(name = "user")
@Data
@ToString
public class User { @Id
private String id; private String name; private String startTime; }

数据库表结构

查询结果,是get接口,我就直接用浏览器访问了

 

 注意:实际应用中,会比较复杂,一般来说前台会给后台传一些参数比如name=xxx,后台需要去拼接sql语句

----------------------------------------------------------------------------------------------------------------------------------------------------------

在后续的使用中发现 LocalContainerEntityManagerFactoryBean 会有并发问题,然后尝试了直接使用 EntityManager,发现可以用,目前没啥问题,修改后的如下

package com.aircas.satellitemanagement.jpa;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;

@RestController
@RequestMapping(value = "/user")
public class UserController {

@Autowired
EntityManager entityManager;

@GetMapping(value = "/all/4")
public List<User> exec() {
StringBuilder sqljoint = new StringBuilder(300);
sqljoint.append("SELECT * FROM user");
String sql = sqljoint.toString();
// User是我自己定义的entity bean
Query query = entityManager.createNativeQuery(sql, User.class);
List<User> obj = query.getResultList();
return obj;
}

}

SpringBoot中JPA使用动态SQL查询的更多相关文章

  1. SpringBoot中Example的动态条件查询

    一.无匹配器的情况: Person person = new Person(); person.setName("test"); Role role = new Role(); r ...

  2. SpringBoot中JPA的学习

    SpringBoot中JPA的学习 准备环境和项目配置 写一下学习JPA的过程,主要是结合之前SpringBoot + Vue的项目和网上的博客学习一下. 首先,需要配置一下maven文件,有这么两个 ...

  3. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  4. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

    前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...

  5. spring data jpa使用原生sql查询

    spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...

  6. Springboot中mybatis控制台打印sql语句

    Springboot中mybatis控制台打印sql语句 https://www.jianshu.com/p/3cfe5f6e9174 https://www.jianshu.com/go-wild? ...

  7. ibatis 中动态SQL查询和动态标签嵌套的使用

    ibatis 动态查询对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系映射(O/R Mapping)解 ...

  8. Mybatis中多个参数的问题&&动态SQL&&查询结果与类的对应

    ### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, Str ...

  9. 零基础学习java------36---------xml,MyBatis,入门程序,CURD练习(#{}和${}区别,模糊查询,添加本地约束文件) 全局配置文件中常用属性 动态Sql(掌握)

    一. xml  1. 文档的声明 2. 文档的约束,规定了当前文件中有的标签(属性),并且规定了标签层级关系 其叫html文档而言,语法要求更严格,标签成对出现(不是的话会报错) 3. 作用:数据格式 ...

随机推荐

  1. 【Services】【Web】【tomcat】配置tomcat支持https传输

    1. 基础: 1.1. 描述:内网的tomcat接到外网nginx转发过来的请求之后需要和外网的客户端进行通讯,为了保证通讯内容的安装,使用tomcat使用https协议. 1.2. 链接:http: ...

  2. 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决

    前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...

  3. BIT 常态化在线CTF系统 pwn题目

    偶然得到这个平台,发现是BIT的CTF平台,应该是平时的阶段性的训练题目.看了看题,其他方向的题目感觉都是入门题,但是pwn题目,发现还是比入门题难一点点的,来记录一下. pwn1 栈上任意位置的读写 ...

  4. [BUUCTF]REVERSE——[BJDCTF 2nd]8086

    [BJDCTF 2nd]8086 附件 步骤: 首先查壳儿,无壳,直接上ida,检索字符串,程序里就一个字符串 没法f5反编译出伪代码,大致看了一下汇编,start函数之后调用了sub_10030函数 ...

  5. LuoguP7059 [NWRRC2015]Lucky Chances 题解

    Content 有一个名叫 Lucky chances 的游戏,游戏一开始给出一个 \(r\times c\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...

  6. Nacos——注册中心

    目录 1.什么是nacos 2.使用--依赖+配置文件 3.Nacos服务分级存储模型 4.服务跨集群调用问题 5.服务集群属性--配置服务集群 6. Nacos-NacosRule负载均衡 7.根据 ...

  7. Python第二周 str的方法

    str.start #!/usr/bin/env python # Author:Zhangmingda while True: cmd = input('输入字符:')#.strip() print ...

  8. HTTPS握手-混合加解密过程

    SSL协议通信过程 (1) 浏览器发送一个连接请求给服务器;服务器将自己的证书(包含服务器公钥S_PuKey).对称加密算法种类及其他相关信息返回客户端; (2) 客户端浏览器检查服务器传送到CA证书 ...

  9. 基于GDI和D3D的抓屏技术

    GDI32Api.Direct3D屏幕截图 最近因为工作需要,认真研究了一下屏幕截图的方法. 最主要的方法有两种,一.调用windows GDI32 API函数.二.使用DirectX9.0来实现. ...

  10. SpringBoot 上传文件功能

    注意事项: springboot默认有以下文件配置要求, 可以自行在配置文件里面修改 spring: servlet: multipart: enabled: true #是否处理上传 max-fil ...