最近遇到一个需求,查询数据库中对应表的字段是动态的,项目使用的框架使用JPA+Spring Boot,JPA自带原生SQL支持的传入参数是强类型的,无法用于查询语句的字段更改,因为插入字符串的话带有单引号,需要另外定义原生SQL

因此我们创建一个查询类

import com.weiqitonggame.trade.model.WebInfo;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; @Component //标记为组件,spring启动时会将该类扫描进容器

public class InformationDaoEM {
@PersistenceContext </span><span style="color: #008000;">//</span><span style="color: #008000;">注入的是实体管理器,执行持久化操作</span>

EntityManager entityManager;

</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getInfoWebWaring(String column){
String SQL </span>= "SELECT "+column+" FROM config LIMIT 1"<span style="color: #000000;">;
Object obj </span>=<span style="color: #000000;"> entityManager.createNativeQuery(SQL).getSingleResult(); </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> String.valueOf(obj);
} </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> WebInfo getWebInfo(String [] args){ String SQL </span>= "SELECT id, "+<span style="color: #000000;">
args[</span>0]+" log_url, "+<span style="color: #000000;">
args[</span>1]+" title, "+<span style="color: #000000;">
args[</span>2]+" key_word, "+<span style="color: #000000;">
args[</span>3]+" description, "+<span style="color: #000000;">
args[</span>4]+" address, "+<span style="color: #000000;">
args[</span>5]+" contact "+
"FROM config LIMIT 1"<span style="color: #000000;">; WebInfo webInfo </span>= (WebInfo) entityManager.createNativeQuery(SQL,WebInfo.<span style="color: #0000ff;">class</span><span style="color: #000000;">).getSingleResult(); </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> webInfo;
}

}

其中
EntityManager.createNativeQuery(SQL)返回的是Object对象
entityManager.createNativeQuery(SQL,WebInfo.class)返回的是映射后的实例对象
实体类WebInfo需要进行以下处理,确保被扫描进spring容器

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import javax.persistence.*; @Data //生成读写方法

@AllArgsConstructor //生成全参构造方法

@NoArgsConstructor //生成无参构造方法

@Accessors(chain = true)

@Entity(name = "tableName") //标记为entity

public class WebInfo {

@Id

@GeneratedValue(strategy= GenerationType.AUTO)

@Column(name = "id") //查询结果对应字段

private Integer id;

@Column(name = "log_url")

private String logUrl;

@Column(name = "title")

private String title;

@Column(name = "key_word")

private String keyWord;

@Column(name = "description")

private String description;

@Column(name = "address")

private String address;

@Column(name = "contact")

private String contact; }

Query.getSingleResult() 执行SQL语句,返回一个查询结果,常用的还有以下方法
Query.getResultList() () 执行SQL语句,返回一个List集合
Query.getFirstResult() () 执行SQL语句,返回一个系列结果集合的第一个

调用方式如下:

import org.springframework.stereotype.Service;
import com.weiqitonggame.trade.service.InformationService;
import org.springframework.beans.factory.annotation.Autowired;
import com.weiqitonggame.trade.dao.InformationDaoEM;
import com.weiqitonggame.trade.model.WebInfo; @Service //标记为service

public class InformationServiceImpl implements InformationService {
@Autowired  </span><span style="color: #008000;">//</span><span style="color: #008000;">注入informationDaoEM</span>
<span style="color: #0000ff;">private</span><span style="color: #000000;"> InformationDaoEM informationDaoEM; @Override
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getWebWaring(String column) { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> informationDaoEM.getInfoWebWaring(column);
} @Override
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> WebInfo getWebInfo(String[] args) { </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> informationDaoEM.getWebInfo(args);
}

}

JPA框架下使用纯粹的原生SQL的更多相关文章

  1. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  2. SpringData JPA进阶查询—JPQL/原生SQL查询、分页处理、部分字段映射查询

    上一篇介绍了入门基础篇SpringDataJPA访问数据库.本篇介绍SpringDataJPA进一步的定制化查询,使用JPQL或者SQL进行查询.部分字段映射.分页等.本文尽量以简单的建模与代码进行展 ...

  3. thinkPHP框架中执行原生SQL语句的方法

    这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...

  4. JPA或Hibernate中使用原生SQL实现分页查询、排序

    发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...

  5. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  6. jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本

    -----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join).  上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...

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

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

  8. 管中窥豹——框架下的SQL注入 Java篇

    管中窥豹--框架下的SQL注入 Java篇 背景 SQL注入漏洞应该算是很有年代感的漏洞了,但是现在依然活跃在各大漏洞榜单中,究其原因还是数据和代码的问题. SQL 语句在DBMS系统中作为表达式被解 ...

  9. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

随机推荐

  1. jQuery Validate自定义各种验证方法(转)

    一.封装自定义验证方法-validate-methods.js /***************************************************************** j ...

  2. MSComDlg.CommonDialog服务器不能创建对象错误的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在JavaScript中弹出打开文件对话框,代码如下: var fileOpenDlg = new ActiveXOb ...

  3. 不需要用任何辅助工具打包Qt应用程序

    不需要用任何辅助工具打包Qt应用程序.方法如下:    生成release文件后,双击里面的exe文件,会弹出一个对话框,里面提示缺少哪一个DLL文件, 然后根据该文件名到你安装QT软件的目录下的/b ...

  4. umask命令

    umask——显示.设置文件的缺省权限 the user file-creation mask 命令所在路径:Shell内置命令 示例1:显示缺省权限 # umask -S 参数S的作用是以rwx形式 ...

  5. dzzoffice网盘应用有着最强大的团队、企业私有网盘功能,并且全开源无功能限制。

    企业,团队多人使用dzzoffice的网盘应用,灵活并且功能强大. 支持个人网盘,机构部门,群组,并可根据使用情况开启关闭.例如可只开启群组功能.   可通过后缀,标签自定义类型进行快捷筛选   全面 ...

  6. 如何开发、本地测试、发布 Laravel 扩展包?

    如何开发.本地测试.发布 Laravel 扩展包?  Laravel/ 1年前/  4022 /  11   现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不 ...

  7. dnsquery - 使用解析程序查询域名服务器

    SYNOPSIS(总览) dnsquery [-n nameserver ] [-t type ] [-c class ] [-r retry ] [-p period ] [-d ] [-s ] [ ...

  8. 【搜索】P1219 八皇后

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. mysql查询速度慢的原因[整理版]

    在以前的博客中陆续记录了有关查询效率方面的文章.今天在整理一下,写上自己的一些心得记录如下:常见查询慢的原因常见的话会有如下几种:1.没有索引或没有用到索引.PS:索引用来快速地寻找那些具有特定值的记 ...

  10. IOS学习笔记2—Objective C—类、属性、方法

    以下是我学习IOS开发的一些笔记和心得,贴出来和大家一同分享,也希望大家能补充和纠错,共同进步 有Android和IOS开发问题也希望能和大家交流! Objective-C 1.OC是一门基于C的面向 ...