Kotlin-集成SpringBoot+MyBatis+代码生成器

目录

一、相关版本

二、Maven因引入相关依赖

三、SpringBoot配置文件

四、代码生成工具

五、实现用户服务模块案例

1、Controller

2、Service

3、Entity

4、Mapper

5、接口测试


一、相关版本

工具版本
Idea2022.3.2
Springboot2.7.12
MyBatis3.5.3.1
MySQL8.0.28
JDK1.8

相关代码已分享到Gitee:

https://gitee.com/Vmetrio/kotlin-springbooticon-default.png?t=N7T8https://gitee.com/Vmetrio/kotlin-springboot项目结构:

二、Maven因引入相关依赖

<?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.7.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>springboot</description><properties><java.version>1.8</java.version><kotlin.version>1.8.20</kotlin.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-kotlin</artifactId></dependency><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-reflect</artifactId></dependency><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib-jdk8</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.5.3.1</version></dependency><!--MyabtisPlus 代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency></dependencies><build><sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory><testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-maven-plugin</artifactId><configuration><args><arg>-Xjsr305=strict</arg></args><compilerPlugins><plugin>spring</plugin></compilerPlugins></configuration><dependencies><dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-maven-allopen</artifactId><version>${kotlin.version}</version></dependency></dependencies></plugin></plugins></build></project>

三、SpringBoot配置文件

server:port: 8080spring:datasource:url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:demo}?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=trueusername: ${MYSQL_USERNAME:root}password: ${MYSQL_PWD:123456789}driverClassName: com.mysql.cj.jdbc.Driver##  Hikari 连接池配置hikari:## 最小空闲连接数量minimum-idle: 10## 空闲连接存活最大时间,默认600000(10分钟)idle-timeout: 18000## 连接池最大连接数,默认是10maximum-pool-size: 1000## 此属性控制从池返回的连接的默认自动提交行为,默认值:trueauto-commit: true## 连接池母子pool-name: DatebookHikariCP## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟max-lifetime: 1800000## 数据库连接超时时间,默认30秒,即30000connection-timeout: 300000connection-test-query: SELECT 1jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghaimybatis-plus:mapper-locations: classpath*:mapper/*.xml,classpath*:mapping/*.xml#MyBatis 别名包扫描路径,通过该属性可以给包中的类注册别名,多个路径用逗号分割type-aliases-package: com.example.springboot.entityglobal-config:db-config:id-type: AUTO # 全局默认主键策略,默认为雪花ID,若表中设置了自增,则生成的实体自动添加自增ID属性,参考 TestDeletelogic-delete-field: deleted # 全局逻辑删除的实体字段名,若不配置,则不启用logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)configuration:map-underscore-to-camel-case: true # 驼峰转下划线(默认)log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志输出

四、代码生成工具

package com.example.springbootimport com.baomidou.mybatisplus.generator.AutoGenerator
import com.baomidou.mybatisplus.generator.config.DataSourceConfig
import com.baomidou.mybatisplus.generator.config.GlobalConfig
import com.baomidou.mybatisplus.generator.config.PackageConfig
import com.baomidou.mybatisplus.generator.config.StrategyConfig/*** 代码生成*/
fun main() {AutoGenerator(// 设置数据源/*** url: jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True* username: 用户名* password: 密码*/DataSourceConfig.Builder("jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True","root","123456789").build()).run {// 全局配置global(GlobalConfig.Builder()// 启用 Kotlin.enableKotlin()/*** 输出路径* System.getProperty("user.dir") 得到的是这个项目的目录* /src/main/kotlin 是你代码的存放目录,如果你是多模块项目,记得加上你的模块名* 比如 service-oa-parent*              |- service-oa*              |- model* 你想在 service-oa 中生成,那么应该填入: System.getProperty("user.dir") + "/service-oa/src/main/kotlin"*/.outputDir(System.getProperty("user.dir") + "/src/main/kotlin")// 作者.author("meng")// 设置生成完毕后是否展开你 idea 的目录,不影响结果.disableOpenDir().build())// 包信息配置packageInfo(PackageConfig.Builder()/*** 假定下列代码的目录结构为:* com.goxiaogle.auth*  |- controller*  |- service*      |- impl*  |- mapper*  则 com.goxiaogle 为父包,auth 为模块名*/// 设置父包.parent("com.example")// 设置模块名.moduleName("springboot")// 以下四个可以去掉,如果你的分包命名和他一样// 设置 Controller 层包名,默认就是 controller.controller("controller")// 设置 Service 层包名,默认就是 service.service("service")// 设置 Mapper 层包名,默认就是 mapper.mapper("mapper")// 设置 Entity 包名,默认就是 entity.entity("entity").build())// 策略配置strategy(StrategyConfig.Builder()// 设置要生成代码的数据库表名,可以设置多个,如 addInclude(a, b, c).addInclude("user")// 设置生成的 service 接口命名方式,默认是 IXxxService,这里改成 XxxService// serviceBuilder() 方法建议在 build 后使用,此处偷懒直接用了.serviceBuilder().formatServiceFileName("%sService").mapperBuilder().enableFileOverride().enableBaseColumnList().enableBaseResultMap().build()// 设置其它几层的内容// .entityBuilder()// .controllerBuilder()// .mapperBuilder().build())// 执行execute()}
}

五、实现用户服务模块案例

1、Controller

package com.example.springboot.controller;import com.example.springboot.entity.UserEntity
import com.example.springboot.service.UserService
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RestController
import javax.annotation.Resource
import javax.servlet.http.HttpServletRequest/*** <p>*  用户服务* </p>** @author meng* @since 2024-02-03*/
@RestController
@RequestMapping("/user")
class UserController {// 需要注意和java不同的是,如果有bean的注入,需要在前面加上lateinit@Resourcelateinit var userService: UserService;@PostMapping("/getUserById")fun getUserById(req: HttpServletRequest): UserEntity {val id: String = req.getParameter("id")val info: UserEntity = userService.findUserById(id)return info}
}

2、Service

package com.example.springboot.service;import com.example.springboot.entity.UserEntity;
import com.baomidou.mybatisplus.extension.service.IService;/*** <p>*  服务类* </p>** @author meng* @since 2024-02-03*/
interface UserService : IService<UserEntity> {fun findUserById(userId: String): UserEntity
}
package com.example.springboot.service.impl;import com.example.springboot.entity.UserEntity;
import com.example.springboot.mapper.UserMapper;
import com.example.springboot.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource/*** <p>*  服务实现类* </p>** @author meng* @since 2024-02-03*/
@Service
open class UserServiceImpl : ServiceImpl<UserMapper, UserEntity>(), UserService {@Resourcelateinit var userMapper: UserMapperoverride fun findUserById(userId: String): UserEntity {return userMapper.findUserById(userId)}}

3、Entity

package com.example.springboot.entity;import java.io.Serializable;/*** <p>* * </p>** @author meng* @since 2024-02-03*/
class UserEntity : Serializable {var id: String? = nullvar name: String? = nulloverride fun toString(): String {return "User{" +"id=" + id +", name=" + name +"}"}
}

4、Mapper

package com.example.springboot.mapper;import com.example.springboot.entity.UserEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper/*** <p>*  Mapper 接口* </p>** @author meng* @since 2024-02-03*/
@Mapper
interface UserMapper : BaseMapper<UserEntity> {//根据id获取用户信息fun findUserById(id: String): UserEntity
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springboot.mapper.UserMapper"><!-- 通用查询映射结果 --><resultMap id="BaseResultMap" type="com.example.springboot.entity.UserEntity"><id column="id" property="id" /><result column="name" property="name" /></resultMap><!-- 通用查询结果列 --><sql id="Base_Column_List">id, name</sql><select id="findUserById" resultMap="BaseResultMap" >SELECT<include refid="Base_Column_List" />FROM userWHERE id = #{id}</select></mapper>

5、接口测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python详细教程

一、Python简历 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Python 是一种解…

MySQL原理(五)事务

一、介绍&#xff1a; 1、介绍&#xff1a; 在计算机术语中&#xff0c;事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。 2、事务的4大特性 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性…

LaTeX表格:合并单元格、文字旋转90度并居中

在LaTeX表格中&#xff0c;如何使用\multirow合并单元格&#xff0c;并将单元格中的文字旋转九十度&#xff0c;并且居中呢&#xff1f; 首先引入graphicx、multirow和array包&#xff1a; \usepackage{graphicx} \usepackage{multirow} \usepackage{booktabs}然后定义一种新…

DoubleEnsemble:基于样本重加权和特征选择的金融数据分析方法

现代机器学习模型&#xff08;如深度神经网络和梯度提升决策树&#xff09;由于其提取复杂非线性模式的优越能力&#xff0c;在金融市场预测中越来越受欢迎。然而&#xff0c;由于金融数据集的信噪比非常低&#xff0c;并且是非平稳的&#xff0c;复杂的模型往往很容易过拟合。…

「递归算法」:Pow(x,n)

一、题目 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出&#xff1a;9…

使用Arcgis对欧洲雷达高分辨率降水数据重投影

当前需要使用欧洲高分辨雷达降水数据&#xff0c;但是这个数据的投影问题非常头疼。实际的投影应该长这样&#xff08;https://gist.github.com/kmuehlbauer/645e42a53b30752230c08c20a9c964f9?permalink_comment_id2954366https://gist.github.com/kmuehlbauer/645e42a53b307…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面&#xff0c;旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户&#xff0c;都可以在本文中找到对应的内容&#xff0c;加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

故障诊断 | 一文解决,LSTM长短期记忆神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现LSTM长短期记忆神经网络故障诊断 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}

文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…

虚拟机Windows Server 2016 安装 MySQL8

目录 一、下载MySQL8 1.下载地址&#xff1a; 2.创建my.ini文件 二、安装步骤 第一步&#xff1a;命令窗口 第二步&#xff1a;切换目录 第三步&#xff1a;安装服务 第四步&#xff1a;生成临时密码 第五步&#xff1a;启动服务 第六步&#xff1a; 修改密码 三…

【服务器搭建】快速完成幻兽帕鲁服务器的搭建及部署【零基础上手】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 教程详戳&#xff1a;不需要懂技术&#xff0c;1分钟幻兽帕鲁服…

stable diffusion学习笔记——高清修复

ai画图中通常存在以下痛点&#xff1a; 受限于本地设备的性能&#xff08;主要是显卡显存&#xff09;&#xff0c;无法跑出分辨率较高的图片。生图的时候分辨率一调大就爆显存。即便显存足够。目前主流的模型大多基于SD1.0和SD1.5&#xff0c;这些模型在训练的时候通常使用小…

【Git】01 Git介绍与安装

文章目录 一、版本控制系统二、Git三、Windows安装Git3.1 下载Git3.2 安装3.3 检查 四、Linux安装Git4.1 YUM安装4.2 源码安装 五、配置Git5.1 配置用户名和邮箱5.2 配置级别5.3 查看配置 六、总结 一、版本控制系统 版本控制系统&#xff0c;Version Control System&#xff…

大数据分析|大数据分析的三类核心技术

文献来源&#xff1a;Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1…

2024.2.3 寒假训练记录(17)

补一下牛客&#xff0c;菜得发昏了&#xff0c;F搞了两个小时都没搞出来&#xff0c;不如去开H了 还没补完 剩下的打了atc再来 文章目录 牛客 寒假集训1A DFS搜索牛客 寒假集训1B 关鸡牛客 寒假集训1C 按闹分配牛客 寒假集训1D 数组成鸡牛客 寒假集训1E 本题又主要考察了贪心牛…

java设计模式:策略模式

在平常的开发工作中&#xff0c;经常会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高代码的可拓展性和维护性。今天来聊聊策略模式。 策略模式是一种行为型设计模式&#xff0c;运行时可以根据需求动…

(2024|ICLR reviewing,IGN,EBGAN,重建、幂等和流形紧致目标)幂等生成网络

Idempotent Generative Network 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1 优化目标 2.2 训练 2.3 架构和优化 4. 实验 5. 相关工作 6. 局限性 0. 摘要…

PyTorch基础-Tensors属性、Tensor的运算

PyTorch的基本概念 Tensor的基本概念 张量高于标量、向量、矩阵 标量说零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 Tensor与机器学习的关系 Tensor的创建 函数功能Tensor(*size)基础构造函数Tensor(data)类似np.arrayones(*size)全1Tensorzeros(…

029 命令行传递参数

1.循环输出args字符串数组 public class D001 {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}} } 2.找打这个类的路径&#xff0c;打开cmd cmd C:\Users\Admin\IdeaProjects\JavaSE学习之路\scanner\src\com\yxm\demo 3. 编译…

C++ 之LeetCode刷题记录(二十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 136. 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现…