Kotlin整合Spring Boot实现数据库增删改查(spring data jpa版)

Kotlin + Spring Boot 实用指南:十几条落地经验与踩坑记录 Kotlin作为JVM上的现代语言,凭借空安全、数据类、协程等特性,正在改变Spring Boot后端的开发方式。Spring Framework从5.0起就提供了官方支持,但很多开发者仍习惯把Java代码逐行翻译成Kotlin,导致代码充满Java味。掌握Kotlin的惯用写法,能让依赖注入、数据建模、接口实现更加简洁安全。本文从环境准备、项目骨架入手,逐步拆解Controller的构造函数注入与suspend fun、数据层的JPA与R2DBC选择、Flow的适用边界、配置绑定与JSON序列化注意事项, 阅读详情

接上次的kotlin整合spring boot的mybatis版本,这次分享的内容也很精彩,现在spring data jpa也慢慢流行起来了,因此学习kotlin的时候也顺带写了spring data jpa版本的,下面就直接上代码分享给大家了

1 pom加入如下配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2 springboot的主配置文件(配置数据源、日志、jpa)
server.port=8089
#DataBase DataSources
spring.datasource.url = jdbc:mysql://localhost:3306/debugxwz
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10



logging.level.com.debug=debug

# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
3 实体Entity

package com.debug.pojo

import javax.persistence.Entity
import javax.persistence.Table
import javax.persistence.GenerationType
import javax.persistence.GeneratedValue
import javax.persistence.Id

@Entity
@Table(name = "user")
data class UserInfo (
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	val id:Int?=null,
	val name:String?=null,
	val address:String?=null
)
4 DAO或Repository(CRUDRepository、PagingAndSortingRepository都可,根据实际需要选择)
package com.debug.dao

import com.debug.pojo.UserInfo
import org.springframework.data.repository.PagingAndSortingRepository
import org.springframework.data.repository.query.Param
import org.springframework.data.jpa.repository.Query
import org.springframework.data.jpa.repository.Modifying


interface UserDao:PagingAndSortingRepository<UserInfo, Integer> {
    //根据id获取用户信息
    fun findById(id: Int): UserInfo
	
    @Query("select m from UserInfo m where m.name like %:name%")
    fun getUserInfoByName(@Param("name") name:String):List<UserInfo>
	
    @Modifying
    @Query("update UserInfo m set m.name=:name where m.id=:id")
    fun updateMemberById(@Param("name")name:String,@Param("id")id:Int) 
   
    @Modifying
    @Query("delete from UserInfo m  where m.id=:id")
    fun deleteMemberById(@Param("id")id:Int) 
	
}
5  service层

package com.debug.service

import com.debug.pojo.UserInfo
import org.springframework.transaction.annotation.Transactional
import org.springframework.transaction.annotation.Propagation
import org.springframework.data.repository.query.Param

interface IUserService {
	
	fun findUserById(userId: Int): UserInfo
	fun getUserInfoByName(name:String):List<UserInfo>
	fun updateMemberById(name:String,id:Int)
	fun deleteMemberById(id:Int) 
	
	
}

package com.debug.service.impl

import com.debug.service.IUserService
import javax.annotation.Resource
import com.debug.pojo.UserInfo
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import javafx.scene.control.Pagination
import org.springframework.transaction.annotation.Propagation
import com.debug.dao.UserDao

@Service(value="userSrvice")
open class UserService:IUserService{
	@Resource
    lateinit var userDao:UserDao
	
	override fun findUserById(userId: Int):UserInfo{
		return userDao.findById(userId)
	}
	
	override fun getUserInfoByName(name:String):List<UserInfo>{
		return userDao.getUserInfoByName(name)
	}
	@Transactional(propagation=Propagation.REQUIRED)
	override fun updateMemberById(name:String,id:Int){
		return userDao.updateMemberById(name,id)
	}
	@Transactional(propagation=Propagation.REQUIRED)
	override fun deleteMemberById(id:Int) {
		return userDao.deleteMemberById(id)
	}
	
}

service层要注意处理下事务否则调用时会报错

6  controller的代码

package com.debug.controller

import org.springframework.web.bind.annotation.RestController
import javax.annotation.Resource
import com.debug.service.IUserService
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
import com.debug.pojo.UserInfo
import javax.servlet.http.HttpServletRequest
import com.debug.service.impl.UserService


@RestController
class UserController {
	
    @Resource
    lateinit var userService: IUserService;
	
    @RequestMapping("/getById")
    @ResponseBody
    fun getUserById(req:HttpServletRequest):UserInfo {
	val id:Int=Integer.parseInt(req.getParameter("id"))
        val info:UserInfo=userService.findUserById(id)
        return info
    }
    @RequestMapping("/getUserInfoByName")
    @ResponseBody
    fun getUserInfoByName(req:HttpServletRequest):List<UserInfo> {
	val name:String=req.getParameter("name")
        val info:List<UserInfo> =userService.getUserInfoByName(name)
        return info
    }
	
    @RequestMapping("/updateMemberById")
    @ResponseBody
    fun updateMemberById(req:HttpServletRequest):String {
	val name:String=req.getParameter("name")
	val id:Int=Integer.parseInt(req.getParameter("id"))
        userService.updateMemberById(name,id);
        return "数据修改成功"
    }
	
    @RequestMapping("/deleteMemberById")
    @ResponseBody
    fun deleteMemberById(req:HttpServletRequest):String {
	
	val id:Int=Integer.parseInt(req.getParameter("id"))
        userService.deleteMemberById(id);
        return "数据删除成功"
    }
	
	
}
至此所有的代码编写完成

Kotlin编程基础教程:数据库编程入门 作者:禅与计算机程序设计艺术 1.背景介绍 在Kotlin编程中,经常需要用到数据库进行数据存储、检索和更新等功能。作为一名资深技术专家、程序员和软件系统架构师,我认为无论什么语言和数据库,都可以从以下几个方面入手学习并掌握Kotlin的数据库编程知识: 了解Kotlin中 阅读详情

相关推荐

Maven+SpringBoot+JPA单表增删改查实例

本项目使用Maven+SpringBoot+springDataJPA,实现单表的增删改查

Springboot整合使用JPA进行增删改查

JPA可以根据不同的查询条件在DAO层接口中自定义查询。比如:定义一个根据id和username为查询条件的方法。}controller层调用:}}postman测试:注意:在使用JPA中,发现JPA实现了一些方法,如find,save等,但是没有update。使用@Query,编写nativeSQL,通过原生的SQLupdate。优点,可以自己定制,缺点,SQL语句繁琐,不灵活,不能实现动态更改某个属性。

m0_73311735的博客 4419

STM32CubeMX实战:FreeRTOS内存管理5种方案全解析(附heap_4避坑指南)

本文深入解析了STM32CubeMX环境下FreeRTOS的5种内存管理方案(heap_1到heap_5),重点介绍了heap_4的优化策略与避坑指南。通过对比分析各方案的特点、性能指标及适用场景,帮助开发者根据项目需求选择最优内存管理策略,提升嵌入式系统开发效率与稳定性。

aa123的博客 620

springboot整合jpa实现增删改查

一、Jpa简介 1、什么是JPA? JPA是一套Java官方制定的ORM 方案,是Java的一个规范 。Spring Data JPA是对基于 JPA 的数据访问层的增强支持。 应用JPA的主流框架:Hibernate (JBoos)、EclipseTop(Eclipse社区)、OpenJPA (Apache基金会)。 2、为什么使用JPA? JPA优点: (1)简单易用,帮助开发者提供了生产率 (2)便于维护,减低了维护成本 (3)学习成本相对比较低。 jPA存在的缺...

沐@曦辰 4873

VOLTE信令流程-IMS注册篇(五)

目录 VOLTE信令流程-IMS 注册 VOLTE信令流程-IMS 注册/注销 VOLTE信令流程-VoLTE呼叫流程 VoLTE-VoLTE VoLTE-CS CS-VoLTE CS-CS VOLTE信令流程 VOLTE信令流程-VOLTE-VOLTE信令 VOLTE信令流程-INVITE详细信息 VOLTE信令流程-eSRVCC信令流程 VOLTE信令流程-IP短信 VOLTE信令流程-IMS 注册 IMS注册流程简述  获取鉴权向量 IMS用户将注...

gender123的博客 2万+

Alphafold2/multimer Conda环境配置与GPU加速优化指南

本文详细介绍了如何在本地服务器或工作站上,通过Conda环境配置并优化GPU加速来部署Alphafold2及其多聚体版本Alphafold2-multimer。内容涵盖从硬件准备、依赖安装、数据库部署到实战预测与常见报错处理的全流程,重点解决了本地安装过程中的依赖冲突与GPU调用失败等关键问题,帮助研究人员高效运行这一蛋白质结构预测工具。

neovim7hacker的博客 470

Springboot快速整合JPA实现增删查改

connection-test-query: SELECT 1 #连接池每分配一条连接前执行的查询语句(如:SELECT 1),以验证该连接是否是有效的。①数据库连接池,这次例子里面采用的是springboot2.0版本后默认整合的hikari连接池,想多了解的可以去网上额外了解下这个数据库连接池的优劣。:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)auto-commit: true # 此属性控制从池返回的连接的默认自动提交行为,默认值:true。

2301_76238237的博客 1370

硬件级Dalvik字节码粒度无痕HOOK及VMP取址码定位分析

2.通过硬件读写断点的输出信息 可知pc寄存器就是art解释器的取码地址 直接硬件执行断点在这个pc 即可直接trace所有的smali执行流 通杀所有机型系统。本文即将探讨的是 如何在硬件级别实现dalvik bytecode粒度的无痕拦截技术 并实现鼠标点击一键hook 指哪儿打哪儿 感受 button power 的强大魅力!4.由于硬件断点是同步的 断下后可随时硬件dump下这一瞬间的app内存映像 写入unicorn的内存模拟执行。解释器在解释执行前必会读取内存中的bytecode。

2503_90751789的博客 1085

SpringBoot整合JPA的增删改查

废话不多说,上操作方法和相应的代码

2401_84502663的博客 1204

相似贴子推荐:基于 LangChain4j + Milvus 的混合检索实战

本文提出了一种基于LangChain4j和Milvus的混合检索方案,用于解决论坛社区中的相似帖子推荐问题。该方案结合稠密向量语义检索和BM25关键词检索的优势,通过RRF算法实现结果融合。系统采用bge-small-zh模型生成语义向量,利用Milvus 2.5+原生支持的BM25功能和混合搜索API,在百万级数据规模下实现50ms内的检索延迟,召回率和精确率分别提升15%和22%。文章详细介绍了从数据预处理、向量化到混合检索的完整实现流程,并探讨了进阶优化方向,为推荐系统和RAG应用提供了高效解决方案。

分享AI、区块链技术及应用,未来已来 88

安装Office程序时无法安装的解决方案

本文主要介绍了安装Office程序时无法安装的解决方案,希望能对安装Office的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 前置步骤 2.2 方法一 2.3 方法二

weixin_43178406的博客 15万+

Springboot集成mysql+jpa实现增删改查示例

Springboot集成mysql+jpa实现增删改查示例

weixin_40764759的博客 749

华为OD机试 - 名字的漂亮度(Java 牛客练习题)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。给出多个字符串,计算每个字符串最大可能的“漂亮度”。第一行一个整数N,接下来N行每行一个字符串。数据范围:输入的名字长度满足。每个字符串可能的最大漂亮程度。

学Java,找哪吒 1786

Kotlin JDSL与Spring Boot集成:无缝对接Spring Data JPA的完整指南

Kotlin JDSL是一个强大的Kotlin领域特定语言库,它让构建和执行JPQL查询变得异常简单。通过**Kotlin JDSL与Spring Boot的深度集成**,开发者可以在Spring Data JPA项目中享受类型安全的查询构建体验,无需生成元模型即可编写复杂的数据库查询。本文将为您提供一份完整的集成指南,帮助您快速上手这个强大的组合。 ## 🚀 为什么选择Kotlin JDSL

gitblog_01185的博客 216

手把手教你学Simulink--基于多能源系统协同控制的复杂场景实例:氢燃料电池+锂电池混合动力电动汽车能量管理仿真

本文介绍了基于Simulink的氢燃料电池与锂电池混合动力电动汽车能量管理系统的建模与仿真方法。系统包含驾驶循环输入、燃料电池子系统、锂电池子系统、能量管理、电机驱动等模块,通过协同控制优化能源分配。详细说明了从模型创建到各子系统设置的7个步骤,并提供了MATLAB代码示例。该仿真可评估不同工况下的系统响应速度、能量利用效率和电池寿命等性能指标,为混合动力汽车的能量管理策略设计和优化提供参考。

MHD0815的博客 239

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

终极Spring Boot与Kotlin整合指南:great-big-example-application后端开发最佳实践

Spring Boot与Kotlin是现代Java后端开发的黄金组合,而great-big-example-application项目正是这一技术栈的完美示范。这个由JHipster生成的全栈示例应用展示了如何将Spring Boot的便捷性与Kotlin的现代语法相结合,构建企业级后端服务的最佳实践。🚀 ## 📋 项目架构概览 great-big-example-application是

gitblog_01410的博客 328

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何快速构建现代Java应用:Kotlin与Spring Boot完整指南

在当今快速发展的Java生态系统中,**Kotlin与Spring Boot**的结合已经成为构建现代化企业级应用的首选技术栈。blog-tutorials项目为开发者提供了全面的教程资源,帮助您快速掌握这一强大的技术组合。本指南将带您深入了解如何利用Kotlin的简洁语法和Spring Boot的强大功能,打造高效、可维护的后端应用。 ## 🚀 Kotlin与Spring Boot:现代Ja

gitblog_00054的博客 936

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

为什么选择Kotlin JDSL?10个理由让你放弃传统JPA查询方式 [特殊字符]

在Kotlin开发领域,数据库查询构建一直是个挑战。传统的JPA查询方式虽然功能强大,但存在诸多不便。今天,我将为你介绍Kotlin JDSL——一个革命性的Kotlin库,它能让你轻松构建和执行查询,无需生成元模型。Kotlin JDSL通过基于KClass和KProperty的领域特定语言(DSL),彻底改变了Kotlin开发者的数据库查询体验。 ## 📊 Kotlin JDSL与传统JP

gitblog_00087的博客 613

第20篇-Spring-Data-JPA-Repository详解

本文介绍了在 Kotlin + Spring Boot 4 项目中使用 Spring Data JPA 的 Repository 接口体系进行高效数据访问。主要内容包括: Spring Data JPA 与传统 DAO 方式的对比,展示其通过方法名自动生成 SQL 的特性 Repository 接口体系的三层架构(Repository → CrudRepository → JpaRepository)及其适用场景 方法名查询语法,详细解析了 findBy 前缀和各种条件关键字的使用方式 提供完整的查询关键字

liumingxiy的博客 269

fritz2与Spring Boot整合:全栈Kotlin开发指南

fritz2是一个基于Kotlin协程和流的轻量级响应式Web框架,能够帮助开发者轻松构建现代化Web应用。当与Spring Boot后端结合时,可实现全栈Kotlin开发,享受类型安全和统一技术栈带来的开发效率提升。本文将详细介绍如何从零开始搭建fritz2前端与Spring Boot后端的整合项目,让你快速掌握全栈Kotlin开发的核心技能。 ## 1. 环境准备:快速搭建全栈开发环境 要

gitblog_01085的博客 462

Kotlin + SpringBoot + JPA 服务端开发

Kotlin + SpringBoot + JPA 服务端开发 本篇主要介绍一下 kotlin + springboot的服务端开发环境搭建 1.概述 Kotlin 是一个基于JVM的编程语言, 是IDEA开发工具 jetbrains 公司开发的语言,也被google选为android开发的首选语言, 因为它是完全兼容Java的 所以也可以做后端开发 比如集成我们在使用Java的一些技术框架 ,本篇就来简单介绍一下和SpringBoot的集成 下面我用Gradle init 的方式从头开始搭建Kot

qq_34285557的博客 1321

Spring Boot 后端开发详解:great-big-example-application 数据库配置与 RESTful API 设计

great-big-example-application 是一个基于 Spring Boot、Kotlin、Angular 4 等技术栈构建的全栈示例应用,本文将详细解析其数据库配置与 RESTful API 设计,帮助开发者快速掌握后端开发核心要点。 ## 一、数据库配置最佳实践 ### 1.1 多环境配置方案 项目采用 YAML 格式配置文件实现多环境隔离,核心配置位于 `src/ma

gitblog_00106的博客 508

Spring Boot 与 Kotlin使用Spring-data-jpa简化数据访问层

在《Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL》 中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务端和Web站点的开发任务了。 然而,在实际开发过程中,对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量...

全科的博客 1611

Spring Boot 4 与 Kotlin 2.2:原生协程与惯用开发实战

Kotlin 以空安全、协程和函数式特性成为现代 JVM 后端开发的热门选择,但传统 Spring Boot 对 Kotlin 的支持往往停留在语法兼容层面。Spring Boot 4 基于 Spring Framework 7,原生支持 Kotlin 2.2 与 K2 编译器,彻底移除 XML 配置,并深度集成协程、suspend 函数与 HTTP Interface,让 Kotlin 开发者摆脱 Java 思维束缚。本文从 Kotlin 语言核心优势切入,剖析 Spring Boot 4 底层架构变化,

weixin_34007020的博客 507

Spring Data JPA核心原理与高效查询实战

Spring Data JPA作为Java持久层框架,通过ORM技术实现对象与关系数据库的映射。其核心原理基于JPA规范,利用Hibernate等提供者实现,通过方法名解析自动生成SQL查询,大幅减少样板代码。该技术显著提升开发效率,特别适合CRUD密集的业务系统,如用户管理、订单处理等场景。文章深入解析Repository动态代理机制,结合分页查询、实体关联等高频使用场景,并针对N+1查询等性能痛点提供解决方案。通过二级缓存配置、批量操作优化等技巧,帮助开发者构建高性能数据访问层。

weixin_30294295的博客 384
上一篇: Kotlin整合Spring Boot实现数据库增删改查(mybatis版)
下一篇: Spring Boot整合MongoDB实现增删改查
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值