写点什么

SpringBoot 整合 Jpa 项目(含 Jpa 原生 sql 语句介绍)

用户头像
小Q
关注
发布于: 2020 年 10 月 17 日

1、插入语句


@Transactional @Query(value = "insert into number_rule values(?1,?2)", nativeQuery = true)@Modifying int 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) @Modifying public 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 {
@Id private int count;}
复制代码


------


application.yml


spring:  devtools:    restart:      enabled: false  datasource:    driver-class-name: org.postgresql.Driver    url: jdbc:postgresql://localhost:5432/xxx    username: xxx    password: xxx  jpa:    hibernate:      ddl-auto: update    show-sql: true    database-platform: org.hibernate.dialect.PostgreSQLDialect    properties:      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
用户头像

小Q

关注

还未添加个人签名 2020.06.30 加入

小Q 公众号:Java架构师联盟 作者多年从事一线互联网Java开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果能为您提供帮助,请给予支持(关注、点赞、分享)!

评论

发布
暂无评论
SpringBoot整合Jpa项目(含Jpa 原生sql语句介绍)