使用Kotlin开发Springboot项目

news/2024/12/28 14:36:10/

创建项目

选择kotlin

使用gradle

选择使用的库和Springboot版本

项目配置

和Java项目一致

项目结构

和Java项目也差不多

增删改查

先定义一个Mapper,使用@Mapper,不需要进行其他配置,比如mapper路径等。

package com.example.demo.mapperimport com.example.demo.model.vo.LoginResultVO
import org.apache.ibatis.annotations.Mapper
import org.apache.ibatis.annotations.Select/***    @Author : Cook*    @Date   : 2024/12/27*    @Desc   :*    @Version:*/
@Mapper
interface UserMapper {@Select("select * from users")fun findAll(): List<LoginResultVO>
}

定义Service接口

package com.example.demo.serviceimport com.example.demo.model.vo.LoginResultVO/***    @Author : Cook*    @Date   : 2024/12/27*    @Desc   :*    @Version:*/
interface UserService {fun findAll(): List<LoginResultVO>
}

Service的实现

引用其他对象不需要用spring的注解了,只需要在构造方法里面引用就可以

package com.example.demo.serviceimport com.example.demo.mapper.UserMapper
import com.example.demo.model.vo.LoginResultVO
import org.springframework.stereotype.Service/***    @Author : Cook*    @Date   : 2024/12/27*    @Desc   :*    @Version:*/
@Service
class UserServiceImpl(private val mapper: UserMapper) : UserService {override fun findAll(): List<LoginResultVO> {return mapper.findAll()}
}

Control

package com.example.demo.apiimport com.example.demo.model.vo.LoginResultVO
import com.example.demo.model.vo.LoginVO
import com.example.demo.service.UserService
import jakarta.servlet.http.HttpServletRequest
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController/***    @Author : Cook*    @Date   : 2024/12/27*    @Desc   :*    @Version:*/
@RestController
@RequestMapping("/user/")
class UserApi(private val userService: UserService) {@PostMapping("findAll")fun findAll(request: HttpServletRequest, @RequestBody(required = false)  loginVO: LoginVO?): List<LoginResultVO> {return userService.findAll()}}

SQL中使用脚本

和Java方式有点不同

需要@Update(("SQL语句"))  多个括号,其他都差不多

使用<script>标签

@Update(("<script>" +"<foreach collection='list' item= 'user' index ='id' separator=';'>  " +"update user set name = #{user.name},sex = #{user.outStoreId} where  id = #{user.id}" +"</foreach> " +" </script>"))fun updateUser(userList: List<User>): Int

@Bean注解

  @Bean(name = ["WeChatService"])fun getWeChatService(): WeChatService {return retrofitClient.create(WeChatService::class.java, WeChatService.BASE_URL)}


http://www.ppmy.cn/news/1558813.html

相关文章

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线&#xff0c;必须过顶点&#xff0c;圆滑后还不能太走样&#xff0c;捣鼓一番&#xff0c;发现里面颇有玄机&#xff0c;于是把我多方抄来改造的方法发出来&#xff0c;方便新手&#xff1a; 如上图&#xff0c;看代码吧&#xff1a; -------------------…

wsl安装ubuntu 18.04

wsl安装ubuntu 18.04 开启wsl bios开启hyper-v服务与功能里开启wsl重启Windows wsl更新 由于当前wsl版本安装ubuntu会报错&#xff0c;因此升级wsl到最新版。 首先使用在线升级wsl。 wsl --update但由于网络问题&#xff0c;一直会报错&#xff0c;因此改用安装包离线安装…

while 循环

应用&#xff1a;循环轮播图 最基础、最核心 while循环 规划好条件 打印1-100 上面代码没有if break中断循环 break只结束距离自己最近的循环 输出结果1-49 打印不了50 Continue中止本次循环 提前开始下一次循环 输出结果&#xff1a;1-101&#xff08;没有50&#xff09; 有1…

Amazon Bedrock 实践 - 利用 Llama 3.2 模型分析全球糖尿病趋势

黄浩文 资深开发者布道师 亚马逊云科技 拥有电信、互联网以及云计算等行业超过 20 年的丰富经验&#xff0c;曾任职于微软、Sun 和中国电信。他目前专注于生成式 AI、大型语言模型 (LLM)、机器学习和数据科学等领域的技术内容创作和实践分享&#xff0c;致力于赋能全球开发者。…

2.阿里云flinkselectdb-jar作业

1.概述 本文继续介绍使用阿里云实时计算flink把数据从自建mysql同步到阿里云selectdb的过程。上一节使用sql作业&#xff0c;不够强大&#xff0c;有如下问题: 不支持自动创建结果表(selectdb表)。同步前需要手动在selectdb创建结果表&#xff1b;不支持源表(mysql表)的ddl语…

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署&#xff08;或持续交付&#xff09;。它是一套实践和工具&#xff0c;旨在通过自动化构建、测试和部署来改进软件开发流程&#xff0c;使您能够更快、更可靠地交付代码更改。 持续集成 (CI)&#xff1a;在共享存储库中自动构建、测试…

面试经典题目:LeetCode134_加油站

leetcode134_加油站 暴力解法贪心算法初始条件第一个不等式第二个不等式考虑任意加油站 z z z推导过程结论 题目链接&#xff1a;leetcode134_加油站 暴力解法 暴力解法会尝试每个加油站作为起点&#xff0c;模拟一圈行驶来验证是否能成功环绕一周。这种方法的时间复杂度是 O…

微信小程序 不同角色进入不同页面、呈现不同底部导航栏

遇到这个需求之前一直使用的小程序默认底部导航栏&#xff0c;且小程序默认入口页面为pages/index/index&#xff0c;要使不同角色呈现不同底部导航栏&#xff0c;必须要在不同页面引用不同的自定义导航栏。本篇将结合分包&#xff08;subPackages&#xff09;展开以下三步叙述…