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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lovequanquqn/article/details/83501121

 JPA 实际上就是 Hibernate  的封装,根据Interface 方法名,生成对应的方法,也支持Query注解的方式和原生SQL,原生SQL如下:

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

 @Query(value = "select * from table_car_mark limit 0,10",nativeQuery = true)
 List<CarsMark> findTop10();
注解的方式需要增加一个“nativeQuery=true”来表示是原生 SQL  

2、EntityManager.Query 方式:

String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) VALUES(1379000,204819,4,1,20121101012203,116.4130173,39.8860664,0,0,1),(1378501,162481,4,0,20121101012202,116.3074417,39.8848457,54,240,1)";

Query query = em.createNativeQuery(sql);

3、复杂原生SQL,占位式:

...
import javax.persistence.EntityManager;
import javax.persistence.Query;
....
 
@Autowired
 private EntityManager em;

String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) values(?,?,?,?,?,?,?,?,?)";
query = em.createNativeQuery(sql);
query.setParameter(1,1);
query.setParameter(2,'values');
query.setParameter(3,1);
query.setParameter(4,1);
query.setParameter(5,'values');
query.setParameter(6,'values');
query.setParameter(7,'values');
query.setParameter(8,'values');
query.setParameter(9,'values');

query.executeUpdate();
使用 query.setParameter(index,parms);方式对“?”进行参数占位补充。
Note:
返回值:由于是一个insert操作,另外成功则返回操作的条数,没有做数据改变则返回 0 。
如果出现 “jpa Executing an update/delete query ”异常,那么是因为你没有添加事物和“@Modifying”比较,把注解加上就可以。

猜你喜欢

转载自blog.csdn.net/lovequanquqn/article/details/83501121