SpringBoot 整合 Jpa 项目(含 Jpa 原生 sql 语句介绍)
发布于: 2020 年 10 月 17 日
1、插入语句
@Transactional@Query(value = "insert into number_rule values(?1,?2)", nativeQuery = true)@Modifyingint insertRule(int nums,int rule);
复制代码
2、更新语句
@Transactional@Query(value = "update number_count set count = ?1", nativeQuery = true)@Modifyingpublic void updateCount(int count);
复制代码
3、查询语句
@Transactional@Query(value = "select count from number_count")@ModifyingCount selectCount();
复制代码
4、删除语句
@Transactional@Modifying@Query(value = "delete from number_count where count =?1",nativeQuery = true)int deleteCount(int count);
复制代码
注意:
不加@Transactional有可能会抛javax.persistence.TransactionRequiredException:异常,我是在抛异常之后才加上的。
@Transactional、 @Query、@Modifying这三个注解都是需要的
nativeQuery = true代表使用原生 sql
------
下面贴一下完整代码:
package com.example.demo.mapper;import com.example.demo.entity.Count;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Modifying;import org.springframework.data.jpa.repository.Query;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;/*** 计数器 数据库映射** @author bws* @date 2019/8/30**/@Componentpublic interface CountMapper extends JpaRepository<Count, Integer> {/** 我们在这里直接继承 JpaRepository* 这里面已经有很多现场的方法了* 这也是JPA的一大优点** */@Transactional@Query(value = "update number_count set count = ?1", nativeQuery = true)@Modifyingpublic void updateCount(int count);}
复制代码
------
package com.example.demo.controller;import com.example.demo.entity.Count;import com.example.demo.mapper.CountMapper;import com.example.demo.service.DisorderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Calendar;import java.util.List;import java.util.Random;/*** 生成不重复数字** @author zhaohualuo* @date 2019/8/30**/@RestControllerpublic class DisorderController {@Autowired CountMapper countMapper;@GetMapping("/list")public int findAll() {return countMapper.updateCount(1);}}
复制代码
------
package com.example.demo.entity;import lombok.Data;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;/*** 累加器实体类** @author bws* @date 2019/8/30**/@Data@Entity@Table(name = "number_count")public class Count {@Idprivate int count;}
复制代码
------
application.yml
spring:devtools:restart:enabled: falsedatasource:driver-class-name: org.postgresql.Driverurl: jdbc:postgresql://localhost:5432/xxxusername: xxxpassword: xxxjpa:hibernate:ddl-auto: updateshow-sql: truedatabase-platform: org.hibernate.dialect.PostgreSQLDialectproperties:hibernate:temp:use_jdbc_metadata_defaults: false
复制代码
------
package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
复制代码
------
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
复制代码
------
启动项目之后,访问地址:
http://localhost:8080/list
个人公众号:Java 架构师联盟,每日更新技术好文
划线
评论
复制
发布于: 2020 年 10 月 17 日阅读数: 59
版权声明: 本文为 InfoQ 作者【小Q】的原创文章。
原文链接:【http://xie.infoq.cn/article/bfad32bba8629616e5f0d75d0】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
小Q
关注
还未添加个人签名 2020.06.30 加入
小Q 公众号:Java架构师联盟 作者多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果能为您提供帮助,请给予支持(关注、点赞、分享)!











评论