Springboot JPA 执行原生sql ,自定义SQL占位符增加参数

生如夏花 2018-04-22 20:27:08 11146

  JPA   实际上就是  Hibernate  的封装,根据Interface 方法名,生成对应的方法,也支持Query注解的方式。现在说说执行原生  SQL  。

注解@Query方式执行原生SQL语句:

@Query(value="select user.id from user where user.id =15", nativeQuery = true)
public User queryById(){}

注解的方式需要增加一个“nativeQuery=true”来表示是原生  SQL  。

EntityManager.Query 方式:

Query query = entityManager.createNativeQuery("select user.id from user where user.id =15");
List list = query.getResultList()

复杂原生SQL,占位式:

@PersistenceContext
private EntityManager entityManager;

@Modifying
@Transactional
public StockDetails save(StockDetails o) {

    StringBuffer sb = new StringBuffer();
    sb.append("insert into b_stock_details (transaction_id, pid, price, cost_price, offer_name, game_type, ");
    sb.append(" game_name, game_id, money, game_about, purchase_date, create_time, customer_id, ");
    sb.append(" customer_name, customer_login_name,member_id, member_name, have_customer_id,status, ifrom,  ");
    sb.append("trading_status,game_face_name, receipt_data_one, receipt_data_two) ");
    sb.append(" SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?  FROM DUAL WHERE NOT EXISTS ");
    sb.append("(SELECT transaction_id FROM b_stock_details where transaction_id= ?)");
    Query query = entityManager.createNativeQuery(sb.toString());
    query.setParameter(1,o.getTransactionId());
    query.setParameter(2,o.getPid());
    query.setParameter(3,o.getPrice());
    query.setParameter(4,o.getCostPrice());
    query.setParameter(5,o.getOfferName());
    query.setParameter(6,o.getGameType());
    query.setParameter(7,o.getGameName());
    query.setParameter(8,o.getGameId());
    query.setParameter(9,o.getMoney());
    query.setParameter(10,o.getGameAbout());
    query.setParameter(11,o.getPurchaseDate());
    query.setParameter(12,o.getCreateTime());
    query.setParameter(13,o.getCustomerId());
    query.setParameter(14,o.getCustomerName());
    query.setParameter(15,o.getCustomerLoginName());
    query.setParameter(16,o.getMemberId());
    query.setParameter(17,o.getMemberName());
    query.setParameter(18,o.getHaveCustomerId());
    query.setParameter(19,o.getStatus());
    query.setParameter(20,o.getIfrom());
    query.setParameter(21,o.getTradingStatus());
    query.setParameter(22,o.getGameFaceName());
    query.setParameter(23,o.getReceiptDataOne());
    query.setParameter(24,o.getReceiptDataTwo());
    query.setParameter(25,o.getTransactionId());

    int result = query.executeUpdate();
    log.debug("插入接口:{}",result>0?"成功":"数据已经重复存在");
    return o;
}

这里是一个如果数据存在则不添加的业务。这里是用到了SOSO的 https://www.sojson.com/blog/288.html 的方案三。加上query.setParameter(index,parms);方式对“?”进行参数占位补充。

返回值:由于是一个insert操作,另外成功则返回操作的条数,没有做数据改变则返回 0 。

如果出现 “jpa Executing an update/delete query ”异常,那么是因为你没有添加事物和“@Modifying”比较,把注解加上就可以。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/294.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
上天我不能,入地我不愿,我只能徘徊于天地之间。生当夏花,死而无憾!
相关文章
SQL Server 对JSON的支持
MySql数据库优化注意的四个细节(方法)
MySQL数据库存储过程字符集问题,乱码的解决办法
MySQL数据库为用户设置密码,Mysql修改密码。Mysql忘记密码解决方法
MySQL数据库表怎么锁定
MySQL 分区、分表
Urlrewrite Java 伪静态 urlrewrite.xml 配置参数描述
Oracle与Mysql删除重复的数据,Oracle和Mysql数据去重复
Mysql5.6下载安装,Mysql5.7下载安装 ,Windows64位,绿色安装(解压缩安装)图文安装教程
Shiro教程,Shiro 配置文件详细解释,Shiro自定义Filter配置
最新文章
Javascript 加密/压缩后运行不了,JavaScript报错排查讲解 22
JavaScript 不可逆加密问题排查之方案一(闭包优化) 22
Java爬虫,Jsoup 爬取大众点评、美团商家信息电话号码解决方案 152
分解质因数 JavaScript 计算方式,及分解质因数讲解 4
湖南腾众4s店服务怎么样?进来看看你就知道了 27
SEO 之 SpringMVC redirect 301,301和302区别详细讲解 69
网站如何设置404页面、500等错误页面,有什么漏洞?怎么预防? 87
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫 143
HttpClient获取访问域名的真实ip,HttpClient请求获取目标IP地址 258
又拍云24小时日志下载方法,日志合并,.gz 压缩包多个合并方法 42
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 174625
Elasticsearch教程(四) elasticsearch head 插件安装和使用 137987
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 116249
Elasticsearch教程(六) elasticsearch Client创建 81935
Elasticsearch教程(二),IK分词器安装 76990
Elasticsearch教程(一),全程直播(小白级别) 76877
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 76667
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 74060
Elasticsearch教程(五) elasticsearch Mapping的创建 69248
Elasticsearch教程(三),IK分词器安装 (极速版) 58117
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...